- 前言
- ==文章重点==
- 1.游戏思路
- 2.构建游戏框架
- 2.1游戏初建
- 2.2设置game
- ==2.2.1如何生成随机数字==
- ==2.2.2玩家输入数字,判断输入大小==
- 猜数字小游戏总代码
- 总结
✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
- 编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。
前言
通过一段时间的对C语言的认识,我们来检测一下吧!本篇用猜数字小游戏把对循环选择使用进一步加深,看看是否对你也有进一步的作用!
本文开始
文章重点
- 随机值的产生与使用
- 循环和选择的使用
说明:玩家自我输入一个值,电脑自我产生一个随机值,玩家根据提示内容判断,自己的值输入大了,还是小了,最终输入正确答案.
2.构建游戏框架 2.1游戏初建猜数字游戏
思路:
1.计算机 生随机数字
2.设计游戏 , 玩家猜数字
3.判断 数字正确性:
如果猜大了,告知猜大了
如果猜小了,告知猜小了
如果猜对了,告知猜对了
对应游戏,我们该如何下手呢?
首先通过构建游戏主函数main的框架,能我们对游戏整体思路有更好的梳理.接下来让我们来看看吧!
提示:
-
menu(菜单):菜单告知我们开始游戏(1)还是退出游戏(0),进行选择的一种 提示意思
-
switch:根据switch作用,可根据输入的值input判断是否执行游戏
-
do while:不管是什么游戏,肯定需要我们先玩一次,do while复合这种规则
-
循环变量为什么使用input?:
①当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束
②当输入的除了0和1之外的整数时,会执行default然后break跳出switch,再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏
/#include//void menu() //{ // printf("*********************************n"); // printf("********** 1.play **********n"); // printf("********** 0.exit **********n"); // printf("*********************************n"); // //} //int main() //{ // //不管是什么游戏,肯定需要我们先进行一次(先玩一次),这里我们可以用到do while // // int input = 0; // do // { // //写个简易菜单告知我们开始游戏还是退出游戏 // // menu(); // printf("请选择 0/1>:"); // //输入0或1 // scanf("%d",&input); // //问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏 // switch (input) // { // case 1: // printf("猜数字游戏n"); // break; // // 这里只是用文字代替游戏,为了是先完成mian函数框架,一会会修改 // case 0: // printf("退出游戏,游戏终止n"); // break; // default : // printf("输入错误,请重新输入n"); // break; // } // } while (input); // //循环变量问什么时input? // //当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束 // //当输入的除了0和1之外的整数时,会default然后break跳出switch, // //再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏 // //所以不用担心输入错误 // return 0; //}
代码结果:
编程好习惯:对于一些较难编写的代码或者较长的代码,为了减少错误,我们通过 写一些步骤就编译 看自己是否出现错误,这样会减少自己的BUG,不会因此浪费掉太多时间.
2.2设置game在框架中我们只是通过文字代替了游戏的过程,现在我们来写一下这个程序game.
game包含两点:
- 生成随机数字
- 玩家输入数字,判断数字大小
这里我们要讲一下新的知识,生成随机数的函数rand,srand;
让我们通过game代码来看一下他们的使用.
void menu()
{
printf("*********************************n");
printf("********** 1.play **********n");
printf("********** 0.exit **********n");
printf("*********************************n");
}
//rand函数可以参数随机值
//它的返回值是一个0~RAND_MAX(32767)
//srand可以设置生成数的随机起点(初始化生成器)
void game()
{
int guess = 0;
//1.生成随机数字
//这里给大家介绍一下如何产生随机值
//使用到了rand函数
//srand中需要一个变化的整型数,这就涉及了时间戳
//时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值)
int ret = rand();
//printf("%dn", ret);
//我们打印看一下rand产生的随机值
//我们观察随机值发现,虽然产生了随机值
//但是每次玩游戏产生的随机值都是一样的,让人玩一次游戏就没有体验感
//所以我们考虑如何能每次玩游戏产生不同的值呢?
//2.玩家输入数字,判断数字大小
}
int main()
{
//不管是什么游戏,肯定需要我们先进行一次(先玩一次),这里我们可以用到do while
int input = 0;
//设置随机数的生成器
srand((unsigned int)time(NULL));
do
{
//写个简易菜单告知我们开始游戏还是退出游戏
menu();
printf("请选择 0/1>:");
//输入0或1
scanf("%d", &input);
//问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏
switch (input)
{
case 1:
game();
break;
//因为game函数太多内容,所以以函数调用形式使用,为了让代码更加整洁易懂
case 0:
printf("退出游戏,游戏终止n");
break;
default:
printf("输入错误,请重新输入n");
break;
}
} while (input);
//循环变量问什么时input?
//当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束
//当输入的除了0和1之外的整数时,会default然后break跳出switch,
//再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏
//所以不用担心输入错误
return 0;
}
- rand函数的参数是void ,返回值为整型,所以会产生不同的随机值
- 它的返回值是一个0~RAND_MAX(32767)
我们转到定义看到了RAND_MAX是十六进制数转换二进制数就为32767>
来看看他的代码结果你会发现什么呢?
是不是高兴的太早了,通过编译我们又发现了它的缺陷, 但是 每次生成的随机数都是一样的,我们每次玩游戏时,如何来生成不同的随机值?
再次观看rand函数使用它我们还需要srand的函数
让我们再来看一些srand相关知识
- srand:
①可以设置生成数的随机起点(初始化生成器)
②srand中需要一个变化的整型数,这就涉及了时间戳
③时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值
srand函数使用到了时间戳,而时间戳使用time函数产生,然我们再了解一些知识吧!
- srand:是生成随机数,需要time函数强制类型转换unsigned int类型
使用srand确实产生了随机数,但是在game函数中多次调用,输入过快也会产生一样的值,我们怎么解决呢?
我们都知道main函数是只调用一次的,所以我们一般都把srand函数放到主函数中,避免产生重复的值.
代码即将完工,我们只需要判断玩家的数字与电脑随机产生的数字的大小了,让我们尽快看一下吧!!!
猜数字小游戏总代码#include#include #include void menu() { printf("*********************************n"); printf("********** 1.play **********n"); printf("********** 0.exit **********n"); printf("*********************************n"); } //rand函数可以参数随机值 //它的返回值是一个0~RAND_MAX(32767) //srand可以设置生成数的随机起点(初始化生成器) void game() { int guess = 0; //1.生成随机数字 //这里给大家介绍一下如何产生随机值 //使用到了rand函数 //srand中需要一个变化的整型数,这就涉及了时间戳 //时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值) int ret = rand()%100+1; //因为随机太大了,%100转化为0~99的数 //printf("%dn", ret); //我们打印看一下rand产生的随机值 //我们观察随机值发现,虽然产生了随机值 //但是每次玩游戏产生的随机值都是一样的,让人玩一次游戏就没有体验感 //2.玩家输入数字,判断数字大小 while (1) { printf("请输入猜测的数:>"); scanf("%d", &guess); if (guess < ret) { printf("猜小了n"); } else if (guess > ret) { printf("猜大了n"); } else { printf("恭喜你,猜对了!!!n"); break; } } } int main() { //游戏,肯定需要我们先进行一次,这里我们可以用到do while int input = 0; //设置随机数的生成器 srand((unsigned int)time(NULL)); do { //写个简易菜单告知我们开始游戏还是退出游戏 menu(); printf("请选择 0/1>:"); //输入0或1 scanf("%d", &input); //问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏 switch (input) { case 1: game(); break; //因为game函数太多内容,所以以函数调用形式使用,为了让代码更加整洁易懂 case 0: printf("退出游戏,游戏终止n"); break; default: printf("输入错误,请重新输入n"); break; } } while (input); return 0; }
- 这里srand产生的值0~32767有的太大,不容易猜出,所以我们取100的余数,让所有数在小范围内,容易更好猜出
代码结果
总代码:
总结
通过本篇详细介绍的小游戏数字的过程,希望可以帮助到正在学习路上的你,如果感觉对你有帮助请给个赞鼓励一下吧!



