一个猜数字的游戏的源代码
由计算机“想”一个无重复四位数,请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止
#include <stdio.h>#include <math.h>#include <stdlib.h>#include<time.h> int Rnd() //产生十以内的随机整数。{ int Rteger; Rteger=rand(); 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); //还要不要玩。 } } 一个猜数字的游戏的源代码
