Chapter9 じゃんけんゲームを作っている
始めに、この記事は『Chapter8 じゃんけんゲームを作る』の続きになるため、そちらも併せて見ていただくことを推奨する。
前回記事URL:https://note.com/yamato_cocoa/n/n35af2e3f84f8
さて、前回は『scanf_s』関数を使って、変数に格納する値をプレイヤーに入力させるということまでやった。
次はその入力された値によって処理を分岐させる方法について説明する。
また新たにコードを追記した。
『if』、『else if』、『else』というのが分岐の構文にあたる。
英語の意味が分かれば特に問題はないはずだ。
上から順番に
『もし、MyHandという変数の値が『1』ならば「グーを出しました」という文を表示する』
『それ以外で、もし、MyHandという変数の値が『2』ならば「チョキをだしました」という文を表示する』
『それ以外で、もし、MyHandという変数の値が『3』ならば「パーをだしました」という文を表示する』
『それ以外の場合、「1,2,3のどれかを入力してください」と表示したあと、異常終了として『return 1』を返す』
という意味になる。
気を付けてほしいのは『==』という表記で、C言語のプログラミングにおいて、『イコール』は『==』で表すことになっている。
プログラミングにおける『=』は『左辺の変数に値を代入する』という意味になり全く動作が異なる。
ここまで記述した状態でプログラム実行すると、このように入力した数字に対応した文が表示されるようになる。
さて、これでプレイヤー側の設定は完了したわけだが、じゃんけんゲームは一人ではできない。次は対戦相手側の設定をする。
今回、プレイヤーとじゃんけんゲームをする相手は、人間でなくコンピューターである。
当然コンピューターは自分で勝手に動いたりはしないので、コンピューターにとってほしい挙動をプログラミングする必要がある。
ただ、今回はじゃんけんのプログラミングになるため、決してコンピューターの行動パターンが読めてしまうような作りであってはいけない。
そこで必要となるのが『ランダム関数』というものだ。
この関数を駆使すれば、コンピューターにでたらめな数字を吐かせることができ、『運ゲー』を運ゲーたらしめることが出来るようになる。
まあ、厳密に言うとでたらめにはならないのだが・・・
まず、ランダム関数を使うためには『#include <stdlib.h>』という文句をプログラミングの冒頭で唱える必要がある。
これは『スタンダード ライブラリー』の略で、このヘッダーファイルの中にランダム関数『rand』と『srand』が用意されている。
ちなみに、『rand』関数の書き方はこう。
これで変数『EnemysHand』には『(少なくとも)0~32767』の範囲でランダムな値が格納されることになる。
ただ、今回のプログラムにおいては『1か2か3』のどれかがランダムに選定されてほしいので、
こういう風に書くと良い。
『%』は割った余りを求めるという計算式で、この式全体の意味としては『ランダムに選定された値を3で割った余りの数値に1を足したものを変数EnemysHandに代入する』となる。
これにより『整数専用の変数:EnemysHand』に代入される値は『1~3』の整数となる。
ただ、これだけではまだランダムにはならない。
『rand』関数を記述する前に『srand()』という文言を記述していただきたい。
これは『srand』関数といい『rand』関数同様、<stdlib.h>内に用意されたランダム関数で、『()』の中には『シード値』というものを入れる。
『マインクラフト』といいうゲームをやったことのある方は聞いたことがあると思うが『シード値』というのは開始地点のことで、この場合何の開始地点なのかというと『rand』関数の開始地点になる。
そもそも『rand』関数というのは、でたらめに並べられた数字の羅列を、開始地点から順に読んでいくという関数で、開始地点が同じであれば全く同じ数字の並びになるという性質を持つ。
なので、ゲームにランダム性を持たせたいと思った際には、プログラミンング実行されるたびに、『srand』関数を使って『rand』関数の開始地点が変えられるというようなプログラムを組まなくてはならない。
そして、その開始地点として特に都合の良い数値というのが『time』つまり『時間』である。
またかよ、と思う人もいるだろうが今回はこれで最後なので我慢してほしい。
今回インクルードしてもらうヘッダーは『<time.h>』。要するに時間に関する関数が用意されているヘッダーだ。
このヘッダーの中に『time』関数というものが存在する。
『time』関数をシード値として設定する。
『(unsigned int)』は『「-」の符号を持たない整数』の指定。
『time』は『グリニッチ標準時である1970年1月1日の0時0分0秒から今現在に至るまでの秒数』で、常に値は変化している。
『(NULL)』は、時間の表示先で、今は特に関係ないので『NULL』となっている。
このように『srand』関数に、常に変化し続ける『time』関数を組み込むことによって、プログラムが実行されるたびに『rand』関数の開始地点が変わるようになる。
あとは、『if構文』を用いて表示する文を分岐させれば、相手の手も完成。
あとは勝敗を表示したり、あいこだった時にもう一度勝負するようなプログラミングを追加すればいよいよ『じゃんけんゲーム』の完成である。
それではまた明日、Chapter10にてお会いしましょう。
ご閲覧ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?