シェルスクリプトでRPG風ゲームを作ってみる④

だしまき
2026-07-08
2026-07-08

はじめに

先週から一足先に夏を先取りしています。
夏風邪です・・・季節の変わり目に強くなる方法募集中です。

こんにちは、だしまきです。


シェルでRPGを作ってみよう第4弾!
という事でまた機能を追加してみようと思います。

今回やる事

前回はモンスターの種類を追加しました。
https://blog.future.ad.jp/rpg-in-shell-script-3

少しずつRPGっぽくなってきたので、今回はこちらの機能を追加してみます。

・MPシステムの追加
・スキルの追加

では早速作っていきます!

作ってみよう

今回はファイアというスキルを消費MP5で設定してみたいと思います。
それに合わせて、MP周りの設定も実装して行こうと思います。

#プレイヤーステータス
player_mp=20

player_max_mp=20 

まずはプレイヤーステータスの所に上記設定を行い、
初期状態のmpを20に設定しました、レベルアップの処理などで使うのでmaxmpも20で設定。


#戦闘開始時のステータス表示
 echo "MP: $player_mp / $player_max_mp" 
#毎ターンのステータス表示
 echo "あなたのMP: $player_mp / $player_max_mp" 

次に戦闘関連のステータス表示の所で、現在のMP状態を表示する処理を追加。



#戦闘時の選択肢にファイアを追加
echo "1: 攻撃 2: 回復 3: ファイア(MP5)" 

#合わせてファイアを選択した際の処理の追加
elif [ "$action" = "3" ]; then

  fire_mp_cost=5

  if [ "$player_mp" -lt "$fire_mp_cost" ]; then
    echo "MPが足りない!"
    continue
  fi

  player_mp=$((player_mp - fire_mp_cost))

  damage=$((RANDOM % (player_attack_max - player_attack_min + 1) + player_attack_min))
  fire_bonus=$((player_level * 5))
  damage=$((damage + fire_bonus))

  echo "あなたはファイアを唱えた!"
  echo "$enemy_name に $damage ダメージ!"

  enemy_hp=$((enemy_hp - damage))

そして選択肢にファイアを追加し、ファイア選択肢の処理を追加しています。
3を入力した場合、現在のMPから5を消費します。足りない場合はここで処理は終了し選択肢に戻します。
MPが5以上ある場合は、ダメージ処理に入ります。
通常攻撃のダメージにプラスという形でレベル×5のダメージを与えるように設定しました。
ここは、魔法ダメージ用の別ステータスを用意する等で通常攻撃とは参照値を変えた方が良い気がしますね。
今回は実装が目的なのでこちらはまた次回以降・・・

完成!

という事で、実装完了したので早速遊んでみます。

良い感じ!ちゃんとスキルを使用した際のMP消費とレベルアップ時の回復まで反映出来ました!

ですが、別部分でEXPが181/150になっており、2回レベルアップしないといけないところがまだ設定できて無い事に気づきました
このままでは1戦闘で1レベルまでしかレベルアップしない事になるのでここは次回修正ですね!

あと何度か遊んでみてはいるのですが、ドラゴンの火力と回復がギリギリ過ぎて運悪いと永遠に回復撃ってないとやってられないタイミングあるんですよね・・・

もう少し形になってからバランスも考えたいです、、それでは!!