Bashシェルスクリプトで1〜999の数字をあてるゲームを作ってみる
Contents
はじめに
「子供と遊ぶ」+「プログラミングの学習」のために、1〜999の数字をあてるゲームを作ってみました。
過去に別の言語で作ったことはありましたが、最近プログラミングをしていなかったせいで衰えを感じたため、
どのぐらい衰えたか心配になり試してみました。
検証環境
$ uname -moi
x86_64 x86_64 GNU/Linux
$ head -n 2 /etc/os-release
NAME="Ubuntu"
VERSION="21.04 (Hirsute Hippo)"
$ bash -version | head -n 1
GNU bash, バージョン 5.1.4(1)-release (x86_64-pc-linux-gnu)
ソースコード
ここで掲載しているスクリプトはGithubにもプッシュしておきました。
game_of_guess.sh
#!/usr/bin/env bash
set -o errexit
set -o nounset
ANS=$((RANDOM % 999 + 1))
MAX_RETRY=10
for ((i = 0; i < MAX_RETRY; i++)); do
read -r -p "数値(0〜999)を入力してください: " GUESS
if [[ $GUESS -eq $ANS ]]; then
echo "あなたの勝ち!"
exit 0
elif [[ $GUESS -gt $ANS ]]; then
echo "大きすぎ! (残り $((MAX_RETRY - i - 1)))"
else
echo "小さすぎ! (残り $((MAX_RETRY - i - 1)))"
fi
done
echo "あなたの負け! 答えは $ANS"
exit 1
実行
$ ./game_of_guess.sh
数値(0〜999)を入力してください: 500
大きすぎ! (残り 9)
数値(0〜999)を入力してください: 251
小さすぎ! (残り 8)
数値(0〜999)を入力してください: 375
小さすぎ! (残り 7)
数値(0〜999)を入力してください: 437
小さすぎ! (残り 6)
数値(0〜999)を入力してください: 468
小さすぎ! (残り 5)
数値(0〜999)を入力してください: 484
小さすぎ! (残り 4)
数値(0〜999)を入力してください: 497
あなたの勝ち!
おまけ:答えを自動的に求めるスクリプト
game_of_guess_auto.sh
#!/usr/bin/env bash
set -o errexit
set -o nounset
ANS=$((RANDOM % 999 + 1))
MAX_RETRY=10
TOP=1000
BOTTOM=1
for ((i = 0; i < MAX_RETRY; i++)); do
GUESS=$(((TOP + BOTTOM) / 2))
echo "数値(0〜999)を入力してください: "$GUESS
if [[ $GUESS -eq $ANS ]]; then
echo "あなたの勝ち!"
exit 0
elif [[ $GUESS -gt $ANS ]]; then
echo "大きすぎ! (残り $((MAX_RETRY - i - 1)))"
TOP=$GUESS
else
echo "小さすぎ! (残り $((MAX_RETRY - i - 1)))"
BOTTOM=$GUESS
fi
done
echo "あなたの負け! 答えは $ANS"
exit 1
ひとこと
実はコードの大部分は GitHub Copilot が作成してくれました。
全くプログラミングの練習になっていないですね(汗)
Vimから呼び出すように設定しているのですが、どうやって推測しているのでしょう?
ディスカッション
コメント一覧
まだ、コメントがありません