シェルスクリプト:リアクションタイムゲーム
シェルスクリプトは、システム管理だけでなく、簡単なゲームの作成にも活用できる強力なツールです。ここでは、シェルスクリプトを使って「リアクションタイムゲーム」を作成し、その手順と詳細な解説を行います。この演習を通じて、シェルスクリプトの基本的な構文、条件分岐、ループ、ユーザー入力の処理、時間計測などの知識を総合的に学ぶことができます。
リアクションタイムゲームの概要
ゲームの目的
- 画面に表示された合図にできるだけ早く反応し、反応時間を競います。
ゲームのルール
- ゲームの進行
・ゲーム開始後、一定の待ち時間(ランダム)があります。
・画面に「スタート!」と表示されたら、ユーザーはできるだけ早くエンターキーを押します。
・ユーザーの反応時間が計測され、表示されます。 - 勝利条件
・特に勝敗はありません。自分の反応時間を測定して楽しみます。
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
変数を使用して、ランダムな待ち時間を設定しました。 - 条件分岐とループ:今回は使用していませんが、ゲームを拡張する際に活用できます。
シェルスクリプトは、システム管理以外にも多くの用途で活用できます。今回のリアクションタイムゲームを基に、記録を保存してランキングを作成したり、複数回の測定で平均反応時間を計算したり、難易度調整を行ったりして、さらなる機能拡張に挑戦してみてください。