シェルスクリプト:リアクションタイムゲーム

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

リアクションタイムゲームの概要

ゲームの目的

  • 画面に表示された合図にできるだけ早く反応し、反応時間を競います。

ゲームのルール

  • ゲームの進行
    ・ゲーム開始後、一定の待ち時間(ランダム)があります。
    ・画面に「スタート!」と表示されたら、ユーザーはできるだけ早くエンターキーを押します。
    ・ユーザーの反応時間が計測され、表示されます。
  • 勝利条件
    ・特に勝敗はありません。自分の反応時間を測定して楽しみます。

reaction_time.shの作成から実行までの手順と解説

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

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

user01@ubuntu:~$ nano reaction_time.sh

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

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

#!/bin/bash

echo "=== リアクションタイムゲームへようこそ! ==="
echo "画面に「スタート!」と表示されたら、できるだけ早くエンターキーを押してください。"
echo "準備はいいですか?エンターキーを押して開始してください。"
read -s

# ランダムな待ち時間(2〜5秒)を設定
wait_time=$((RANDOM % 4 + 2))

echo "待っています..."
sleep $wait_time

echo "スタート!"
start_time=$(date +%s.%N)

# ユーザーの入力を待つ
read -s

end_time=$(date +%s.%N)

# 反応時間を計算
reaction_time=$(echo "$end_time - $start_time" | bc)

echo "あなたの反応時間は $reaction_time 秒です!"

ステップ3:スクリプトの内容の解説

1.シェバン行

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

2.ゲーム開始のメッセージ

echo "=== リアクションタイムゲームへようこそ! ==="
echo "画面に「スタート!」と表示されたら、できるだけ早くエンターキーを押してください。"
echo "準備はいいですか?エンターキーを押して開始してください。"
read -s

解説

  • ゲームの説明と開始の合図を表示します。
  • read -s でユーザーのエンターキー入力を待ちます(入力内容を表示しない)。

3.ランダムな待ち時間の設定

wait_time=$((RANDOM % 4 + 2))
  • 目的:2〜5秒のランダムな待ち時間を設定します。
  • 解説
    $RANDOM は 0〜32767 の整数を返します。
    % 4 で 0〜3 の値にし、+ 2 で 2〜5 に調整します。

4.待ち時間の後に「スタート!」を表示

echo "待っています..."
sleep $wait_time

echo "スタート!"
start_time=$(date +%s.%N)

解説

  • sleep $wait_time でランダムな秒数だけ待機します。
  • echo "スタート!" でユーザーに合図を出します。
  • start_time に現在の時刻を記録します。

5.ユーザーの入力を待つ

read -s
end_time=$(date +%s.%N)

解説

ユーザーのエンターキー入力を待ち、end_time に現在の時刻を記録します。

6.反応時間の計算と表示

reaction_time=$(echo "$end_time - $start_time" | bc)

echo "あなたの反応時間は $reaction_time 秒です!"

解説

  • bc コマンドを使用して、高精度な浮動小数点計算を行います。
  • 反応時間を計算し、ユーザーに表示します。

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

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

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

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

スクリプトを実行して、リアクションタイムゲームを開始します。

user01@ubuntu:~$ ./reaction_time.sh

実行例

=== リアクションタイムゲームへようこそ! ===
画面に「スタート!」と表示されたら、できるだけ早くエンターキーを押してください。
準備はいいですか?エンターキーを押して開始してください。

待っています...
スタート!

あなたの反応時間は 0.278542 秒です!

解説

  • ユーザーはエンターキーを押してゲームを開始します。
  • ランダムな待ち時間の後に「スタート!」と表示されます。
  • ユーザーがエンターキーを押すと、反応時間が計測され、結果が表示されます。

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

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

user01@ubuntu:~$ rm reaction_time.sh

まとめ

  • シェルスクリプトの応用:リアクションタイムゲームを通じて、シェルスクリプトでの簡単なゲーム作成方法を学びました。
  • ユーザー入力の処理read コマンドを使用してユーザーの入力を待ちました。
  • 時間の計測date コマンドと bc コマンドを組み合わせて、精密な時間計測を行いました。
  • ランダム性の導入$RANDOM 変数を使用して、ランダムな待ち時間を設定しました。
  • 条件分岐とループ:今回は使用していませんが、ゲームを拡張する際に活用できます。

 シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回のリアクションタイムゲームを基に、記録を保存してランキングを作成したり、複数回の測定で平均反応時間を計算したり、難易度調整を行ったりして、さらなる機能拡張に挑戦してみてください。