こんにちは。テストが一段落したioriです。今回は前回までの内容を応用してゲームを作ってみました。
(実際はテスト前にできてたけど時期が悪くてポスト出来なかったよね。俺にコンスタントな投稿は難しい。)
Hit & Blow
今回作成したのはHit & Blowというゲーム。相手が思い浮かべている4桁の数字(今回はプログラムが生成した乱数。4桁で文字の重複はなし。)を推理するゲームです。
繰り返しをして判定を出していくプロセスより数字の生成のほうが手間取ったのは内緒です。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int GetRandom(int min, int max);
int main(void)
{
srand((unsigned int)time(NULL)); //乱数初期化
int retry = 1;
int a, b, c, d;
int aa, bb, cc, dd;
do {
//重複無しの4つの整数を表示
a = GetRandom(1, 10);
do {
b = GetRandom(1, 10);
} while (a==b);
do {
c = GetRandom(1, 10);
} while (a==c && b==c);
do {
d = GetRandom(1, 10);
} while (a==d && b==d && c==d);
printf("%d,%d,%d,%d\n", a, b, c, d);
//ゲームメッセージ開始
printf("Hit&Blowです。\n私が考えている数字とその並びを10回以内の質問で当ててください。\n");
printf("(Hit:数字も場所も正解 Blow:数字は正解だが場所が違う)\n");
//変数初期化
int i = 0;
int hit = 0;
int blow = 0;
int match = 0;
while (i<10 && hit!=4) {
hit=0;
blow=0;
int match;
int value;
//回答入力
printf("%d回目…", i);
scanf("%d", &value);
aa = value / 1000;
bb = (value - aa*1000 ) / 100;
cc = (value - aa*1000 - bb*100) /10;
dd = (value - aa*1000 - bb*100 -cc*10);
//ヒット(桁数字 正解)
if (a==aa) hit++;
if (b==bb) hit++;
if (c==cc) hit++;
if (d==dd) hit++;
//ブロー(数字のみ正解)
if (a==bb || a==cc || a==dd) blow++;
if (b==aa || b==cc || b==dd) blow++;
if (c==aa || c==bb || c==dd) blow++;
if (d==aa || d==bb || d==cc) blow++;
//結果表示
printf("Hit:%d Blow:%d\n", hit, blow);
i++;
}
printf("bye");
scanf("%d", &retry);
} while (retry != 0);
return 0;
}
int GetRandom(int min, int max)
{
return min + (int)(rand() * (max - min + 1.0) / (1.0 + RAND_MAX));
}
やっぱりなにか形になると楽しい。
<前回
次回>(まだないよ)