C语言猜数字游戏重写版

C语言猜数字游戏重写版,第1张

C语言猜数字游戏重写版,第2张

其实这个程序的算法很简单,所以写了很长时间来实现一个很好的人机交互,这一点在creatDialog()的很多语句中都可以看到。另外,改变了之前的随机数生成函数,完全重写了原数与输入数的比较函数的格式(实际上算法大致相同,执行效率可能没有提高,但代码长度大大减少)。
不足之处请不吝赐教。

# include
# include
# include
struct right _ place { int right;int place};

int main(void)
{
int creat dialog(int x,int * p);

void rnd production(int num DFT[]);
struct right _ place numCompare(int num DFT[],int numIn[]);

int dialog,quitOrContinue,allQuit
int numDft[4],numIn[4],result[2];
struct right _ place compare back;

creatDialog (1,NULL);

all quit = 1;
while(all quit = = 1)
{
creat dialog(7,NULL);
rnd production(num DFT);
quitOrContinue = 1;
while(quitOrContinue = = 1)
{
dialog = 2;
while(dialog = = 2)
{
creat dialog(2,numIn);
dialog = creatDialog (3,numIn);
}
compare back = num compare(num DFT,numIn);
result[0]= compare back . right;
result[1]= compare back . place;
quitOrContinue = creat dialog(4,result);
}
if(quitOrContinue = = 2)
all quit = creat dialog(5,numDft);
if(quitOrContinue = = 3)
all quit = 1;
if(quitOrContinue = = 4)
all quit = 2;
}

if(all quit = = 2)
creat dialog(6,NULL);

getchar();
返回0;
}

int creatDialog (int x,int * p)
{
int back;
int I;
switch(x)
{
case 0:
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
break;
情况一:
creatDialog (0,NULL);
printf("欢迎来到猜谜游戏!\ n版本2.0 \ n hor:andyzhshg \ n生产日期:2007年9月1日\ n ");
creatDialog (0,NULL);
printf("在这个游戏中,你需要输入四个数字。\ n然后计算机会给你正确的猜测。”);
printf("计算机会将它之前生成的四位数与你的输入进行比较,然后告诉你");
printf("你猜对了几个数字,包括\n数值和序列的信息。\ n ");
break;
情况二:
creatDialog (0,NULL);
printf("请输入您猜测的四位数字(用空、enter或Tab分隔):\ n ");
for(I = 0;I < 4;i++,p++)
scanf ("%i ",p);
break;
情况三:
creatDialog (0,NULL);
printf("您输入的数字是:% i% i% i,请输入“1”确认,按“2”重新输入。\n ",*p,*(p + 1),*(p + 2),*(p+3));
scanf ("%i ",& back);
return返回;
break;
情况四:
creatDialog (0,NULL);
printf("在您输入的数字中:\ n有%i个数字具有正确的值和位置,\ n有%i个数字具有正确的值但位置不正确。\n ",*p,*(p+1));
if((* p)= = 4)
{
printf("恭喜你,答对了!\ n ");
printf("继续游戏?请继续输入“1”,输入“2”退出游戏。\ n ");
scanf ("%i ",& back);
if(back = = 1)
return 3;
if(back = = 2)
return 4;
}
else
{
printf("继续?请继续输入“1”以显示正确答案。请输入“2”。\ n ");
scanf ("%i ",& back);
return返回;
}
break;
情况五:
creatDialog (0,NULL);
printf("正确答案是:%i %i %i %i,继续努力!\n ",*p,*(p + 1),*(p + 2),*(p+3));
printf("继续游戏?请继续输入“1”,输入“2”退出游戏。\ n ");
scanf ("%i ",& back);
return返回;
break;
情况6:
creatDialog (0,NULL);
printf("感谢您玩这个游戏,再见!\ n按任意键退出\ n ");
break;
情况7:
creatDialog (0,NULL);
printf("新游戏开始!祝你好运!\ n ");
break;
默认:
break;
}
}

void rnd production(int numDft[])
{
int I;
srand((无符号)time(NULL));
for(I = 0;I < 4;i++)
num DFT[I]= rand()% 10;
//printf ("%i %i %i %i\n ",numDft[0],numDft[1],numDft[2],numDft[3]);
}

struct right _ place numCompare(int num DFT[],int numIn[])
{
int i,j;
struct { int Dft;int In} flag[4] = { 1,1,1,1,1,1,1,1 };
struct right _ place result = { 0,0 };
for(I = 0;I < 4;i++)
if(num DFT[I]= = numIn[I])
{
(result . right)++;
flag[i]。DFT = 0;
flag[i]。in = 0;
}
for(I = 0;I < 4;i++)
for(j = 0;j < 4;j++)
if (flag[i]。Dft && flag[j]。in & & num DFT[I]= = numIn[j])
{
(result . place)++;
flag[i]。DFT = 0;
flag[j]。in = 0;
}
返回结果;
}

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C语言猜数字游戏重写版

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情