フジテレビの深夜枠で放送されていたヌメロンという数当てゲームの動きを書いてみました。このゲームは、プレイヤー二人が向かいあって対戦するもので、基本的なルールは次のとおりになります。
基本ルール
- それぞれのプレイヤーが0~9までの数字が書かれたカードのうち3つを使って3ケタの番号を作成する。ただし、「112」「121」といった同じ数字を2つ以上使用した番号は作れない。
- 先攻のプレイヤーは相手が作成したと思われる番号をコールする。相手はコールされた番号と自分の番号を見比べ、コールされた番号がどの程度合って いるかを発表する。数字と位置が合っていた場合は「EAT」、数字は合っているが位置は合っていない場合は「BITE」となる。例として相手の番号が 「765」、コールされた番号が「746」であった場合「1EAT-1BITE」となる。
- これを先攻・後攻が繰り返して行い、先に相手の番号を完全に当てきったプレイヤーの勝利となる。
海戦ゲームを数字に置きかえてシンプルにし、艦船の位置による限定要因(推測の手掛かり)を、数字の有無であったり数字の位置情報に置きかえたようなゲームです。
ソースコード
このソースコードでは、プログラムが乱数で決定した3桁の数字をユーザが当てる形式をとっています。プログラムはユーザの入力値に基づいて、「イート」「バイト」「ヒット」の情報を正確に答えます。
#include <stdio.h>
#include <stdlib.h> // rand
#include <time.h>
int main()
{
char x, y, z;
int a, b, c;
int n, m;
/* 3桁の乱数値を生成 */
srand((unsigned int)time(NULL));
x = (char)(rand()%10);
do {
y = (char)(rand()%10);
} while(y == x);
do {
z = (char)(rand()%10);
} while(z == x||z == y);
for (;;) {
/* ユーザ入力を受け、1の位、10の位、100の位に分ける */
scanf("%3d", &n);
a = n/100;
b = n%100/10;
c = n%10;
/* 不正な入力値をはじく */
if (n < 12||n > 987||a == b||a == c||b == c)
continue;
/* 「イート」の数 */
n = 0;
if (a == x) n++;
if (b == y) n++;
if (c == z) n++;
/* 「バイト」の数 */
m = 0;
if (a == y || a == z) m++;
if (b == x || b == y) m++;
if (c == x || c == y) m++;
if (n != 3)
printf("%d-%d\n", n, m);
else {
puts("Hit!\n");
break;
}
}
return 0;
}
アイテムなどの特別ルールはありません。基本システムだけです。
24行目のバイトのbの所
b==y ではなく b==zの間違いでは?
b==yですと、条件がイートと同じになっていますよ
[…] ルールは Numer0n数当てゲーム から抜粋しました。 […]