シェルスクリプト:スロットマシンゲーム

 シェルスクリプトは、システム管理だけでなく、ゲームの作成にも活用できる強力なツールです。ここでは、シェルスクリプトを使って「スロットマシンゲーム」を作成し、その手順と詳細な解説を行います。この演習を通じて、シェルスクリプトの基本的な構文、ランダム性の導入、条件分岐、ループ、ユーザー入力の処理などの知識を総合的に学ぶことができます。

スロットマシンゲームの概要

ゲームの目的

  • コインを投入してスロットを回し、絵柄を揃えて賞金を獲得します。

ゲームのルール

  • ゲームの進行
    ・プレイヤーは最初に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 コマンドを使用してユーザーの入力を受け取りました。
  • 変数の活用:コインの増減を変数で管理し、ゲーム内の状態変化を追跡しました。

 シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回のスロットマシンゲームを基に、絵柄や賞金のバリエーションを増やしたり、ジャックポット機能を追加したりして、さらなる機能拡張に挑戦してみてください。