小游戏----猜数字
游戏很小,代码数量不是很多,算法也是很简单,里面所有的步骤都已经加入注释,有兴趣的可以看一下,最好能指出需要改进的地方
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void caishu(int n);
void rule();
int main()
{
int n,select;
do
{
printf("\t\t\t欢迎来到猜数游戏!\n");
printf("1.PlayGame\n2.Rule\n3.exit\n");
printf("请输入你的选择!\n");
scanf("%d",&select);
switch(select)
{
case 1:
system("cls");
printf("\t\t\t欢迎来到猜数游戏!\n");
printf("输入你要猜的数字位数\n");
scanf("%d",&n);
caishu(n);
break;
case 2:
system("cls");
rule();
break;
case 0:break;
default:
printf("请输入0~2之间的数!\n");
}
}while(select!=0);
}
void caishu(int n)
{
int count=0,i=0,j,a[10],b[10];//a来存放生成的数,b用来存放玩家猜的数字
int count1=0,count2=0;//count1是用来记录位置对并且数字也对,count2记录数字对
int flag;
srand((unsigned)time(NULL));//生成随机数
do
{
start:;
a[i]=rand()%10;//将生成的数放入数组中
for(j=0;j<i;j++)//如果该数的数字中有重复的就要重新生成
if(a[i]==a[j])
goto start;
i++;
count++;//记录个数
}while(count<n);//少于想要生成的个数的时候就要循环
//下面的是打印生成的数的,若加入程序可以检验程序的正误
/*printf("你生成的随机数为\n");
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n\n");
*/
do
{
count1=0,count2=0;//因为count1与count2都在循环体中,所以每次循环都要将他们置零,否则提示中的A,B就是所有猜的数累计加起来的
printf("请输入你猜的数");
for(i=0;i<n;i++)//将猜的数字存入数组中,
scanf("%d",&b[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(a[i]==b[j])//猜的数中存在答案中的数字
{
if(i==j)//猜的数的位置和数字都吻合
count1++;
count2++;
}
}
if(count1!=n)//如果所有的数不都猜中就要继续
{
flag=0;//flag为0为循环的条件
printf("clue:A %d B %d\n",count1,count2);//A表示位置对且数字对,B表示待猜数字相同的个数
}
else
flag=1;//猜中,循环结束
}while(flag==0);
printf("你他娘的真是个天才!\n");
}
void rule()
{
printf("\t\tThe rule of rhe game!\n");
printf("step1:input the number of digits.\n");
printf("step2:将你猜测的得数打出来每个数字之间留一个空格\n");
printf("输入结束后按回车。clue为线索,A表示你猜的数字中位置与答案相同且数字相同,B表示你猜的数中与答案相同的个数\n");
}
下面是程序测试的图片