C语言 猜数字游戏代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 猜数字游戏代码相关的知识,希望对你有一定的参考价值。
当用户选择开始游戏时,系统会提示用户排行榜上猜数字成绩的最好记录,并让用户逐次猜数字,用户每次猜数字后系统会给出本次猜数字的结果提示,如位置和数字都正确的数字个数、数字正确但位置不正确的数字字数。如果用户猜数字的次数超过10次,则提示用户游戏失败,如果在10次之内猜出了4个数字和正确的顺序,则提示用户猜数字成功,并到排行榜中进行比较,如果排名在前五名,则计入排行榜中,以便其他用户查看。在排行榜查看功能中,用户可以查看当前的游戏排行,排行榜中总共显示前5名玩家的排行,如有新的记录产生,则插入到排行榜中,并把排行榜中位次最末的记录挤出排行榜。在帮助模块,用户可以查看游戏规则,当熟悉规则后可以退出帮助模块。
参考技术A #include<stdio.h>#include<stdlib.h>
#include<time.h>
int EachDiff(int a[],int n)
int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i]==a[j])
return 0;
else
return 1;
int JudgeA(int a[],int b[],int n)
int i,result=0;
for(i=0;i<n;i++)
if(a[i]==b[i]) result++;
return result;
int JudgeB(int a[],int b[],int n)
int i,j,result=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i]==b[j]&&i!=j)result++;break;
return result;
void CreateNum(int a[],int n)
int i;
srand(time(0));
do
for(i=0;i<n;i++)a[i]=rand()%10;
while(!EachDiff(a,n));
int JudgeInput(int a[],int n)
int i;
if(!EachDiff(a,n))
return 0;
else
for(i=0;i<n;i++)
if(a[i]>9||a[i]<0)
return 0;
else
return 1;
int main()
//system();
int a[4],b[4],i;
int fth=1;
printf("作者 Dante -- 谢煜东");
printf("\t\t 欢迎来到猜数字游戏\n\n");
printf(" 计算机想好了一个4位无重复数字,首位可以为零。\n 例如:0913是可以的,3502也是可以的,6787不可以。\n");
printf(" 现在您想办法把这个数字猜出来。\n\n");
printf(" 每猜一个数字,计算机会根据这个数字给出几A几B:\n 其中A前面的数字表示位置正确的数的个数,\n 而B前的数字表示数字正确而位置不对的数的个数。\n\n");
//printf(" 如正确答案为5234,而猜的人猜5346,则是1A2B。\n 其中有一个5的位置对了,记为1A;\n 而3和4这两个数字对了,而位置没对,因此记为2B;\n 合起来就是1A2B。\n\n");
printf(" 记住!1:你共有8次机会,2:输入的数字不能重复。\n\n");
printf(" 当出现\"第几次:\"字样并等待的时候,您就可以输入你要猜测的四位数字,\n 输入完之后回车确认。祝您开心\n\n 明白之后任意键游戏正式开始!");
getchar();
CreateNum(a,4);
system("cls");
printf("\t\t现在可以输入你要猜的四位数字了,输入之后回车确认。\n");
while(fth<=8)
int t=1000;
printf("第%d次: ",fth);
scanf("%d",amp;b[0]);
for(i=0;i<3;i++)
b[i+1]=b[i]%t;
b[i]=b[i]/t;
t/=10;
for(i=0;i<4;i++)printf("%d",b[i]);
if(JudgeInput(b,4)==0)
printf("您的输入有问题,请重新输入\n");
continue;
if(JudgeA(a,b,4)==4)
printf("\t结果: 答对了!好聪明!");
system("pause");
//return;
printf("\t结果:您有%d个数字和位置都对了,有%d个数字对了而位置没对\n",JudgeA(a,b,4),JudgeB(a,b,4));
fth++;
printf("\n很遗憾。正确答案是:");
for(i=0;i<4;i++)
printf("%d",a[i]);
printf("下次再玩吧!88\n");
system("pause");
return 0;
本回答被提问者和网友采纳
C语言编写猜数字小游戏
C语言编写猜数字小游戏
经过对C语言的初步学习,为提高编程能力,可以敲一些稍费脑筋的代码,猜数字就是一个很好的选择。要想实现该游戏,那么首先我们应该知道制作的大体思路。
- 电脑应随机产生一个数字(为便于玩家猜的同时,增加难度和趣味性,所以选择1~100)
- 玩家输入所猜数字,电脑给予反馈。
- 玩家得知反馈后进行进一步操作。
(如:所猜数字过大,所猜数字过小,所猜数字正确(是否重玩一局))
知道大体思路后我们就可以着手写代码了
首先玩游戏肯定要有进入界面,让别人知道这是什么游戏。
#include<stdio.h>//头文件万万不能忘
void menu()//无需返回值
printf("*********猜数字********\\n");
printf("********1.PLAY********\\n");
printf("********0.EXIT********\\n");
接着可以将主函数大体写出来
int main()
srand((unsigned int)time(NULL));//产生随机数
int input = 0;
do//选用do—while是因为它可以先执行后判断,符合当前需求
menu();
printf("请选择(1/0)\\n");
scanf("%d", &input);
switch (input)//在此如果使用if语句有些繁琐
case 1:
game();//游戏主体,下面会写到
break;
case 0:
printf("退出游戏\\n");
break;
default:
printf("输错啦,请重新输入\\n");//应对输错情况
break;
while(input);//0为假,非0为真,所以借input判断循环是否执行
return 0;
然后就是重头戏——游戏主体
根据思路首先要产生随机数
rand
Generates a pseudorandom number.
int rand( void );
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.
MSDN上对rand部分解释如上,我们可以知道rand的返回值在0到RAND_MAX(0x7fff,十进制为32767)之间,那么它是否可以起到产生随机数的作用呢?
经测试其确实可以产生随机数,但再次编译时不难发现,两次的数字是相同的,这就使游戏的趣味性下降了。
srand
Sets a random starting point.
void srand( unsigned int seed );
所以需要srand为其提供生成起点,但srand又需要一个变化的随机数种子来帮助rand生成随机数,所以我们引入一个时间戳的概念(时间戳:当前时间和计算机的起始时间的差值,单位是秒;计算机起始时间:1970年1月1日上午8:00:00)time()函数返回的即是时间戳,时间肯定是一直在改变的,即时间戳也是如此。因每次只需取一次随机种子,所以将该语句放在主函数中。
void game()
int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
int num;
while (1)//只要没猜出来就一直猜
printf("猜猜看:");
scanf("%d", &num);
if (num > ret)
printf("猜大了\\n");
else if (num < ret)
printf("猜小了\\n");
else
printf("恭喜你猜对了\\n");
break;//猜对后跳出循环
最后再写一下主程序
#include<stdio.h>
#include<stdlib.h>//为使用srand
#include<time.h>//为使用time()函数
void menu()
printf("********猜数字********\\n");
printf("********1.PLAY********\\n");
printf("********0.EXIT********\\n");
void game()
int ret = rand() % 100+1;//因为rand取值范围为0~32767,所以%100并+1使其<=100
int num;
while (1)//只要没猜出来就一直猜
printf("猜猜看:");
scanf("%d", &num);
if (num > ret)
printf("猜大了\\n");
else if (num < ret)
printf("猜小了\\n");
else
printf("恭喜你猜对了\\n");
break;
int main()
int input = 0;
srand((unsigned int)time(NULL));
do//选用do—while是因为它可以先执行后判断,符合当前需求
menu();
printf("请选择(1/0)\\n");
scanf("%d", &input);
switch (input)//在此如果使用if语句有些繁琐
case 1:
game();//游戏主体,下面会写到
break;
case 0:
printf("退出游戏\\n");
break;
default:
printf("输错啦,请重新输入\\n");//应对输错情况
break;
while(input);//0为假,非0为真,所以借input判断循环是否执行
return 0;
ps:第一次写技术类博客,还有很多地方需要改正完善,望各位大佬可以指出我的不足。
以上是关于C语言 猜数字游戏代码的主要内容,如果未能解决你的问题,请参考以下文章