#!/bin/bash echo 'ブラックジャックを始めるぞ〜!!' echo -e '\n' #echoのオプションにより、改行される。ただし、\nにシングルクオーテーションを付けないと認識してもらえない。 echo 'Do you take a card?[Y/n]' #ユーザーにカードを引くかどうかの問いであるが、ここで断った場合、持ち点が0になってしまうので後のelif以下でユーザーに知らせる。 read a #ユーザーが打ち込んだものをシェル変数aとして計算機が読み込む。 card=$RANDOM #シェル変数cardにランダム変数を代入する。 until test $card -lt 11 -a $card -gt 0 #代入されたランダム変数が、11より小さく、0より大きいかを調べ、それが真となるまで、doからdoneの間のコマンドを繰り返し実行する。 do card=$RANDOM #シェル変数cardをもう一度ランダム変数で置き直す。 done #ここまでで、シェル変数cardは、1、2、3、4、5、6、7、8、9、10のいずれかの数値になっている。 q3=quiz3.txt #出力先ファイルquiz3.txtをシェル変数q3と置く。 if [ $a = Y ] #ユーザーがYと打ち込んだ場合はにはthen以下のコマンドが実行される。 then echo Your card is $card. #ユーザーにあなたが引いたカードの数値(シェル変数cardの値)を伝える。 echo Now, your score is $card. #カードを引いた結果を経た、ユーザーの総得点を表示する。 echo -n "score: $card" > $q3 #結果のテキストファイルに1回目の得点を書き込む。改行しないようオプション-nをつける。 elif [ $a = n ] #ユーザーがnと打ち込んだ場合、then以下のコマンドが実行される。 then echo You can not start game. If you want to start this game, first you should answer Y . #ゲームが始められないことをユーザーに伝えるために表示する。 exit #このコマンドによりプログラムを強制終了させ、スクリプトの実行を途中でやめる。 else #ユーザーが打ち込みを間違えることがよくあると思われるので、Yかnのどちらでもないものを打ち込んだ場合にはelse以下のコマンドが実行される。 echo You made a mistake. Please, do all over again. #ユーザーが失敗し、もう一度すべてやり直しだと表示する。 exit #ここでも、このスクリプトを最後の行まで読まずに終了してもらうためのコマンドexitを使用。 fi #ここまでで、ユーザーの1回目のカードを引く作業が完了する。 until test $card -ge 22 #ユーザーの総得点となるシェル変数cardの値が、22以上になるまで、doからdoneの間のコマンドが繰り返し実行される。 do echo 'Do you take a card?[Y/n]' #再びカードを引くかどうかユーザーに尋ねる文を表示する。 read a #ユーザーが打ち込んだ文字をaとして計算機に読み込ませる。 if [ $a = Y ] #ユーザーがYと打ち込んだ場合、then以下のコマンドが実行される。 then m=$RANDOM #シェル変数mをランダム変数で置くと定義する。値mを再び0> $q3 #カードの得点を改行せずにquiz3.txtに書き込む。 echo Now, your score is $card. #ユーザーの現時点での総得点を知らせる。 if test $card -ge 22 #ユーザーがカードを引き終わった際に、総得点が22以上となっていた場合は、then以下のコマンドが実行される。 then echo So, your score is over 21. #22点以上になったことをユーザーに伝える。 echo ' ' >> $q3 #次のコマンドで'total:'が書き込まれる際に改行して書き込まれるようにするためのechoである。"最後のカードを引いた際のechoのオプション'-n'を付けな"いという設定がこのプログラムでは困難なため。 echo "total: $card" >> $q3 #総得点をquiz3.txtに書き込む。 echo Game over!! #ゲームが終了したことを伝える。 exit #強制終了する。 elif test $card -eq 21 #ユーザーの総得点が21ぴったりとなった場合には、then以下のコマンドが実行される。 then echo 'You are BLACKJACK. You get the hightest score!!! \(^o^)/' #21ぴったりになったことをユーザーに伝える。ブラックジャックのルールを考えると他にも21になった人がいた場合は'優勝'にはならないので'win'という言葉は控える。''を用いて変にコマンド認識されないようにする。 echo ' ' >> $q3 #改行をさせるために、quiz3.txtに書き込む。 echo "total: $card" >> $q3 #テキストファイルquiz3.txtに総得点を書き込む。 exit #強制終了する。 fi #ここまでがユーザーがYと打ち込んだ際のプログラム(59行目のthen〜)となる。 elif [ $a = n ] #ユーザーがnと打ち込んだ場合は、then以下のコマンドが実行される。 then echo Now, your score is $card and finish! #カードを引かない場合は、そこでゲームが終了するので、そこでの総得点を知らせる。 echo ' ' >> $q3 #改行するために、quiz3.txtに書き込む。 echo "total: $card" >> $q3 #総得点を、quiz3.txtに書き込む。 exit #強制終了する。 else #ユーザーが間違えて入力した場合、ゲームがすべてやり直しだと伝える。 echo You made a mistake. Please, do all over again. exit #強制終了する。 fi #ここまでで、1回カードを引くかどうかと尋ねられて、ユーザ−がなんと打ち込むかによっての場合分け3つが終了する。 done #ここまでで、ユーザーは22以上になるかあるいは、途中でゲームを止めるかしていることになる。何度か出てきたexitのコマンドがプログラムを終了するために必要である。