シェルスクリプト:スロットマシンゲーム
シェルスクリプトは、システム管理だけでなく、ゲームの作成にも活用できる強力なツールです。ここでは、シェルスクリプトを使って「スロットマシンゲーム」を作成し、その手順と詳細な解説を行います。この演習を通じて、シェルスクリプトの基本的な構文、ランダム性の導入、条件分岐、ループ、ユーザー入力の処理などの知識を総合的に学ぶことができます。
スロットマシンゲームの概要
ゲームの目的
- コインを投入してスロットを回し、絵柄を揃えて賞金を獲得します。
ゲームのルール
- ゲームの進行
・プレイヤーは最初に100コインを持っています。
・スロットを回すごとに10コインを消費します。
・スロットには3つのリールがあり、それぞれにランダムな絵柄が表示されます。 - 勝利条件
・絵柄が揃うと、揃った絵柄に応じて賞金が与えられます。
・コインが0になるとゲームオーバーです。
絵柄と賞金
絵柄 | 賞金 |
---|---|
🍒 🍒 🍒 | 50コイン |
🍋 🍋 🍋 | 30コイン |
⭐ ⭐ ⭐ | 20コイン |
他の組み合わせ | 0コイン |
slot_machine.sh
の作成から実行までの手順と解説
ステップ1:スクリプトファイルの作成
ターミナルで以下のコマンドを実行し、新しいスクリプトファイル slot_machine.sh
を作成します。
user01@ubuntu:~$ nano slot_machine.sh
ステップ2:スクリプトの内容を記述
エディタが開いたら、以下のコードをコピーして貼り付けます。
#!/bin/bash
# プレイヤーのコインを初期化
coins=100
# 絵柄の定義
symbols=("🍒" "🍋" "⭐" "💎" "🍀")
# ゲーム開始
echo "スロットマシンへようこそ!"
# メインループ
while [ $coins -ge 10 ]; do
echo "現在のコイン数:$coins"
read -p "スロットを回しますか?(Y/N): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
# コインを消費
coins=$((coins - 10))
# スロットを回す
slot1=${symbols[$RANDOM % ${#symbols[@]}]}
slot2=${symbols[$RANDOM % ${#symbols[@]}]}
slot3=${symbols[$RANDOM % ${#symbols[@]}]}
echo "-----------------"
echo "| $slot1 | $slot2 | $slot3 |"
echo "-----------------"
# 結果の判定
if [ "$slot1" == "$slot2" ] && [ "$slot2" == "$slot3" ]; then
case "$slot1" in
"🍒")
echo "おめでとうございます!🍒が揃いました!50コインを獲得!"
coins=$((coins + 50))
;;
"🍋")
echo "おめでとうございます!🍋が揃いました!30コインを獲得!"
coins=$((coins + 30))
;;
"⭐")
echo "おめでとうございます!⭐が揃いました!20コインを獲得!"
coins=$((coins + 20))
;;
*)
echo "おめでとうございます!$slot1 が揃いました!10コインを獲得!"
coins=$((coins + 10))
;;
esac
else
echo "残念!もう一度挑戦しましょう。"
fi
else
echo "ゲームを終了します。最終的なコイン数:$coins"
exit
fi
done
echo "コインがなくなりました。ゲームオーバーです。"
ステップ3:スクリプトの内容の解説
1.シェバン行
#!/bin/bash
- スクリプトが Bash シェルで実行されることを指定します。
2.プレイヤーのコインを初期化
coins=100
- 目的:プレイヤーの初期コイン数を100に設定します。
3.絵柄の定義
symbols=("🍒" "🍋" "⭐" "💎" "🍀")
- 目的:スロットマシンで使用する絵柄を配列として定義します。
4.ゲーム開始のメッセージ
echo "スロットマシンへようこそ!"
- ゲーム開始の挨拶を表示します。
5.メインループ
while [ $coins -ge 10 ]; do
# 省略
done
- 目的:プレイヤーがスロットを回すたびに繰り返されるループです。
- 条件:コインが10以上ある場合に続けます(1回のプレイに10コイン消費するため)。
6.ユーザーの選択
read -p "スロットを回しますか?(Y/N): " choice
- 目的:ユーザーにスロットを回すかどうかを尋ねます。
7.スロットを回す処理
# コインを消費
coins=$((coins - 10))
# スロットを回す
slot1=${symbols[$RANDOM % ${#symbols[@]}]}
slot2=${symbols[$RANDOM % ${#symbols[@]}]}
slot3=${symbols[$RANDOM % ${#symbols[@]}]}
解説
$RANDOM
を使用してランダムな絵柄を選択します。- コインを10消費します。
8.スロットの結果を表示
echo "-----------------"
echo "| $slot1 | $slot2 | $slot3 |"
echo "-----------------"
- 目的:スロットの結果を画面に表示します。
9.結果の判定
if [ "$slot1" == "$slot2" ] && [ "$slot2" == "$slot3" ]; then
# 省略
else
echo "残念!もう一度挑戦しましょう。"
fi
解説
- 3つの絵柄がすべて同じ場合、賞金を計算します。
- 絵柄に応じて獲得コインが異なります。
10.賞金の計算とコインの更新
case "$slot1" in
"🍒")
echo "おめでとうございます!🍒が揃いました!50コインを獲得!"
coins=$((coins + 50))
;;
"🍋")
echo "おめでとうございます!🍋が揃いました!30コインを獲得!"
coins=$((coins + 30))
;;
"⭐")
echo "おめでとうございます!⭐が揃いました!20コインを獲得!"
coins=$((coins + 20))
;;
*)
echo "おめでとうございます!$slot1 が揃いました!10コインを獲得!"
coins=$((coins + 10))
;;
esac
解説
揃った絵柄に応じて、コインを追加します。
11.ゲーム終了の処理
echo "コインがなくなりました。ゲームオーバーです。"
- コインが10未満になった場合、ゲームオーバーとなります。
ステップ4:スクリプトに実行権限を付与
スクリプトを保存してエディタを終了したら、実行権限を付与します。
user01@ubuntu:~$ chmod +x slot_machine.sh
ステップ5:スクリプトの実行
スクリプトを実行して、スロットマシンゲームを開始します。
user01@ubuntu:~$ ./slot_machine.sh
実行例
スロットマシンへようこそ!
現在のコイン数:100
スロットを回しますか?(Y/N): y
-----------------
| 🍋 | 🍒 | ⭐ |
-----------------
残念!もう一度挑戦しましょう。
現在のコイン数:90
スロットを回しますか?(Y/N): y
-----------------
| 🍒 | 🍒 | 🍒 |
-----------------
おめでとうございます!🍒が揃いました!50コインを獲得!
現在のコイン数:130
スロットを回しますか?(Y/N): n
ゲームを終了します。最終的なコイン数:130
解説
- プレイヤーはスロットを回すたびに10コインを消費します。
- 絵柄が揃うと、賞金が与えられます。
- プレイヤーが「n」を入力すると、ゲームが終了します。
ここで作成したファイルの削除
ゲームのテストが終了したら、作成した slot_machine.sh
ファイルを削除します。
user01@ubuntu:~$ rm slot_machine.sh
まとめ
- シェルスクリプトの応用:スロットマシンゲームを通じて、シェルスクリプトでのゲーム作成方法を学びました。
- 配列の操作:絵柄を配列で管理し、ランダムに選択しました。
- ランダム性の導入:
$RANDOM
変数を使用して、ゲームに必要なランダム性を実現しました。 - 条件分岐とループ:
if
文やcase
文、while
ループを使って、ゲームの進行とロジックを制御しました。 - ユーザー入力の処理:
read
コマンドを使用してユーザーの入力を受け取りました。 - 変数の活用:コインの増減を変数で管理し、ゲーム内の状態変化を追跡しました。
シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回のスロットマシンゲームを基に、絵柄や賞金のバリエーションを増やしたり、ジャックポット機能を追加したりして、さらなる機能拡張に挑戦してみてください。