#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
printf("*************************************\n");
printf("********** 1. play ************\n");
printf("********** 0. exit ************\n");
printf("*************************************\n");
}
void come()
{
int i = 0;
//生成一个随机数值。 生成随机数值的区间为0~Rand_Max之间。
// RAND_MAX; 值域为0~32767.
//当我们模上一个一百,所得到的余数就是0~99之间
//在此基础上我们+1就可以得到1~100之间的数字。
//这里提到可以在rand()函数后定义随机生成的数字的范围。
int ret = rand()%10000+1; //rand为生成随机数值的函数。
//printf("%d\n", ret);
//进入第二个阶段猜数字,
while (1)
{
printf("请输入数字");
scanf_s("%d", &i);
if (i > ret)
printf("抱歉,您猜大了\n");
else if (i < ret)
printf("抱歉,您猜小了\n");
else
{
printf("恭喜您,猜对啦!\n");
break;
}
}
}
//我们在设置一个变量或者指针的时候常常会初始化数值,
//例如int *p = NULL; 此时,这里的NULL就是空指针, 其本质上就是0; 在指针上使用NULL就是赋予指针变量一个地址编号为0的指针。
// int *a = 0;
int main()
{
int input = 0;
srand((unsigned int)time(NULL)); // 利用srand调用rand (),它会根据提供给srand ()的种子值返回一个随机数 (在0到RAND_MAX之间);
//又因为时间是一直在变的,我们给一个时间函数time,但是time的返回类型为time_t,我们利用强制转换,将time的返回类型改为unsigned int。
//又因为我们不需要每次都设置一个新的起点,所以这个函数在头文件内部。
//这里又涉及一个时间戳的概念,
do
{
game();
printf("请选择是否进行游戏");
scanf_s("%d", &input);
switch (input)
{
case 1:
come();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
}
while (input);
return 0;
}
这个就是我们猜数字游戏的源代码,我们从主函数中进行讲解,我们首先要想到,当我们进入到一个游戏的界面时就要进行选择,当我们选择了以后才会进行游戏,这个时候我们就可以用到do..while循环的语句,先do,再进行循环while,
我们创立一个game函数,在主函数外定义一个game函数,打印出游戏的选择菜单,
如上图所示,然后我们执行完game函数以后,就会打印出“请选择是否进行游戏”然后通过输入函数输入数字进行选择,
那么进行选择我们就需要一个变量,我们设置input变量,初始化为0;然后我们通过switch语句进行判断,
那么我们判断的依据就是input输入的数字,我们在switch括号内输入input,我们设置选择1,当我们输入1的时候,设置一个函数为come,也就是我们游戏的本体,
如果输入为0,我们就退出游戏,如果不是1,也不是0,我们就打印选择错误重新进行选择,
然后我们就要看循环语句中的while,如果input中为真,也就是说输入的数字为0,判断为真,我们就不再执行这一段循环语句,直接退出游戏。
如果我们输入的函数为非“0”,也就是为假,那么我们就执行循环语句,当然我们这个非“0”,其实就是为了重新选择,和再玩一局而设置的。
接下来就是我们这个游戏的本体,当我们进入come函数内部的时候可以看到,我们需要一个随机数值来作为我们猜的数字,那么在C语言中定义一个随机数值的方法为使用rand函数,
那么可以看到我们的rand函数的定义,生成一个随机的数值 ,我们rand的返回类型呢可以看到是int整形,在此基础上呢,我们还需要一个头文件,就是#include <stdlib.h>当我们引入这个头文件以后就可以正常运行rand函数,我们可以从下方看到,我们的rand函数可生成的范围在 0~RAND_MAX“之间,那么RAND_MAX的值为多少呢?
在这里我们右键点击转到定义,可以看到RAND_MAX的值为十六进制的0x7fff,那么进入我们的计算机就可以算出,
RNAD_MAX的值为32767,所以我们rand函数生成的数字为0~32767之间,
然后我们就需要定义rand 的范围,我们利用srand函数来定义rand的范围,利用srand调用rand (),它会根据提供给srand ()的种子值返回一个随机数 (在0到RAND_MAX之间);
我们又知道时间是一直在变的,我们设置一个时间函数time,
time函数可以获取系统的时间,在括号内我们可以看到(time_t *timer);可以看出我们的time函数是一个指针,当我们不需要括号内的指针时,可以给指针赋值为NULL,也就是设置一个空指针,又因为我们的time的函数返回值为time_t类型,我们又知道srand函数返回类型为unsigned int类型, 我们就将返回类型在括号内强制转换为unsigned int类型,就可以实现,在我们使用time函数的时候,就又需要一个头文件,为#include <time.h>。
当我们需要设置rand生成的函数随机范围,我们就可以在rand()后定义,假如我们设置1~100之间的数值,我们就可以模(%)一个100,得到的得数就在0~99之间,我们再加上一个1,就可以得到1~100之间的随机数字。
然后我们设置一个循环,使循环一直为真,就可以直接进入,而不需要判断,我们打印“请输入数字”,那么我们输入数字,就又需要一个变量,我们设置输入的数字变量 int i = 0;设置一个初始值,通过输入函数进行变量的赋值,然后我们就进行判断,如果我们输入的数值大于我们的ret中的随机值,就会输出,“抱歉,您猜大了”,如果小于我们的ret设置的随机值,就会输出“抱歉,您猜小了,”那么还有另外一种情况,我们就会输出,“恭喜您,猜对了”,然后退出我们的这个循环,这样就可以完美的实现我们的这个代码整体啦。
—————爱C++的小白