このソースに、どのようなコードを加えれば重複しないようになるのかを具体的に示していただけたら幸いです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int a, i, j;
int state[100];
int card[5][5];
int GetNumber()
{服
while (1)
{
a = rand() % 100 + 1;
if (state[a] == 0)
{
state[a] = 1;
break;
}
}
return a;
}
void Dis()
{
printf(" ******BINGOゲーム******\n");
for (i = 0; i<5; i++)
{
printf("\n");
for (j = 0; j<5; j++)
{
printf(" %2d ", card[i][j]);
}
printf("\n");
}
}
int NumberCheck(int m)
{
for (i = 0; i<5; i++)
{
for (j = 0; j<5; j++)
{
if (card[i][j] == m)
{
printf(" やったね!%.2dはあるよ!\n", m);
card[i][j] = 0;
return 1;
}
}
}
printf(" ざんねーん。%.2dはないよ\n", m);
return 0;
}
// カードの縦、横、斜めいずれか1列が全て空いたらBINGO
int BingoCheck()
{
for (i = 0; i<5; i++)
{
a = 0;
for (j = 0; j<5; j++)
{
a += card[i][j];
}
if (a == 0)
{
return 1;
}
}
for (i = 0; i<5; i++)
{
a = 0;
for (j = 0; j<5; j++)
{
a += card[j][i];
}
if (a == 0)
{
return 1;
}
}
a = 0;
for (i = 0; i<5; i++)
{
a += card[i][i];
}
if (a == 0)
{
return 1;
}
a = 0;
for (i = 0; i<5; i++)
{
a += card[i][4 - i];
}
if (a == 0)
{
return 1;
}
return 0;
}
int main()
{
srand((unsigned)time(NULL));
for (i = 0; i<100; i++)
{
state[i] = 0;
}
// 1~100 の番号をランダムに配置
for (i = 0; i<5; i++)
{
for (j = 0; j<5; j++)
{
card[i][j] = GetNumber();
}
}
// カード中央のマスにfreeすマスとして「0」 をあらかじめ配置しておく。
card[2][2] = 0;
for (i = 0; i<100; i++)
{
state[i] = 0;
}
// カード初期状態を表示
Dis();
while (1)
{
// ENTERキーの入力
printf("\n");
printf(" ENTERを押してね!\n");
getchar();
// 乱数を取得し番号に適用する。乱数を用いた番号の抽選を開始する
if (NumberCheck(GetNumber()))
{
// 最新のカードの状態を表示する。
Dis();
// ビンゴしたかどうかをチェックする。
if (BingoCheck())
{
printf("ビンゴ~!!\n");
break;
}
}
}
printf("終了します。\n");
return 0;
}