じゃんけんゲームの入門編です。
ここでは、じゃんけんゲームの処理手順や考え方の仕組みを説明します。(戻る)
じゃんけんゲームのルール
まず最初に「じゃんけんゲーム」のルール(仕様)を決めます。
- 人間とコンピュータとの2人対戦を行う。
- 人間はキーボードの[1]、[2]、[3]キーで「グー」「チョキ」「パー」を決定する。
- コンピュータは乱数関数によって自動的に「グー」「チョキ」「パー」を決定させる。
- じゃんけんゲームは10回行ったら終了して「勝ち」「負け」「引き分け」の結果を表示する。
上記のルール(仕様)は、どこにでもありそうなゲームの仕様です。
しかし、このようなルール(仕様)をちゃんと決めないとゲームを作れませんので要注意。
また、3人大戦、4人大戦などに改良できるように作るか、2人対戦のみにして簡略化するか決めます。
今回は2人対戦のみにしてプログラミングを簡略化した内容を載せます。
じゃんけんゲームの考え方
ゲームのアルゴリズムとは、考え方の事で「じゃんけんゲームのルール」に見合うようにプログラミング(記述)する必要があります。
それでは文章で「じゃんけんゲームの考え方」であるアルゴリズムを紹介します。
- じゃんけんゲームの初期化を行う。
- じゃんけんゲームの開始メッセージを表示する。
- じゃんけんゲームが10回以下なら(a)~(e)を繰り返す。
- じゃんけんゲームの入力メッセージを表示する。
- 人間の入力処理を行う。
- コンピュータの乱数処理を行う。
- 人間とコンピュータの勝負判定を行う。
- 人間とコンピュータの勝負メッセージを表示する。
- じゃんけんゲームの終了メッセージを表示する。
- プログラムが終了する。
上記の「終了メッセージ」がじゃんけんゲームの結果表示となります。
じゃんけんゲームの作り方
じゃんけんゲームのルール(仕様)や作り方の考え(アルゴリズム)は上記のようになりました。
しかし、どうやって仕様やアルゴリズム通りに処理すれば良いでしょうか?
一度に全てをメイン関数などで処理するのはソースが長くなり、醜いため処理を分割するのが普通です。
分割の方法もいろいろありますが、今回は次の3つに分割して処理させます。
- 人間の入力処理(funcHuman)
- コンピュータの乱数処理(funcComputer)
- 人間とコンピュータの勝負判定(funcJudge)
上記の3つだけはサブ関数として処理を分割した方がメイン関数を見やすく分かりやすくバグが入らないようにできます。
カッコ内はサブ関数の関数名を意味します。
下図は「じゃんけんゲーム」のメイン関数のイメージです。
メイン関数 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | じゃんけんゲームの初期化 | ||||||||||||||||||
2 | 開始メッセージの表示 | ||||||||||||||||||
3 |
| ||||||||||||||||||
4 | 終了メッセージの表示 | ||||||||||||||||||
5 | プログラムの終了 |
じゃんけんゲームのメイン
じゃんけんゲームのメイン関数だけを紹介します。
//------------------------------------------------ // メイン関数 //------------------------------------------------ int main( void ) { int kati = 0; int make = 0; int count; int human; int computer; printf( "★じゃんけんゲーム(10回戦)\n\n" ); for ( count = 1 ; count <= 10 ; count++ ){ printf( "%2d回目…[1]グー、[2]チョキ、[3]パーを入力して下さい:", count ); human = funcHuman(); computer = funcComputer(); switch ( funcJudge(human,computer) ){ case 0: kati++; printf( "⇒勝ち。\n" ); break; case 1: make++; printf( "⇒負け。\n" ); break; case 2: printf( "⇒引き分け。\n" ); break; default: printf( "⇒エラー。\n" ); break; } } printf( "\n" ); printf( "★じゃんけんゲームの結果発表\n" ); printf( "人間 :%d 回勝ち\n", kati ); printf( "コンピュータ:%d 回勝ち\n", make ); printf( "※引き分け回数は %d 回ありました。\n", (10 - kati - make) ); return 0; }
上記のメイン関数で分割したサブ関数の funcHuman()、funcComputer()、funcJudge() の3つを呼び出してます。
メイン関数を良く見ると「じゃんけんゲームの考え方」で紹介した文章とソースコードのプログラミング内容が一致すると思います。
また、「じゃんけんゲームの作り方」で紹介したイメージともソースコードのプログラミング内容が同じであることが分かります。
このようにゲームのアルゴリズムをしっかりと考えてからプログラミング(記述)すれば良いのです。
詳しい説明は次のページです。(基本編を読む)
※コメント投稿者のブログIDはブログ作成者のみに通知されます