完善后的猜数字游戏——仍有个小问题
提示: 作者被禁止或删除 内容自动屏蔽
程序代码:
/*************************************************************
把你的程序加了点东西,试了一下,现在应该是可以了。
不过觉得你的程序好象有点儿乱。另外,如果熟悉这个游戏
的人还可以,如果不熟悉的人,你也没个说明啥的,让人家怎么
玩儿呢?
一家之言,谨供参考。
*************************************************************/
#include <stdlib.h>
#include "stdio.h"
#include<time.h>
#define X {char c;c=getchar()!='\n';}
int answer[4];
void main()
{
void produce();
void guessing();
void playagain();
produce();
guessing();
playagain();
}
void produce()/*产生随机的一个四位数*/
{
int i,j;
for(i=0;i<=3;i++)
{
srand(time(0));
answer[i]=rand()%10;
for(j=0;j<i;j++)
{
while(answer[i]==answer[j])
{
answer[i]=rand()%10;
j=-1;
}
}
if(answer[0]==0)/*如果这个四位数的千位数为0则重新产生*/
{ i=-1;
continue; }
}
}
void guessing()
{ int m,guess[4],x,y,i,j,k,l,times=1;
while(x!=4)
{
x=0,y=0;
printf("\nguess the num:");
printf(" %d\n",times);
scanf("%d",&m);/*猜数*/
if(m<1000||m>9999)/*不合法输入或退出*/
playagain();
while(m>=1000&&m<=9999)/*answer和guess数组中一个个比较*/
{
for(i=3;i>=0;i--)/*求guess数组的每一个元素的值*/
{
guess[i]=m%10;
m=m/10;
}
for(j=0;j<4;j++)
{
if(answer[j]==guess[j])
x++;
}
for(k=0;k<4;k++)
for(l=0;l<4;l++)
if(answer[k]==guess[l])
y++;
printf("%dA%dB",x,y-x);/*x是位置和数字都猜对的个数,
(y-x)是数字对了,但位置不对的个数*/
times++;
}
if(x==4)
{printf("\ncongratulations!,you only need %d times to guess it ",times-1);
playagain();/*重复玩一次*/
}
}
}
void playagain()
{
char key;
printf("\nPress 'q' to quit:");
key=getchar();
X;
if(key=='q')
{
printf("\n quit game?(y or n)");
key=getchar();
X;
if(key=='y')
exit(0);
else
if(key=='n')/*重复再玩一次*/
{
produce();
guessing();
}
}
}