猜数字小游戏的实现,C语言0基础即可做到的下游戏,手把手带你理清思路,培养编程思维。
题目:请你设计一个猜数字小游戏,系统生成1~100之间的随机数,让玩家去猜数字,并且需要对玩家做出反馈,例如玩家猜的数字比随机数小,就要提示猜小了;反之则提示猜大了,直到玩家猜出正确答案为止。
首先我们肯定要理清基本思路,千万不要一上来就着急写代码,任何代码都不是从第一行一直写到最后一行的,我们应该注意的是根据自己的思路去将代码一步步补全,直到完成,那么接下来我们一起来感受一下,请集中精力,开始发车了!
首先对于游戏来说我们需要有一个简易的游戏菜单,我们直接用几个打印制作出来,如下:
#include<stdio.h>
void menu()
{
pritnf("*****************************\n");
pritnf("********* 1.play **********\n");
pritnf("********* 0.exit **********\n");
pritnf("*****************************\n");
}
int main()
{
menu();
return 0;
}
由于设计一个东西代码一般较为复杂,所以我们优先考虑使用函数的形式来实现各个部分的功能,这样不至于让主函数显得特别凌乱,并且有利于我们出现问题时更容易去检查。
简易菜单做好后我们接下来要实现主函数内整体框架,让用户选择1玩游戏,0退出游戏,当然了还要考虑到有些用户输入345之类的,所以处理多种情况,并且有非法情况,我们可以考虑用switch语句,当我们玩完一把后肯定要给玩家一个选择,继续玩还是退出游戏,所以一定要用到循环,那么三种循环选哪一种呢,对于一个游戏来说上来我们肯定要显示主页面,然后再做出判断,所以最优解当然是do…while循环,现在整体思路已经有了,我们就这直接开干,代码就变成了下面:
#include<stdio.h>
void menu()
{
printf("*****************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("*****************************\n");
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d",&input);
switch (input)
{
case 1:
printf("play\n");
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
这时候我们需要测试运行一下看看我们整体框架有没有什么问题,千万不要非得最后写完了再去运行,结果发现一大堆错误,这时候就非常难受了,有可能你来去改都不想改了.
好了现在我们整体的框架好了,那么就要着手游戏的主体了,首先我们要生成随机数,然后让玩家输入,最后去判断是否正确并且要给出反馈,
我们先来看最简单的当然就是让玩家输入,于是函数主体部分就这样写:
void game()
{
int k = 0;
scanf("%d",&k);
}
然后我们需要想办法去生成一个随机数,这时候就需要学习一个新的函数rand,这个函数是专门用来生成随机数的,但是这个函数用法却很有讲究,我们需要给他一个变化的量它才能随机生成数字,但是我们就是为了随机数才来用它的啊,所以我们就得想办法解决,我们发现电脑上的时间是一直在变化的,所以我们可以想办法把时间给它传过去,这时候又需要引入一个新的函数time,专门把时间传给rand,我们来看如何实现,
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int k = 0;
scanf("%d",&k);
int ret = rand(time);
}
当然了这两个新的函数需要引用对应的头文件,这时候我们可以去看它生成的随机数会发现每次生成的随机数都是很临近的,并且按的快的话甚至会一样,这个时候问题就来了,我们哪里出错了吗?其实以上并没有什么错,只不过我们的rand函数太讲究了,在使用rand函数之前我们还需要一个srand函数来设置随机数的起点,并且time函数要给它传入一个指针,当然让我们只需要传入一个空指针即可(NULL),所以我们的代码进一步会变为:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int k = 0;
scanf("%d",&k);
int ret = rand(time);
}
void menu()
{
printf("*****************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("*****************************\n");
}
int main()
{
srand(time(NULL));
int input = 0;
do
{
menu();
scanf("%d",&input);
switch (input)
{
case 1:
printf("play\n");
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
这里还有一个问题,我们的rand函数给出的随机数其实是0~32767,这么大的数字可能并不适合这个猜数字游戏,那么我们又该怎么解决呢,我们仔细思考一下如果一个数字%100,那么余下的数一定是0到99,这时候再加1得到的就是0到100的数字,这时候就很合适了,然后最后一步就是判断猜的数字是否是随机数了,最后我们的代码就完成了:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
int k = 0;
printf("请猜数字:>\n");
int ret = rand(time)%100+1;
while (1)
{
scanf("%d", &k);
if (k < ret)
printf("猜小了\n");
else if (k > ret)
printf("猜大了\n");
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
void menu()
{
printf("*****************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("*****************************\n");
}
int main()
{
srand(time(NULL));
int input = 0;
do
{
menu();
scanf("%d",&input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
return 0;
}
到这里这个小游戏就完成了,但是我们还可以添加一些小小的部分让这个游戏更加好看一些,首先注意到的一定是玩完一把之后上一部分还是存在,我们可以用system(“cls”)此代码来清空屏幕,还可以用Sleep来让游戏猜对后有几秒延迟,然后再清空屏幕,当然我们要使用Sleep的话要知道其用法,其实它的用法也很简单,先引用头文件windows.h,它睡眠的时间单位是ms,那么最后的代码就完成了:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void game()
{
int k = 0;
int ret = 0;
ret=rand(time)%100 + 1;
while (1)
{
printf("请猜数字:>\n");
scanf("%d", &k);
if (k < ret)
printf("猜小了\n");
else if (k > ret)
printf("猜大了\n");
else
{
printf("恭喜你,猜对了\n");
Sleep(1000);
system("cls");
break;
}
}
}
void menu()
{
printf("*****************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("*****************************\n");
}
int main()
{
srand(time(NULL));
int input = 0;
do
{
menu();
scanf("%d",&input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出程序\n");
break;
default:
printf("输入错误\n");
Sleep(1000);
system("cls");
break;
}
} while (input);
return 0;
}
好了,关于这个简单的小游戏写到这里就可结束了,感兴趣的朋友可以去玩一下,更重要的是对思路的总结,这种对初学者来说对培养编程思维是非常有帮助的,推荐大家自己能去尝试写一下。