1、游戏要求
1、生成一个1~100的随机数
2、玩家输入数字,对随机数进行判断,看它猜大了、还是猜小了,猜对了
3、如果不过瘾,那在玩一遍;
2、rand函数
C语言给我们提供了一个生成随机数的函数,叫rand;
int rand(void);
不用给rand函数任何参数;它返回的是一个整型;
rand函数会返回一个伪随机数,这个伪随机数的范围是0~RAND_MAX(32767);注意,伪随机数并不是一个真正的随机数,rand函数会根据一个叫“种子”的基准值来进行运算生成随机数的;
注意我们使用rand函数需要包含头文件;#include<stdlib.h>
注意,调用rand函数,它默认的种子是1;
通过上面的案例,我们可以看到怎么生成第二次的随机数是一样的呢?
因为rand函数默认种子是1;每次都是按照种子1来运算生成随机数,所以每次生成的随机数都是一样的。
那我们想让它生成不同的随机数,是不是生成不同的种子就行了?生成不同的种子,rand函数也就按照不同的种子运算生成不同的随机数了
3、srand函数
C语言提供一个srand函数,可以设置种子;初始化生成随机数的生成器;
void srand (unsigned int seed)
没有返回值,它的参数类型是无符号整型,通过改变seed,生成不同的种子;
通过上面的两次生成随机数,我们得知它跟上次的的随机数是不一样了;但是生成第二次的时候,生成随机数又一样了;因为虽然我们用srand函数设置种子,但是你设置的这个种子2,那下一次也还是这个种子2,没有变,所以生成的随机数也还是一样的;
那我们让srand函数每次生成不一样的种子不就行了吗?那我们在srand函数给一个变化的值,想一下在电脑中哪一个是变化的呢?是时间!
4、time函数
在C语言我们一般用时间做种子,因为每时每刻都在变化。
C语言提供一个叫time的函数,可以获取电脑的时间;
time_t time(time*timer)
time函数会返回一个时间差,也叫时间戳,也就是电脑的起始时间到现在时间的差值;
time函数的返回类型是time_t类型,time_t本质上是一个32位或者64位的一个整型;它的参数是指针,但是我们不管,我们只想要它的返回值,那我们就给它一个空指针——NULL
注意time函数,需要包含头文件;#include<time.h>
这样我们每次生成的随机数就不一样了;注意我们的游戏要求是生成1~100的随机数;
那我们可以这样做:
5、基本框架
1、我们要求不过瘾,那就再玩一遍;那用do....while循环,先玩一遍再说,不过瘾再玩一遍或者玩了一遍,退出;
2、玩游戏,给一个游戏选项菜单,选择哪一个选项;输入进去input变量;然后再根据input变量里的选项,去选择对应的功能,1玩游戏,0退出,如果输入其他的选项,那就是输入错误,重新选择;我们这里就用到switch选择语句;do...while的循环变量是input;大家琢磨琢磨;
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int input = 0;
do
{
printf("**************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("**************************\n");
printf("请选择:>");
scanf("%d",&input);
switch (input)
{
case 1:
printf("猜数字\n");
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
那我们为了代码简洁,高效;我们把菜单用函数封装起来
void meun ()没有返回值,只是打印菜单;
我们游戏想要实现,那实现游戏的代码可能很长,如果全部放在主函数里,那就会很冗长,不好看,检查代码也麻烦;我们就照猫画虎,也封装成一个函数,没有返回值;
void game()
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
meun();//调用菜单函数
printf("请选择:>");
scanf("%d",&input);
switch (input)
{
case 1:
game();//调用游戏函数
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
菜单函数
void meun()
{
printf("**************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("**************************\n");
}
6、游戏实现
我们要实现游戏的代码用函数game封装起来,首先我们先生成1~100的随机数,然后我们就猜数字;那我们猜数字不一定一次猜中,可能要猜多次;那我们用while循环;输入我们猜的数字;进行 比较得出结果,然后打印,如果猜小了或者猜大了,就继续,如果猜对了,brake;跳出循环游戏结束。
void game()
{
//生成1~100的随机数
int r = rand() % 100 + 1;
int guess = 0;
//猜数字
while (1)
{
printf("猜数字\n");
scanf("%d",&guess);
if (guess > r)
printf("猜大了\n");
else if (guess < r)
printf("猜小了\n");
else
{
printf("恭喜你猜对了,正确的数字是%d\n",r);
break;
}
}
}
我们也可以给游戏增加点难度,只给你5次机会;
5次机会,就是你输入5次都没有猜对,那循环变量就是count;循环5次,每一次count--;循环结束,跳出循环,另外猜对了,也是break跳出循环,但是break跳出循环count肯定是小于5的;循环结束是count==0的;那我们再循环外再做一个判断,如果你5次都没猜对;那就给一个说明;
void game()
{
//生成1~100的随机数
int r = rand() % 100 + 1;
int guess = 0;
//猜数字
int count = 5;//5次机会
while (count)
{
printf("你还剩%d的机会\n",count);
printf("猜数字\n");
scanf("%d",&guess);
if (guess > r)
printf("猜大了\n");
else if (guess < r)
printf("猜小了\n");
else
{
printf("恭喜你猜对了,正确的数字是%d\n",r);
break;
}
count--;
}
if (count == 0)
{
printf("机会用完,游戏结束,正确的答案是%d\n",r);
}
}
游戏结束!
感谢观看!感谢指正!