次は、占いゲームを作ってみましょう。
これもシンプルに作りますので、皆さんに考えてもらいましょう。
まずは、乱数の種をセットします。 次に0〜2の乱数を発生させます。 乱数が、 0の場合「大吉」 1の場合「中吉」 2の場合「小吉」 と表示します。 |
これまで勉強した命令で作れますので、ぜひ頑張って作ってみてください。
解答例です。
<sample program 025-01>
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int number; srand((unsigned int)time(NULL)); number = rand() % 3; printf("あなたの今日の運勢は・・・\n"); if (number == 0) { printf("大吉です!\n"); } else { if (number == 1) { printf("中吉です。\n"); } else { printf("小吉です。\n"); } } return 0; } |
<実行結果>
あなたの今日の運勢は・・・ 大吉です! 続行するには何かキーを押してください・・・
乱数を発生させる範囲は、0〜2ですから計算式は「rand() % 3」乱数を3で割った余り、となります。
後は、中身を判断するだけです。
上の例では、if文を使っていますが、switch文でも作れます。
<sample program 025-02>
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int number; srand((unsigned int)time(NULL)); number = rand() % 3; printf("あなたの今日の運勢は・・・\n"); switch (number) { case 0: printf("大吉です!\n"); break; case 1: printf("中吉です。\n"); break; case 2: printf("小吉です。\n"); break; } return 0; } |
<実行結果>
あなたの今日の運勢は・・・ 大吉です! 続行するには何かキーを押してください・・・
さて、いたってシンプルなプログラムですが、シンプル過ぎて「ドキドキ感」に欠けます・・・
占いは結果が出るまでの「楽しみな時間」があるはずです。
新しい命令(関数)を使用して、少し改良してみます。
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int number; srand((unsigned int)time(NULL)); number = rand() % 3; printf("あなたの今日の運勢は・・・\n"); printf("エンターキーを押してください。\n"); getchar(); if (number == 0) { printf("大吉です!\n"); } else { if (number == 1) { printf("中吉です。\n"); } else { printf("小吉です。\n"); } } return 0; } |
<実行結果>
あなたの今日の運勢は・・・ エンターキーを押してください。 大吉です! 続行するには何かキーを押してください・・・
「エンターキーを押してください。」というメッセージの後に「getchar();」という一文を追加しました。
「getchar」とは「Get Character」の略で、「1文字入力する」という命令(関数)です。
ここでは、「1文字入力する」という本来の使い方ではなく、「エンターキーを押すまでプログラムを止める」という使い方をしています。
つまり、エンターキーを押すと次へ進むわけです。
エンターキーを押すのはプレイヤー自身ですから、プレイヤー自身のタイミングで押すことが出来ます。
些細なことだと思うかも知れませんが、プレイヤーが押すタイミングを自分自身で決めることが、プレイヤーにとっては非常に重要なことなのです。
例えば、お金を入れると勝手に動き出し、勝手に止まるスロットマシンを考えてみてください。
このスロットマシンにプレイヤーが介入できるのは「お金を入れる」ことしかありません。
自分自身でスロットを止めることで「自分が操作している」という感覚になり、「勝つも負けるも自分次第」という感覚になるのです。
しょうもないことですが、ゲームという遊びにおいて、これは非常に重要なことです。
当然、占いでも「勝手に結果が表示される」より、「自分で押したから結果がこうなった」と感じられる方が、よりプレイヤー側に立った視点になると考えられます。
プログラムを見るとエンターキーを押す前から結果は決まっていますが、プレイヤーにはプログラムの中身は関係ありません。
要は、「自分が選んだかどうか」が問題なのです。
少々「クドく」なりましたが、ゲームを作ろうと考えている方は、このようなことも頭に置いてプログラミングをする必要があると思います。
では、もう1つだけ「しょうもない」ゲームを作って見ましょう。