シェルスクリプト:テキストアドベンチャーゲーム
シェルスクリプトは、システム管理だけでなく、テキストベースのゲーム作成にも活用できる強力なツールです。ここでは、シェルスクリプトを使って「テキストアドベンチャーゲーム」を作成し、その手順と詳細な解説を行います。この演習を通じて、シェルスクリプトの基本的な構文、関数の定義と利用、条件分岐、ループ、ユーザー入力の処理などの知識を総合的に学ぶことができます。
テキストアドベンチャーゲームの概要
ゲームの目的
- プレイヤーは謎のダンジョンを探索し、宝物を見つけて脱出します。
ゲームのルール
- ゲームの進行
・プレイヤーはさまざまな部屋を移動しながら、アイテムを収集したり、謎を解いたりします。
・部屋ごとに選択肢が提示され、プレイヤーはその中から行動を選びます。 - 勝利条件
・宝物を見つけ、無事にダンジョンから脱出するとゲームクリアです。
ゲームの流れ
- プレイヤーは最初の部屋で目覚めます。
- 各部屋で行動を選択し、次の部屋へ進みます。
- 特定のアイテムを集めたり、謎を解いたりしてゲームを進めます。
adventure.sh
の作成から実行までの手順と解説
ステップ1:スクリプトファイルの作成
ターミナルで以下のコマンドを実行し、新しいスクリプトファイル adventure.sh
を作成します。
user01@ubuntu:~$ nano adventure.sh
ステップ2:スクリプトの内容を記述
エディタが開いたら、以下のコードをコピーして貼り付けます。
#!/bin/bash
# プレイヤーの状態を初期化
has_key=false
has_treasure=false
# ゲームの開始
start_game() {
echo "あなたは暗い部屋で目を覚ましました。出口を見つけて脱出してください。"
room1
}
# 部屋1の処理
room1() {
echo
echo "部屋1:暗い石の部屋です。扉が一つあります。"
echo "1. 扉を開けて進む"
echo "2. 部屋を調べる"
read -p "選択肢を入力してください(1または2): " choice
case "$choice" in
1) room2 ;;
2)
echo "部屋を調べると、古い鍵を見つけました。"
has_key=true
room1 ;;
*)
echo "無効な入力です。"
room1 ;;
esac
}
# 部屋2の処理
room2() {
echo
echo "部屋2:広いホールです。二つの扉があります。"
echo "1. 左の扉を進む"
echo "2. 右の扉を進む"
read -p "選択肢を入力してください(1または2): " choice
case "$choice" in
1) room3 ;;
2) room4 ;;
*)
echo "無効な入力です。"
room2 ;;
esac
}
# 部屋3の処理
room3() {
echo
echo "部屋3:宝物庫です。大きな宝箱があります。"
if [ "$has_key" = true ]; then
echo "鍵を使って宝箱を開けました。宝物を手に入れました!"
has_treasure=true
else
echo "宝箱は固く閉ざされています。鍵が必要なようです。"
fi
echo "1. 戻る"
read -p "選択肢を入力してください(1): " choice
case "$choice" in
1) room2 ;;
*)
echo "無効な入力です。"
room3 ;;
esac
}
# 部屋4の処理
room4() {
echo
echo "部屋4:出口への通路です。扉があります。"
if [ "$has_treasure" = true ]; then
echo "宝物を持って脱出しました!おめでとうございます!"
exit
else
echo "何か大切なものを忘れている気がします。"
echo "1. 戻る"
read -p "選択肢を入力してください(1): " choice
case "$choice" in
1) room2 ;;
*)
echo "無効な入力です。"
room4 ;;
esac
fi
}
# ゲーム開始
start_game
ステップ3:スクリプトの内容の解説
1.シェバン行
#!/bin/bash
- スクリプトが Bash シェルで実行されることを指定します。
2.プレイヤーの状態を初期化
# プレイヤーの状態を初期化
has_key=false
has_treasure=false
- 目的:プレイヤーが特定のアイテム(鍵や宝物)を持っているかどうかを管理します。
3.ゲームの開始関数 start_game
start_game() {
echo "あなたは暗い部屋で目を覚ましました。出口を見つけて脱出してください。"
room1
}
- 目的:ゲームの冒頭メッセージを表示し、最初の部屋へ進みます。
4.部屋1の処理関数 room1
room1() {
echo
echo "部屋1:暗い石の部屋です。扉が一つあります。"
echo "1. 扉を開けて進む"
echo "2. 部屋を調べる"
read -p "選択肢を入力してください(1または2): " choice
case "$choice" in
1) room2 ;;
2)
echo "部屋を調べると、古い鍵を見つけました。"
has_key=true
room1 ;;
*)
echo "無効な入力です。"
room1 ;;
esac
}
- 目的:プレイヤーに行動の選択肢を提示し、その選択に応じて次の処理を行います。
- 解説:
case
文でプレイヤーの選択を処理します。- 鍵を見つけた場合、
has_key
をtrue
に設定します。
5.部屋2の処理関数 room2
room2() {
echo
echo "部屋2:広いホールです。二つの扉があります。"
echo "1. 左の扉を進む"
echo "2. 右の扉を進む"
read -p "選択肢を入力してください(1または2): " choice
case "$choice" in
1) room3 ;;
2) room4 ;;
*)
echo "無効な入力です。"
room2 ;;
esac
}
- 目的:プレイヤーに次の行動を選択させ、部屋3または部屋4へ進みます。
6.部屋3の処理関数 room3
room3() {
echo
echo "部屋3:宝物庫です。大きな宝箱があります。"
if [ "$has_key" = true ]; then
echo "鍵を使って宝箱を開けました。宝物を手に入れました!"
has_treasure=true
else
echo "宝箱は固く閉ざされています。鍵が必要なようです。"
fi
echo "1. 戻る"
read -p "選択肢を入力してください(1): " choice
case "$choice" in
1) room2 ;;
*)
echo "無効な入力です。"
room3 ;;
esac
}
- 目的:宝物を手に入れるための部屋です。
- 解説:
・プレイヤーが鍵を持っている場合、宝物を取得できます。
・has_treasure
をtrue
に設定します。
7.部屋4の処理関数 room4
room4() {
echo
echo "部屋4:出口への通路です。扉があります。"
if [ "$has_treasure" = true ]; then
echo "宝物を持って脱出しました!おめでとうございます!"
exit
else
echo "何か大切なものを忘れている気がします。"
echo "1. 戻る"
read -p "選択肢を入力してください(1): " choice
case "$choice" in
1) room2 ;;
*)
echo "無効な入力です。"
room4 ;;
esac
fi
}
- 目的:ゲームのゴール地点です。
- 解説:
・宝物を持っている場合、ゲームクリアとなります。
・持っていない場合、戻る選択肢を提示します。
8.ゲームの開始
# ゲーム開始
start_game
解説
start_game
関数を呼び出してゲームを開始します。
ステップ4:スクリプトに実行権限を付与
スクリプトを保存してエディタを終了したら、実行権限を付与します。
user01@ubuntu:~$ chmod +x adventure.sh
ステップ5:スクリプトの実行
スクリプトを実行して、テキストアドベンチャーゲームを開始します。
user01@ubuntu:~$ ./adventure.sh
実行例
あなたは暗い部屋で目を覚ましました。出口を見つけて脱出してください。
部屋1:暗い石の部屋です。扉が一つあります。
1. 扉を開けて進む
2. 部屋を調べる
選択肢を入力してください(1または2): 2
部屋を調べると、古い鍵を見つけました。
部屋1:暗い石の部屋です。扉が一つあります。
1. 扉を開けて進む
2. 部屋を調べる
選択肢を入力してください(1または2): 1
部屋2:広いホールです。二つの扉があります。
1. 左の扉を進む
2. 右の扉を進む
選択肢を入力してください(1または2): 1
部屋3:宝物庫です。大きな宝箱があります。
鍵を使って宝箱を開けました。宝物を手に入れました!
1. 戻る
選択肢を入力してください(1): 1
部屋2:広いホールです。二つの扉があります。
1. 左の扉を進む
2. 右の扉を進む
選択肢を入力してください(1または2): 2
部屋4:出口への通路です。扉があります。
宝物を持って脱出しました!おめでとうございます!
解説
- プレイヤーは最初に部屋を調べ、鍵を入手します。
- 次に、部屋2で左の扉を選択し、宝物庫で宝物を入手します。
- 部屋2に戻り、右の扉を選択して出口に向かいます。
- 宝物を持っているため、ゲームクリアとなります。
ここで作成したファイルの削除
ゲームのテストが終了したら、作成した adventure.sh
ファイルを削除します。
user01@ubuntu:~$ rm adventure.sh
まとめ
- シェルスクリプトの応用:テキストアドベンチャーゲームを通じて、シェルスクリプトでのゲーム作成方法を学びました。
- 関数の定義と利用:各部屋を関数として定義し、コードの可読性と再利用性を向上させました。
- 条件分岐とループ:
if
文やcase
文を使って、ゲームの進行とロジックを制御しました。 - ユーザー入力の処理:
read
コマンドを使用してユーザーの入力を受け取りました。 - 変数の活用:プレイヤーの状態を変数で管理し、ゲーム内の状態変化を追跡しました。
シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回のテキストアドベンチャーゲームを基に、物語の拡張や新たな選択肢の追加、ランダムなイベントの導入など、さらなる機能拡張に挑戦してみてください。