ゲームを作るとは言え、いきなり市販されている様なゲームや、インターネットでダウンロードできるフリーのゲームのように、ビジュアル的にも完成度の高いゲームを作ることは無理です。
実際に、これまで勉強してきたプログラムで作れるゲームは、非常に規模の小さい物に限られます。
しかし、規模の小さいゲームをしっかり理解し、自分で改良を加えることで、プログラムへの理解が深まります。
まずは、数当てゲームを作ってみましょう。
数当てゲームのルールはいたってシンプルです。
乱数を使って、あらかじめ決めておいた1〜10の数値のいずれかを当てるというゲームです。
<sample program 024-01>
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int number; int input; srand((unsigned int)time(NULL)); number = rand() % 10 + 1; printf("1〜10までの整数を入力してください:"); scanf("%d", &input); if (input == number) { printf("正解です!\n"); } return 0; } |
<実行結果>
1〜10までの整数を入力してください:5 正解です! 続行するには何かキーを押してください・・・
このプログラムでは、変数を2つ使っています。
1つは、1〜10までの乱数をセットするための変数「number」、もう1つは、セットされた数を当てるため、入力された数を保持しておく変数「input」です。
前にも書きましたが、変数は用途に応じて用意する必要があります。
プログラムの部分を説明します。
まずは、毎回乱数を変化させるため、srandを使って乱数の種を設定しています。
次に、変数「number」に1〜10までの乱数を代入しています。
入力を促すメッセージを表示した後、scanfで数値を入力します。
scanfで入力した数値とrandで発生させた乱数が一致していれば「正解です!」というメッセージを表示させます。
上の実行結果では、首尾よく「正解です!」と表示されていますが、正解する確率は毎回10分の1の確率です。
実際にプログラムが正しく動くかどうかテストをする際に、いつまで経っても正解できないこともあります。
正しく動くかどうかを検証したいのに、何度も何度も実行させるのは時間の無駄です。
これは、デバッグ用のコード(命令)を書くことによって解消されます。
<sample program 024-02>
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int input; int number; srand((unsigned int)time(NULL)); number = rand() % 10 + 1; /* デバッグ用コード */ printf("正解は%d\n", number); printf("1〜10までの整数を入力してください:"); scanf("%d", &input); if (input == number) { printf("正解です!\n"); } return 0; } |
<実行結果>
正解は5 1〜10までの整数を入力してください:5 正解です! 続行するには何かキーを押してください・・・
あくまでもデバッグ用なので、実際のゲームでは表示させないのは言うまでもありません。
しかし、プログラムが正しく動作するかどうか検証する時には、非常に助かると思います。
ただ何となく動いているプログラムほど危険なものはありません。
自分が作ったプログラムが思い通りの動作をするかどうかは必ず確かめなければなりません。
正解が表示されるのは「ズルイ」と感じるのはプレイヤーの考え方です。
クリエーター(作る側)はプレイヤー(遊ぶ側)とは違って、正しく動作するプログラムを提供する必要がありますので、検証のためのデバッグコードを書くのです。(当然、プレイしてもらう時には消しますが・・・)
※デバッグについては、今後詳しく書いていくつもりです。
ゲームを作る!と書いた割には「しょうもない」プログラムなのですが、これからが皆さんの出番です。
このプログラムを改良して、少しでも面白くしたり、他の機能を追加することで、プログラミングの力がついてきます。
例えば、if-else文を使って、外れた時の処理を追加したり、1回外れてももう1回チャンスを与える等の工夫が出来ます。
これまで見てきたプログラムを参考に色々と改良してみてください。
実際には、もう少し多くのことを学ぶことで、もっともっと奥の深いゲームを作ることもできます。
※基本制御文の「反復」を勉強した後で、このプログラムの改良版を書きますね。