写一个猜数字游戏
我们可以想想写出这个游戏需要什么?
首先是不是要随机生成数字。
然后玩家进行猜游戏,当猜错了,我们需要提醒玩家猜大了还是猜小了。
当然我们还可以加上猜的次数,次数多了游戏失败。
一.随机数的生成
1.rand函数
c语言给我们提供了一个函数,这个函数可以随机为我们提供一些数字。
这是函数的原型
rand函数的头文件:stdlib.h
这是rand函数的介绍
rand函数的功能就是返回一个伪随机整形(0-RAND_MAX) RAND_MAX在大部分编译器上是32767.
那么什么是伪随机数呢。
在这上面这串代码中,生成的随机数是41.可为什么是伪随机的呢。
我们再次运行上面这串代码我们会发现生成的数字还是41,故这不是真正的的随机数,所以被称为一种伪随机数。
伪随机数不是真正的随机数,是通过算法生成的随机数。
真正的随机数是无法预测的,
我们需要对rand函数进一步了解。
rand函数是对一个叫种子的基准值进行运算生成的随机数。
之所以每次运行的产生的随机数是一样的,那是因为rand函数随机数产生的默认种子是1,也就是()中数字为1
要得到不同的随机数,就是要让种子是变化的。
2.srand函数
这句话的意思是 在调用rand之前,使用srand函数为伪随机数生成器设定种子。
即在使用rand函数前,需要使用srand函数。
srand函数原型
而我们在使用srand函数时,我们要通过srand函数的参数seed来设置rand函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数就开始变化了。
也就是说如果srand的种子如果是随机的,rand就能生成随机数了;
但是我们回过头来想一想,在生成一个随机数,我们需要一个随机数,那么这就矛盾了。
所以我们需要用到下一个函数。
3.time函数
因为时间是时刻发生变化的,所以我们一般使用程序运行的时间作为种子的。
那么time这个函数就可以获得这个时间。
time这个函数的原型:
time这个函数会返回1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的
time函数需要包含的头文件:time.h
那么我们生成随机数的代码可以这样写:
我们可以发现两次运行结果不一样了,故达到了真正随机的效果。
注:在使用srand函数时是不要频繁调用的,只需要写一次就够了。
4.随机数的范围
在玩游戏的过程中,我们肯定不能在一个很大的范围中进行猜数字;所以我们就需要设置随机数的生成范围
1.生成0-99的随机数
余数是0-99;
2.生成0-100的随机数
3.生成a-b的随机数
生成a-b的随机数,首先我们生成0到b-a的数,即余数需要是0到b-a,故rand()%(b-a+1)
在加上a的时候,就可以生成a-b的随机数。
二,游戏实现
首先,我们根据上述内容写出所需要的头文件。
一款游戏需要很多东西,不仅仅是游戏功能上我们需要写,还有游戏菜单,游戏胜利失败界面等等。
我们可以做一个简单的游戏菜单界面。比如:
menu()
为了使我们可以反复进行游戏,不会使程序退出,我们可以加入循环。
因为后面涉及到了选择,所以我们加入switch语句
game()
当用户选择1时,进行游戏所以我们要写一个函数来进行游戏,我们把这个函数命名为game()
当玩家猜的数字不对时,我们要提醒玩家,猜大了还是猜小了,所以我们又要用到循环,
主函数:
当然我们还可以加上猜数字的次数限制,如果5次猜不出来,就算失败.
这个问题就交给读者自己了,我写的这个肯定不完美,也可以自行进行修改和补充。
游戏源码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("******************************\n");
printf("*****1.进入游戏***************\n");
printf("*****2.设置(敬请期待)********\n");
printf("*****3.退出游戏***************\n");
printf("******************************\n");
}
void game()
{
int randomnumber = rand() % 100 + 1;
int guessnumber = 0;
while (1)
{
printf("请猜数字:");
scanf("%d", &guessnumber);
if (guessnumber == randomnumber)
{
printf("恭喜你,猜对了\n");
break;
}
else if(guessnumber > randomnumber)
{
printf("猜大了\n");
}
else
{
printf("猜小了\n");
}
}
}
int main()
{
int input = 0;//
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:\n");
scanf("%d", &input);//接受玩家的输入
switch (input)
{
case 1:
system("cls");//清屏,避免字太多了
game();
break;
case 2:
printf("设置未完成,敬请期待!\n");
goto jieshu;
case 3:
printf("已退出!\n");
goto jieshu;
default:
printf("请输入恰达选项!\n");
break;
}
} while (input);
jieshu:
return 0;
}
点个赞,丘丘了!!!