学了这么久的C语言,写了很多的程序,今天我们来尝试用C语言写个简单的游戏。
猜数游戏,故名思及首先要有一个数,这个数是我们不知道的,然后我们根据提示去慢慢的猜这个数的大小。
1.设定选择页面
void menu()
{
printf("*******************\n");
printf("***** 1.Play ******\n");
printf("***** 2.Exit ******\n");
printf("*******************\n");
}
我们首先需要一个界面,方便来选择开始还是退出,我们可以直接把他写在主函数中,
当然可以的自定一个函数然后在主函数里面调用
2.写主函数
int main()
{
menu();
int a = 0;
scanf("%d", &a);
do
{
switch (a)
{
case 1:
game();
break;
case 2:
a = 0;
printf("请退出...");
break;
defatlt:
printf("输入错误,请重现输入..");
}
} while (a);
return 0;
}
首先我们先来定义主函数,通过获取值来决定开始游戏
3.写游戏内容
1.rand( )函数
因为是猜数游戏,所以我们需要获取一个随机的数,我们最好还要控制一下数的大小范围,可以便于我们去猜,在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机值rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。
RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大值。C语言标准并没有规定 RAND_MAX 的具体数值,只是规定它的值至少为 32767。在实际编程中,我们也不需要知道 RAND_MAX 的具体值,就把他当作一个很大的值。
但是rand()生成的随机数并不是真正意义上的随机数,其实是一种伪随机数是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布。
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
2.srand( ) 函数
srand( )函数用于给rand()函数设定种子。
它需要一个 unsigned int(无符号整型) 类型的参数。在实际开发中,我们可以用时间作为参数,只要每次播种的时间不同,那么生成的种子就不同,最终的随机数也就不同。
使用 <time.h> 头文件中的 time() 函数即可得到当前的时间(精确到秒)
srand((unsigned)time(NULL));
然后我们就可以把种子定义在主函数种,然后rand( )函数在我们自定义的函数中使用来完成我们随机数的产生
然后我们可以在定义一个外部文件来实现我们的游戏先传一个我们随机生成的参数
然后再通过game.h文件传过去
实现游戏的函数
NumGuess(int ret)
{
int a = 0;
while (1)
{
scanf("%d", &a);
if (a > ret)
{
printf("猜大了\n");
}
else if(a < ret)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
}
}
循环条件是1这样我们就可以一直猜下去直到猜出来为止,不妨我们给游戏加上一些难度通过限制猜数的次数,每次没猜中在告诉还要几次机会再上点压力
NumGuess(int ret)
{
int count = 5;
int a = 0;
while (count)
{
printf("开始猜数,你只有五次猜数机会");
scanf("%d", &a);
if (a > ret)
{
printf("猜大了\n");
printf("剩余%d次机会\n",count - 1);
}
else if(a < ret)
{
printf("猜小了\n");
printf("剩余%d次机会\n", count - 1);
}
else
{
printf("恭喜你猜对了\n");
printf("共猜了%d次", 5 - count);
break;
}
count--;
}
if (count == 0)
{
printf("猜失败了,正确的数字是:%d\n", ret);
}
}
这样我们就可以完美实现我们的猜数游戏了