シェルスクリプト:簡易RPGバトルゲーム
シェルスクリプトは、システム管理だけでなく、テキストベースのゲーム作成にも活用できる強力なツールです。ここでは、シェルスクリプトを使って「簡易RPGバトルゲーム」を作成し、その手順と詳細な解説を行います。この演習を通じて、シェルスクリプトの基本的な構文、関数の定義と利用、条件分岐、ループ、ユーザー入力の処理などの知識を総合的に学ぶことができます。
簡易RPGバトルゲームの概要
ゲームの目的
- プレイヤーは敵と戦い、勝利を目指します。
ゲームのルール
- ゲームの進行
・プレイヤーと敵キャラクターの両方にHP(体力)があります。
・プレイヤーは以下の行動を選択できます。
・攻撃:敵にダメージを与えます。
・防御:次のターンの敵からのダメージを軽減します。
・回復:自分のHPを回復します。
・敵はランダムな行動を取ります。 - 勝利条件
・敵のHPを0にすると勝利。
・プレイヤーのHPが0になると敗北。
ゲームの流れ
- プレイヤーと敵のHPを初期化します。
- プレイヤーのターンで行動を選択します。
- 敵のターンではランダムな行動を行います。
- これを繰り返し、どちらかのHPが0になるとゲーム終了です。
rpg_battle.sh
の作成から実行までの手順と解説
ステップ1:スクリプトファイルの作成
ターミナルで以下のコマンドを実行し、新しいスクリプトファイル rpg_battle.sh
を作成します。
user01@ubuntu:~$ nano rpg_battle.sh
ステップ2:スクリプトの内容を記述
エディタが開いたら、以下のコードをコピーして貼り付けます。
#!/bin/bash
# プレイヤーと敵のステータスを初期化
player_hp=100
enemy_hp=80
player_defense=false
# ゲーム開始のメッセージ
echo "=== RPGバトルゲームへようこそ! ==="
echo "あなたは敵と戦わなければなりません。"
# メインループ
while true; do
echo
echo "あなたのHP: $player_hp"
echo "敵のHP: $enemy_hp"
echo "1. 攻撃"
echo "2. 防御"
echo "3. 回復"
read -p "行動を選択してください(1〜3): " choice
case "$choice" in
1)
# 攻撃
damage=$((RANDOM % 20 + 10))
echo "あなたは敵に $damage のダメージを与えた!"
enemy_hp=$((enemy_hp - damage))
if [ $enemy_hp -le 0 ]; then
echo "敵を倒しました!あなたの勝利です!"
exit
fi
;;
2)
# 防御
echo "あなたは防御の体勢をとった!次の敵の攻撃を軽減します。"
player_defense=true
;;
3)
# 回復
heal=$((RANDOM % 15 + 10))
player_hp=$((player_hp + heal))
if [ $player_hp -gt 100 ]; then
player_hp=100
fi
echo "あなたは $heal 回復した!現在のHP: $player_hp"
;;
*)
echo "無効な入力です。もう一度選択してください。"
continue
;;
esac
# 敵のターン
echo
echo "敵のターン!"
enemy_action=$((RANDOM % 2 + 1))
case "$enemy_action" in
1)
# 敵の攻撃
damage=$((RANDOM % 15 + 5))
if [ "$player_defense" = true ]; then
damage=$((damage / 2))
player_defense=false
echo "敵の攻撃!しかしあなたは防御している。ダメージが半減された!"
else
echo "敵の攻撃!"
fi
echo "あなたは $damage のダメージを受けた!"
player_hp=$((player_hp - damage))
if [ $player_hp -le 0 ]; then
echo "あなたは倒れてしまった...ゲームオーバー。"
exit
fi
;;
2)
# 敵の回復
heal=$((RANDOM % 10 + 5))
enemy_hp=$((enemy_hp + heal))
if [ $enemy_hp -gt 80 ]; then
enemy_hp=80
fi
echo "敵は $heal 回復した!敵のHP: $enemy_hp"
;;
esac
done
ステップ3:スクリプトの内容の解説
1.シェバン行
#!/bin/bash
- スクリプトが Bash シェルで実行されることを指定します。
2.プレイヤーと敵のステータスを初期化
player_hp=100
enemy_hp=80
player_defense=false
- 目的:プレイヤーと敵のHPを設定し、防御状態を管理する変数を初期化します。
3.ゲーム開始のメッセージ
echo "=== RPGバトルゲームへようこそ! ==="
echo "あなたは敵と戦わなければなりません。"
- ゲーム開始の挨拶を表示します。
4.メインループ
while true; do
# 省略
done
- 目的:ゲームが終了するまで繰り返されるループです。
5.プレイヤーのターン
echo
echo "あなたのHP: $player_hp"
echo "敵のHP: $enemy_hp"
echo "1. 攻撃"
echo "2. 防御"
echo "3. 回復"
read -p "行動を選択してください(1〜3): " choice
解説
- プレイヤーのHPと敵のHPを表示します。
- プレイヤーに行動の選択肢を提示します。
6.プレイヤーの行動処理
case "$choice" in
1)
# 攻撃
damage=$((RANDOM % 20 + 10))
echo "あなたは敵に $damage のダメージを与えた!"
enemy_hp=$((enemy_hp - damage))
if [ $enemy_hp -le 0 ]; then
echo "敵を倒しました!あなたの勝利です!"
exit
fi
;;
2)
# 防御
echo "あなたは防御の体勢をとった!次の敵の攻撃を軽減します。"
player_defense=true
;;
3)
# 回復
heal=$((RANDOM % 15 + 10))
player_hp=$((player_hp + heal))
if [ $player_hp -gt 100 ]; then
player_hp=100
fi
echo "あなたは $heal 回復した!現在のHP: $player_hp"
;;
*)
echo "無効な入力です。もう一度選択してください。"
continue
;;
esac
解説
case
文でプレイヤーの選択した行動を処理します。
- 攻撃
・ランダムなダメージを計算し、敵のHPを減らします。
・敵のHPが0以下になったら勝利です。 - 防御
・防御状態をtrue
に設定します。 - 回復
・ランダムな量を回復し、最大HPを超えないようにします。
7.敵のターン
echo
echo "敵のターン!"
enemy_action=$((RANDOM % 2 + 1))
case "$enemy_action" in
1)
# 敵の攻撃
damage=$((RANDOM % 15 + 5))
if [ "$player_defense" = true ]; then
damage=$((damage / 2))
player_defense=false
echo "敵の攻撃!しかしあなたは防御している。ダメージが半減された!"
else
echo "敵の攻撃!"
fi
echo "あなたは $damage のダメージを受けた!"
player_hp=$((player_hp - damage))
if [ $player_hp -le 0 ]; then
echo "あなたは倒れてしまった...ゲームオーバー。"
exit
fi
;;
2)
# 敵の回復
heal=$((RANDOM % 10 + 5))
enemy_hp=$((enemy_hp + heal))
if [ $enemy_hp -gt 80 ]; then
enemy_hp=80
fi
echo "敵は $heal 回復した!敵のHP: $enemy_hp"
;;
esac
解説
敵の行動をランダムに決定します。
- 攻撃
・ランダムなダメージを計算し、プレイヤーのHPを減らします。
・プレイヤーが防御している場合、ダメージを半減します。
・プレイヤーのHPが0以下になったら敗北です。 - 回復
・敵がランダムな量を回復し、最大HPを超えないようにします。
ステップ4:スクリプトに実行権限を付与
スクリプトを保存してエディタを終了したら、実行権限を付与します。
user01@ubuntu:~$ chmod +x rpg_battle.sh
ステップ5:スクリプトの実行
スクリプトを実行して、RPGバトルゲームを開始します。
user01@ubuntu:~$ ./rpg_battle.sh
実行例
=== RPGバトルゲームへようこそ! ===
あなたは敵と戦わなければなりません。
あなたのHP: 100
敵のHP: 80
1. 攻撃
2. 防御
3. 回復
行動を選択してください(1〜3): 1
あなたは敵に 24 のダメージを与えた!
敵のターン!
敵の攻撃!
あなたは 17 のダメージを受けた!
あなたのHP: 83
敵のHP: 56
1. 攻撃
2. 防御
3. 回復
行動を選択してください(1〜3): 2
あなたは防御の体勢をとった!次の敵の攻撃を軽減します。
敵のターン!
敵の攻撃!しかしあなたは防御している。ダメージが半減された!
あなたは 7 のダメージを受けた!
あなたのHP: 76
敵のHP: 56
1. 攻撃
2. 防御
3. 回復
行動を選択してください(1〜3): 1
あなたは敵に 19 のダメージを与えた!
敵のターン!
敵は 13 回復した!敵のHP: 50
(中略)
敵を倒しました!あなたの勝利です!
解説
- プレイヤーと敵が交互に行動します。
- プレイヤーは行動を選択し、その結果に応じて敵のHPが減少します。
- 敵はランダムに攻撃または回復を行います。
- 敵のHPが0以下になるとプレイヤーの勝利、プレイヤーのHPが0以下になるとゲームオーバーです。
ここで作成したファイルの削除
ゲームのテストが終了したら、作成した rpg_battle.sh
ファイルを削除します。
user01@ubuntu:~$ rm rpg_battle.sh
まとめ
- シェルスクリプトの応用:簡易RPGバトルゲームを通じて、シェルスクリプトでのゲーム作成方法を学びました。
- 変数の活用:プレイヤーと敵のステータスを変数で管理し、ゲーム内の状態変化を追跡しました。
- ランダム性の導入:
$RANDOM
変数を使用して、攻撃や回復の値にランダム性を持たせました。 - 条件分岐とループ:
if
文やcase
文、while
ループを使って、ゲームの進行とロジックを制御しました。 - ユーザー入力の処理:
read
コマンドを使用してユーザーの入力を受け取りました。 - 関数の定義と利用:今回は関数を使用していませんが、ゲームを拡張する際には関数を活用することでコードの再利用性を高めることができます。
シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回の簡易RPGバトルゲームを基に、敵の種類を増やしたり、アイテムやスキルの要素を追加したりして、さらなる機能拡張に挑戦してみてください。