当てるべき数を、実行時に引数として以下のように実行します。
正解するまで答えと思われる数を入力してください。その入力値と答えが異なる場合は、大小関係のヒントが表示されます。
$./quiz1.sh 30 ;30を当てるべき数としてシェルスクリプトを実行 Please type the number expected the answer. ;入力を促されるので答えと思われる数を入力する ? 12 ;ここでは12を入力 (以下、実行結果参照) |
当てるべき数20とした場合の、実行結果の例を以下に示します。
(出力ファイル(quiz1_output.txt)へのリンク)
$./quiz1.sh 20 Please type the number expected the answer. ? 12 ;12を入力した場合、答えがより小さいことが表示される The typed number '12' is smaller than the answer!! --------------------------------------------------------------- Please type the number expected the answer again. ? 34 The typed number '34' is larger than the answer!! ;34を入力した場合、答えがより大きいことが表示される --------------------------------------------------------------- Please type the number expected the answer again. ? 20 ;正しい答えが入力されれば、最後にユーザーが何回入力したかが表示される +*******************************************************+ Congratulation!! You have typed the answer '20' (Total: 3 times) +*****************************************************+ |
カウンター用の変数を用意して、何回ユーザーが数を入力したかを確認し終了時に出力した点である。この出力をより工夫すればさらにゲーム性があがるであろう。
また、通常シェルスクリプトを実行時にリダイレクトしてしまうとコンソールには文字は出力されない。
それを避けるために、ソース上で毎度
echo 'hogehoge' >> hoge.txt
echo 'hogehoge'
と書いてもよいが、いたづらに行数を増やしコードが冗長となってしまう。そこで、outputFunc,readFuncという関数を自作した。
この2つの関数は外部ファイルにリダイレクトもしつつコンソールにも出力させるために呼ばれる。(詳細についてはソース
の実装をご覧ください。)
やはり数当てすべき数字を引数で渡しているので、ユーザが答えを指定することになりゲーム性が少ないように感じる。ゲームとしての面白さを追求するならば、数当てする数を乱数で発生させて
1〜100までの数字となるように調整するとよいかもしれない。このことは、シェル変数とexprコマンドを使って
expr $RANDOM %100
とし、0となる場合は再度同じことを行えばよい。これによりユーザーには答えを知られることがなくなるのでゲーム性が高まる。(同様のテクニックは問3のブラックジャックの中で用いられている。)