猜数字游戏
开始时应输入要猜的数字的位数,这样计算机可以根据输入的位数随机分配一个符合要求的数据,计算机输出guess后便可以输入数字,注意数字间需用空格或回车符加以区分,计算机会根据输入信息给出相应的提示信息:A表示位置与数字均正确的个数,B表示位置不正确但数字正确的个数,这样便可以根据提示信息进行下次输入,直到正确为止,这时会根据输入的次数给出相应的评价。
随机分配数据与核对输入数据,利用系统时钟作为随机数的种子,将每次产生的0~9之间(包含0和9)的随机数存到数组a中,将从键盘中输入的数字存到数组b中,用数组b中的所有数与数组a中的每个数比较,通过统计位置与数据均相同的个数及统计位置不同但数据相同的个数来输出提示信息。
void guess(int n)
{
int account, bcount, i, j, k = 0, flag, a[10], b[10];
do
{
flag = 0;
srand((unsigned)time(NULL)); /*利用系统时钟设定种子*/
for (i = 0; i < n; i++)
a[i] = rand() % 10; /*每次产生 0~9 范围内任意的一个随机数并存到数组 a 中*/
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
if (a[i] == a[j]) /*判断数组 a 中是否有相同数字*/
{
flag = 1; /*若有上述情况则标志位置 1*/
break;
}
}
} while (flag == 1); /*若标志位置为 1 则重新分配数据*/
do
{
k++; /*记录猜数字的次数*/
account = 0; /*每次猜的过程中位置与数字均正确的个数*/
bcount = 0; /*每次猜的过程中位置不正确但数字正确的个数*/
printf("guess:");
for (i = 0; i < n; i++)
scanf("%d", &b[i]); /*输入猜测的数据到数组 b 中*/
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (a[i] == b[i])/*检测输入的数据与计算机分配的数据相同且位置相同的个数*/
{
account++;
break;
}
if (a[i] == b[j] && i != j) /*检测输入的数据与计算机分配的数据相同但位置不同的个数*/
{
bcount++;
break;
}
}
printf("clue on:%d A %d B\n\n", account, bcount);
if (account == n) /*判断 account 是否与数字的个数相同*/
{
if (k == 1)
printf(" you are the topmost rung of Fortune's ladder!! \n\n");
else if (k <= 5)
printf("you are genius!!!\n\n");
else if (k <= 10)
printf("you are clever!!\n\n");
else
printf("you need try hard!!\n\n");
break;
}
} while (1);
}
main()
{
int i, n;
while (1)
{
clrscr();
gotoxy(15, 6); /*将光标定定位*/
printf("1.start game?(y/n)");
gotoxy(15, 8);
printf("2.Rule");
gotoxy(15, 10);
printf("3.exit\n");
gotoxy(25, 15);
printf("please choose:");
scanf("%d", &i);
switch (i)
{
case 1:
clrscr();
printf("please input n:\n");
scanf("%d", &n);
guess(n); /*调用 guess()函数*/
sleep(5); /*程序停止 5 秒钟*/
break;
case 2: /*输出游戏规则*/
clrscr();
printf("\t\tThe Rules Of The Game\n");
printf(" step1: input the number of digits\n");
printf(" step2: input the number,separated by a space between two numbers\n");
printf(" step3: A represent location and data are correct\n");
printf("\tB represent location is correct but data is wrong!\n");
sleep(10);
break;
case 3: /*退出游戏*/
exit(0);
default:
break;
}
}
}