很多人一看到游戏两个字,就感觉很难,其实不然,这个程序很简单。
先来介绍一下游戏要求:
在键盘上输入1进入游戏,输入0退出游戏,进入游戏以后调用game函数进行游戏。在输入1后进入函数,先让系统生成一个随机数,你在键盘输入一个0-100之间的整数,如果大于随机数,输出“高了”,如果小于随机数,输出“低了”,如果等于这个随机数,输出“猜对了!”。
这里就有一个新的知识点了,随机数,在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数
rand()%100+1 不需要参数,它会随机生成一个位于1~ 100之间的整数。
rand() 函数是使用线性同余法做的,它并不是真的随机数,因为其周期特别长,所以在一定范围内可以看成随机的。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>
int shoumenu()
{
//打印一个初始页面,让用户看起来更直观一些
printf("==============================\n");
printf(" 欢迎来到随机数游戏 \n");
printf("输入1:进入游戏 \n");
printf("输入0:退出游戏 \n");
printf("==============================\n");
int choice = 0; //将choice初始化
printf("请输入你的选择:");
scanf("%d", &choice); //输入数字,选择你要进入游戏还是退出游戏
return choice; //返回这个数字
}
void Game()
{
printf("开始一局猜数字游戏\n");
int toguess = rand() % 100 + 1;// 随机数生成,表示在0-100之间随意生成一个数
while (true)
{
printf("请输入一个整数[1,100]:\n");
int intpum = 0; //这是用户输入的数字,先进行初始化
scanf("%d", &intpum);
if (intpum < toguess)
{ //输入的数字和随机生成的数字相互比较
printf("低了");
}
else if (intpum > toguess)
{
printf("高了\n");
}
else
{
printf("猜对了!\n");
break;
}
}
}
int main()
{
srand(time(0)); //随机数种子
while (true) //让函数可以反复执行,直到猜对,break;结束循环
{
int choice = shoumenu();
if (choice == 1)
{
Game();
}
else if(choice==0)
{
printf("Goodbye!\n");
break;
}
else
{
printf("输入有误,请重新输入:\n");
}
}
return 0;
}
在多次运行的时候,我们会发现一个问题,比如说第一次生成的随机数为42,你经过很多次输入,最终猜对了,在你第二次运行这个程序时,如果你输入42就可以直接猜对,这就很影响游戏的公平性,在这时我们就要引入两外一个函数:srand();
srand(seed) 为初始化随机数发生器,用于设置rand()产生随机数时的种子。为初始化随机数发生器,用于设置rand()产生随机数时的种子。传入的参数seed为unsigned int类型,通常我们会使用 time(0) 的返回值作为 seed,即srand(time(0)),此处得 time(0) 表示得是一个时间戳(大家想了解的话可以去百度搜一下),因为时间戳是一个变化的数,所以程序最后运行时那个数不可能一直是42,不可能是一个不变的数,游戏也就变得相对公平了。
time(0)要包含一个头文件#include<time.h>
而且srand()函数通常在main函数里面第一行位置