一个猜数字的游戏的源代码
由计算机“想”一个无重复四位数,请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止
#include
#include
#include
#include
int Rnd() //产生十以内的随机整数。
{
int Rteger;
Rteger=rand()%10;
return Rteger;
}
void Get_b(int b[]) //得到用户输入的四位数,存储到数组b[4]中。
{
int i, m,n=10000;
scanf("%d",&m);
for(i=0;i<=3;i++)
{
b[i]=m/(n/10);
m=m-b[i]*(n/10);
n=n/10;
}
}
void Iswantplay(char * wantplay) //判断用户还想不想玩。
{
printf("再来一局(y),我不想玩了(n)");
scanf("%c",wantplay);
scanf("%c",wantplay);
printf("======================================================/n/n/n");
}
void Reset(int A[],int B[],int * score,int * a,int * b) //用来初始化一些变量。
{
int i=0,t=0, j;
(*score)=0; //得分清零。
(*a)=0;
(*b)=0; //所猜对的数字的个数的计数器清零
for(j=0;j<10;j++)
A[j]=j; //初始化数组,为产生无重复随机数做准备。
while(i<4)
{
t=Rnd();
if(A[t]) B[i]=A[t],A[t]=0,i++;
} //利用扑克牌中抽牌的思想,来产
//生无重复随机数,存储到B[](在main函数中为b[])中。
printf("输入一个四位数 开始吧! /n");
printf("-----------------------------/n");
}
void Check_ab(int a[],int b[],int * A,int * B) //此函数用来检查用户所输入的四位数与系
{ //统产生的四位数的相同情况。
int i,j;
for(i=0;i<=3;i++) //用两个嵌套的for循环来逐个比较a[]与b[]
{
for(j=0;j<=3;j++)
{
if(a[i]==b[j]) //如果数字相同。
{
if(i==j) //如果位置也相同。
(*A)++; //A自加。
if(!(i==j)) //如果位置不同。
(*B)++; //B自加。
}
}
}
}
void Welcome() //打印程序的开始界面。
{
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/n");
printf(" @ ----------------- @/n");
printf(" @ ===================猜数字游戏============== @/n");
printf(" @ ----------------- @/n");
printf(" @ ----programed by Star621 @/n");
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/n/n/n/n");
}
void Usage() //显示程序的用法。
{
printf("===============用法================================ /n");
printf(" 1.计算机随机产生一个无重复数字的四位数由你来猜./n");
printf(" 2.若所猜的数位置与数字均正确,会显示一个A,若数字对位置不对,会显示一个B./n");
printf("===========================================================================/n/n");
}
void Printscore(int n) //显示用户的得分。
{
switch(n)
{
case 0: printf("你真是撞大运了!! 恭喜!! 恭喜!! 加十分!/n");break;
case 1: printf("恭喜你 !猜对了! 你真是天才! 加九分!/n");break;
case 2: printf("不错! 不错! 猜对了! 你真够聪明! 加八分!/n");break;
case 3: printf("恭喜! 猜对了! 加七分!/n");break;
case 4: printf("猜对了! 及格. 加六分!/n");
default : printf("猜对了,但不够快啊,继续努力!/n");
}
printf("=========================================================/n/n");
}
void Printresult(int b[],int * A,int * B) //显示每次用户所猜的结果,供其思考判断。
{
int i;
printf(" ");
for(i=0;i<=3;i++)
{
printf("%d",b[i]);
}
printf(" ");
for(i=0;i<(*A);i++)
printf("A");
for(i=0;i<(*B);i++)
printf("B");
printf("/n");
}
void main()
{
int i=0,a[4],b[4],c[10],A=0,B=0,score=0;
char wantplay='y';
srand((unsigned int)time(NULL)); //初始化随机数生成器。
Welcome();
Usage();
while(wantplay=='y'||wantplay=='Y') //如果还想玩。
{
Reset(c,a,&score,&A,&B); //初始化变量。
while(A!=4) //只要还没猜对,继续猜。
{
Get_b(b); //输入所猜的数。
Check_ab(a,b,&A,&B); //电脑判断。
Printresult(b,&A,&B); //输出结果。
if(A!=4) A=0,B=0;
score++; //累计用户总共猜的次数。
}
Printscore(score/3); //打印得分。
Iswantplay(&wantplay); //还要不要玩。
}
}
一个猜数字的游戏的源代码