じゃんけんゲームを作ろう(1/2) |
それでは、私の知る限りもっとも簡単なゲーム、じゃんけんゲームを作ります。
ジャン、ケン、ポン!
1:グー 2:チョキ 3:パー
と表示します。プレイヤーは1か2か3キーを押します。
コンピューターの手とプレイヤーの手を比較し、勝敗判定を行います。
あとはその繰り返しです。
アルゴリズム(手順、考え方)は以下のようになります。
1.プログラム実行時の初期設定
2.メッセージの表示とコンピューターの手の決定
3.プレイヤーの手を入力
4.コンピューターの手とプレイヤーの手を表示
5.勝敗の判定
6.スペースキーを押すと2に戻る
1.プログラム実行時の初期設定 |
プログラム実行時にまずやるべきことで、一度やったら二度とやらなくていい処理です。プログラムの冒頭部に書きます。
;プログラム実行時の初期設定 randomize sdim gcp, 10, 3 gcp(0) = "グー" gcp(1) = "チョキ" gcp(2) = "パー"
;プログラム実行時の初期設定
これをコメント文といいます。";"(セミコロン)に続けて説明を書きます。プログラム実行時には無視されます。
個人で趣味でプログラミングを行う場合は誰にもプログラムを見せることはありませんが、それでも、後で見て何の処理か分からなくなったら困るので随所に説明を書いておくといいです。
/*この部分は コメントです プログラム実行時には 無視されます*/
"/*"、"*/"を使うと複数行のコメントを書くことができます。
あとの部分は、2.以降を説明しながらの方が分かりやすいので、後回しにします。
2.メッセージの表示とコンピューターの手の決定 |
*Main_Loop cls mes "ジャン、ケン、ポン!" mes "1:グー 2:チョキ 3:パー" my_hand = rnd(3) + 1
*Main_Loop
2.から6.はこのプログラムのメインとなるループです。そこで*Main_Loopというラベルを書いておきます。
cls
画面に書いてある(あるいは描いてある)内容を消せという命令です。じゃんけん勝負のたびに画面を消して1行目からメッセージを書くようにします。下に続けて書いていってもいいのですが、やがて画面からはみ出してしまいます。はみ出した部分に書いても、見えません。
my_hand = rnd(3) + 1
変数my_handにコンピューターの手を、your_handにプレイヤーの手を入れます。1はグー、2はチョキ、3はパーを表すものとします。
rnd(x)
rnd関数は乱数を得るものです。サイコロをイメージしてください。サイコロを振ると1から6までの目がでたらめに出ますが、それと同様で、0以上x - 1以下の整数をでたらめに(ランダムに、という言い方をします)返します。
0以上2以下の数 + 1ですから、my_handには1以上3以下の数が入ります。
rnd関数を使う時にはプログラムの冒頭に
randomize
と書く必要があります。randomize命令はrnd関数で発生させる乱数のパターンを初期化します。例えば乱数が2, 2, 1, 1, 2, 1, 0, 0, 1, 2, ……のように出たとすると、プログラムを終了して再度実行するとまた2, 2, 1, 1, 2, 1, 0, 0, 1, 2, ……の順で出てしまいます。randomize命令によって、毎回違うパターンの乱数が発生するようになります。
3.プレイヤーの手を入力 |
; 手の入力 your_hand = 0 *Input_Hand await 16 getkey key, 49 if key == 1 { your_hand = 1 } getkey key, 50 if key == 1 { your_hand = 2 } getkey key, 51 if key == 1 { your_hand = 3 } if your_hand == 0 { goto *Input_Hand }
your_hand = 0
your_handが0の時は手が入力されていないことを表すものとします。
キーコード
1キー | 49 |
2キー | 50 |
3キー | 51 |
なお、テンキーの1、2、3キーには別のキーコードが割り当てられています。
まずyour_handに0を入れておき、1、2、3キーが押されているかチェックし、押されていたらyour_handを該当する値に変えます。
3つのどのキーも押されていなかったらyour_handは0のままですから、*Input_Hand行に戻って繰り返しです。どれかのキーが押されたらこのループを抜けて次の処理に進みます。