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

だしまき
2026-09-14
2026-09-14

はじめに

運動不足解消のために先月エアロバイクを買いました。
ゲームしながらでも1時間ほど漕いでいれば良い汗かけるので良い買い物だったと思います。

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


シェルでRPGを作ってみよう第5弾!
という事で今回も機能を追加します。

今回やる事

前回はMPシステムとスキルを追加しました。

また一部修正点も見つかったので、今回はその修正とこちらの機能を新たに追加してみます。

・複数回レベルアップする際に1回しかレベルが上がらない点の修正
・敵を倒した際にお金(ゴールド)をドロップする機能を追加

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

作ってみよう

まずは前回の修正から、前回大量の経験値を入手した際にレベルアップの処理が1回しか走らずEXPが溢れている事を確認しました。


これはレベルアップの処理をif文で回してたからですね、whileに変更する事で解消すると思うので修正してみようと思います。

〇ifとwhileについては、ざっくり下記のような感じ
・ if        =  条件を満たしたら1回実行
・while =  条件を満たしている間、繰り返し実行 


(修正内容)

 - if [ $player_exp -ge $exp_to_levelup ]; then
(中略)
 - fi 
+ while [ $player_exp -ge $exp_to_levelup ]; do 
(中略)
+ done 

出来ました!という事で一時的に経験値を100倍にしてテスト。


以下略・・・
ほんとはレベル11くらいまで上がってましたが割愛、無事修正出来ました!

では今回の新機能、ゴールド機能についても追加していきましょう。
まずはプレイヤーステータスの部分に所持金を追加していきます。

player_mp=20 
player_max_mp=20

# 今回ゴールド追加

player_gold=0

開始時に0Gからスタートさせ、今後敵からゴールドを獲得した時に合計金額を保存しておく場所としても必要です。


続いて現在のステータスを表示する場所にも、所持金を表示させるようにします。

  echo "EXP: $player_exp / $exp_to_levelup" 
  echo "所持金: ${player_gold}G" 

今回はEXPの下に追加しました。

続いて、敵ごとに獲得ゴールドを設定します。

enemy_name="スライム"
enemy_hp=$((RANDOM % 31 + 70))
enemy_attack_max=8
enemy_exp=$((RANDOM % 11 + 35))
# 【追加】5〜15G
enemy_gold=$((RANDOM % 11 + 5)) ;; 

こちらも経験値の下に追加するのが一番見やすそうなので、
exp配下にスライムの場合はランダムで5~15G手に入れられるように追加します。
後は、同様に他のモンスターについても敵の強さに応じて貰えるゴールドを設定しました。



最後に、敵を倒した際にゴールド獲得処理を追加していきます。

    # 経験値獲得
    gained_exp=$enemy_exp

    player_exp=$((player_exp + gained_exp))

    echo "経験値を $gained_exp 獲得!"
    echo "現在: $player_exp / $exp_to_levelup"

    # ゴールド確認(追加)
    gained_gold=$enemy_gold

    player_gold=$((player_gold + gained_gold))

    echo "${gained_gold}G 手に入れた!"
    echo "所持金: ${player_gold}G"

こちらも他と同じく経験値の下に処理を追加します。
まずはgained_gold=$enemy_goldで今回獲得したゴールド=倒した敵のゴールドを設定、
次にplayer_gold=$((player_gold + gained_gold))で現在の所持金に加算。
後の2行は経験値と同じく戦闘後の表示です。

今回はゴールドの追加のみですが、今後ショップ等を作る時には
所持金から引いていく形で処理が作れそうです。

完了!

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

良い感じ!ゴールドを獲得して、所持金に追加される事が確認出来ました。

せっかくなので次回は関連するショップ等、ゴールドを使う何かしらの機能を追加したいですね。

それでは!