第24章 丁半ゲームを作ろう 


さて、前回は少し理屈っぽい話でしたので今回は 少しリラックスしてゲームを作ってみましょう。 今までの知識で作ってみましょう。(この部分を 書いているときにはまだ何もプログラムを作っていません。 行き当たりばったりで作っていきますのでうまく いくかどうかわかりません。)

まず、サイコロを2つ用意します。ランダムに1から6の 目を出すようにすればよいですね。これは、 第12章でやったrand()関数を使えばよいですね。

次に、プレーヤーの掛け金(?)と「丁か半」を入力します。 そして、サイコロの目を表示して、正解・不正解を判断します。 正解なら、掛け金をプレーヤーの所持金に加え、不正解なら 所持金より差し引く。こんな具合でどうでしょうか。

では、プログラムを見てみましょう。

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> void saikoro(int*, int*); int main() { long kakekin, motokin; //int型でもいいが掛け金が小さくなる! int cho_han, me1, me2, kekka, cont; char kekka_str[8]; //丁、半の文字列を格納 printf("あなたの所持金は? -->"); scanf("%ld", &motokin); //motokinはlongなので%ld printf("\n"); while(1) { //永久ループ printf("掛け金を入力してください。-->"); scanf("%ld", &kakekin); printf("\n丁=0,半=1 -->"); scanf("%d", &cho_han); printf("\n"); saikoro(&me1, &me2); kekka = (me1 + me2) % 2; if (kekka == 0) strcpy(kekka_str, "丁"); else strcpy(kekka_str, "半"); printf("\nサイコロ1=%d サイコロ2=%d 結果は%sでした!\n", me1, me2, kekka_str); if (cho_han == kekka) motokin += kakekin; else { motokin -= kakekin; if (motokin <= 0L) { printf("もうお金がありません!\n"); break; //破産したらループ脱出 } } printf("\nあなたの持ち金は%ld円です\n", motokin); printf("続けますか [yes=1, no=0]"); scanf("%d", &cont); if(cont == 0) break; //やめたいときもループ脱出 } printf("\nそれではやめましょう\n"); return 0; } void saikoro(int *a, int *b) { srand((unsigned)time(NULL));//rand()だけではいつも *a = rand() % 6 + 1; //同じパターンになる *b = rand() % 6 + 1; //6で割った余りは0から5 return; //サイコロと同じにするため1を足す }


少し長いけど、1つずつ見ていくとたいして難しくはないですね。 main関数にいろいろたくさん書いてしまいましたが、 もっといろいろな関数を作ってmain関数を短くしてみてください。 それと、saikoro関数で一度に2つのさいころの目を出していますが これを1個だけにしてreturnで返す、main関数ではsaikoro関数を 2回呼ぶ、というのはどうでしょうか。この方が簡単でスマートなように 見えます。実は筆者もそのように書いたのですが、重大な問題があります。 それはやってみればわかりますが・・・。(いつもゾロメの丁になってしまう!)

欲張ってかけすぎると負けたとき一気に破産します。

なお、このゲームを使って賭博行為を行い警察に捕まっても 筆者には何の責任もありません。


[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Nov/12/1996 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。