このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:シェルスクリプト:じゃんけんゲーム

シェルスクリプト:じゃんけんゲーム

 シェルスクリプトは、システム管理だけでなく、ちょっとしたゲームやツールを作成する際にも非常に便利です。ここでは、シェルスクリプトを使って「じゃんけんゲーム」を作成し、その作成から実行までの手順と解説を行います。

じゃんけんゲームの概要

  • 目的:ユーザーとコンピューターがじゃんけんを行い、勝敗を決めます。
  • ルール
    ・ユーザーは「グー」「チョキ」「パー」のいずれかを選択します。
    ・コンピューターもランダムに「グー」「チョキ」「パー」を選択します。

スクリプトの作成と実行手順

ステップ1:スクリプトファイルの作成

 ターミナルで以下のコマンドを実行し、新しいスクリプトファイル janken.sh を作成します。

user01@ubuntu:~$ nano janken.sh

ステップ2:スクリプトの内容を記述

エディタが開いたら、以下の内容をコピーして貼り付けます。

#!/bin/bash

# 選択肢の配列
choices=("グー" "チョキ" "パー")

echo "じゃんけんゲームへようこそ!"

while true; do
    echo "あなたの手を選んでください:"
    echo "0) グー"
    echo "1) チョキ"
    echo "2) パー"
    read -p "番号を入力してください(終了するには 'exit' と入力): " user_input

    # ゲームの終了判定
    if [ "$user_input" == "exit" ]; then
        echo "ゲームを終了します。"
        break
    fi

    # 入力のバリデーション
    if ! [[ "$user_input" =~ ^[0-2]$ ]]; then
        echo "エラー: 0から2の数字を入力してください。"
        continue
    fi

    # ユーザーの手
    user_choice=${choices[$user_input]}
    echo "あなたの手:$user_choice"

    # コンピューターの手をランダムに選択
    computer_input=$(( RANDOM % 3 ))
    computer_choice=${choices[$computer_input]}
    echo "コンピューターの手:$computer_choice"

    # 勝敗の判定
    if [ "$user_input" -eq "$computer_input" ]; then
        echo "結果:あいこです。"
    elif [ "$user_input" -eq 0 ] && [ "$computer_input" -eq 1 ] ||
         [ "$user_input" -eq 1 ] && [ "$computer_input" -eq 2 ] ||
         [ "$user_input" -eq 2 ] && [ "$computer_input" -eq 0 ]; then
        echo "結果:あなたの勝ちです!"
    else
        echo "結果:あなたの負けです。"
    fi

    echo
done

スクリプトの各部分の解説

実際のスクリプト janken.sh を見ながら、各部分の解説を行います。

シェバン行

スクリプトが Bash シェルで実行されることを指定します。

#!/bin/bash

選択肢の配列

ユーザーとコンピューターが選択できる手を配列に格納しています。

choices=("グー" "チョキ" "パー")

ゲーム開始のメッセージ

ゲームの開始を知らせます。

echo "じゃんけんゲームへようこそ!"

無限ループの開始

ユーザーが exit を入力するまでゲームを繰り返します。

while true; do
    # ゲームの処理
done

ユーザーからの入力受付

ユーザーに手を選んでもらいます。

echo "あなたの手を選んでください:"
echo "0) グー"
echo "1) チョキ"
echo "2) パー"
read -p "番号を入力してください(終了するには 'exit' と入力): " user_input

ゲームの終了判定

ユーザーが exit を入力した場合、ループを抜けてゲームを終了します。

if [ "$user_input" == "exit" ]; then
    echo "ゲームを終了します。"
    break
fi

入力のバリデーション

ユーザーの入力が 012 のいずれかであるかをチェックします。

if ! [[ "$user_input" =~ ^[0-2]$ ]]; then
    echo "エラー: 0から2の数字を入力してください。"
    continue
fi

ユーザーの手の決定

入力に対応する手を選択します。

user_choice=${choices[$user_input]}
echo "あなたの手:$user_choice"

コンピューターの手をランダムに選択

 $RANDOM 変数を使用して、0から2の整数をランダムに生成し、コンピューターの手を決定します。

computer_input=$(( RANDOM % 3 ))
computer_choice=${choices[$computer_input]}
echo "コンピューターの手:$computer_choice"

勝敗の判定

  • ユーザーの手とコンピューターの手を比較し、勝敗を判定します。
  • 勝利条件
    ・ユーザーが グー (0) でコンピューターが チョキ (1) の場合
    ・ユーザーが チョキ (1) でコンピューターが パー (2) の場合
    ・ユーザーが パー (2) でコンピューターが グー (0) の場合
if [ "$user_input" -eq "$computer_input" ]; then
    echo "結果:あいこです。"
elif [ "$user_input" -eq 0 ] && [ "$computer_input" -eq 1 ] ||
     [ "$user_input" -eq 1 ] && [ "$computer_input" -eq 2 ] ||
     [ "$user_input" -eq 2 ] && [ "$computer_input" -eq 0 ]; then
    echo "結果:あなたの勝ちです!"
else
    echo "結果:あなたの負けです。"
fi

結果の表示

勝敗の結果を表示します。

ステップ3:スクリプトに実行権限を付与

スクリプトを保存してエディタを閉じたら、実行権限を付与します。

user01@ubuntu:~$ chmod +x janken.sh

ステップ4:スクリプトの実行

スクリプトを実行して、じゃんけんゲームを開始します。

user01@ubuntu:~$ ./janken.sh

実行例

じゃんけんゲームへようこそ!
あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): 0
あなたの手:グー
コンピューターの手:チョキ
結果:あなたの勝ちです!

あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): 2
あなたの手:パー
コンピューターの手:グー
結果:あなたの負けです。

あなたの手を選んでください:
0) グー
1) チョキ
2) パー
番号を入力してください(終了するには 'exit' と入力): exit
ゲームを終了します。

解説

  • ユーザーは 012 の数字を入力して手を選択します。
  • コンピューターはランダムに手を選択します。
  • 勝敗が判定され、結果が表示されます。
  • exit と入力すると、ゲームが終了します。

ここで作成したファイルの削除

ゲームのテストが終わったら、作成した janken.sh ファイルを削除します。

user01@ubuntu:~$ rm janken.sh

まとめ

  • シェルスクリプトの活用:シェルスクリプトを使って、簡単なじゃんけんゲームを作成しました。
  • 配列の利用:選択肢を配列に格納し、ユーザーやコンピューターの手を簡潔に管理しました。
  • 入力のバリデーション:ユーザーの入力を正規表現でチェックし、適切なエラーメッセージを表示しました。
  • ランダムな数の生成$RANDOM 変数を使用して、コンピューターの手をランダムに選択しました。
  • 条件分岐と論理演算子if 文と論理演算子を使って、勝敗の判定を行いました。

 このように、シェルスクリプトを使えば、簡単なゲームやツールを手軽に作成することができます。今回のじゃんけんゲームをベースに、機能を拡張したり、別のゲームを作成してみてください。