✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
通过一段时间的对C语言的认识,我们来检测一下吧!本篇用猜数字小游戏把对循环选择使用进一步加深,看看是否对你也有进一步的作用!
本文开始
说明:玩家自我输入一个值,电脑自我产生一个随机值,玩家根据提示内容判断,自己的值输入大了,还是小了,最终输入正确答案.
猜数字游戏
思路:
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<stdio.h>
//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,不会因此浪费掉太多时间.
在框架中我们只是通过文字代替了游戏的过程,现在我们来写一下这个程序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("%d\n", 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函数使用它我们还需要srand的函数
让我们再来看一些srand相关知识
srand函数使用到了时间戳,而时间戳使用time函数产生,然我们再了解一些知识吧!
使用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("%d\n", 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;
}
总代码:
通过本篇详细介绍的小游戏数字的过程,希望可以帮助到正在学习路上的你,如果感觉对你有帮助请给个赞鼓励一下吧!