运用C语言知识,实现一个简简单单的猜数字游戏。
一、游戏规则
- 由电脑随机生成一个101~200之间的随机数;
- 玩家根据提示进行猜数字,在5次机会内猜对,获得游戏胜利,否则,游戏失败!
二、实现代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
* 猜数字游戏
*
* 游戏规则: 1. 由电脑随机生成一个101~200之间的随机数;
* 2. 玩家根据提示进行猜数字,在5次机会内猜对,获得游戏胜利,否则,游戏失败!
*/
void menu()
{
printf("**********************\n");
printf("** 游戏菜单 **\n");
printf("**********************\n");
printf("** 1.Start game **\n");
printf("** 2.Exit game **\n");
printf("**********************\n");
}
void game() {
// 1.生成101~200之间的随机数
int r = 100 + rand() % (100 + 1);
// 2.猜数字过程
int guess = 0;
int count = 5;
while (count)
{
printf("你还有%d次机会,请输入你猜的数字:",count);
scanf("%d", &guess);
if (guess > r)
{
printf("你猜大了\n");
}
else if (guess < r)
{
printf("你猜小了\n");
}
else
{
printf("恭喜你,猜对了!\n");
break;
}
count--;
}
if (count==0)
printf("游戏失败,正确的值是:%d\n",r);
}
int main()
{
int input = 0;
// time(NULL); 返回一个时间戳
srand((unsigned int)time(NULL)); // 初始化随机数,使rand()函数生成的值不固定,为真随机值
do {
menu(); // 调用menu函数
printf("是否开始游戏:");
scanf("%d", &input);
switch (input) {
case 1:
game(); // 调用game函数
break;
case 2:
printf("游戏结束!\n");
break;
default:
printf("输入错误,请选择数字1 or 2 !\n");
break;
}
if (input == 2)
{
input = 0;
}
} while (input);
return 0;
}
运行截图:
三、rand()函数介绍
(1)rand()函数
C语言提供了一个rand()函数,用来生成一个伪随机数,其返回值为整型,使用时需包含头文件<stdlib.h>。
语法:
int n = rand();
rand()函数会返回⼀个伪随机数,该随机数的范围是在0~RAND_MAX之间,而RAND_MAX的大小是依赖编译器上实现的,在大部分编译器上是32767。在Visual Studio中,可通过下图方式查看编译器中的RAND_MAX的大小:
伪随机数:程序第一次执行rand()函数生成随机数后,再次运行,其随机值会与第一次值保持一致,不管运行几次,都不会发生变化,即此时的值为伪随机数。欲使其生成不同的随机数,则需使srand()函数里的参数seed发生变化即可。
(2)srand()函数
C语言中提供了一个srand()函数,用来初始化随机数的生成器,无返回值,使用时需包含头文件<stdlib.h>。
srand()的原型如下:
void srand (unsigned int seed);
当srand()函数里的seed参数发生变化时,就会使rand()函数生成的值不固定,为真随机值。欲使seed参数发生变化,只需传入一个时间戳即可。
(3)time
C语言中提供了一个time()函数,返回的类型为time_t类型(本质上其实就是32位或者64位的整型类型),使用时需包含头文件<time.h>。
time()原型如下:
time_t time (time_t* timer);
time()函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的
差值,单位是秒。如果timer参数为NULL,则time()函数就只返回这个时间的差值,返回的这个时间差也被叫做:时间戳。
所以想要让rand()函数生成真随机值,需在代码中加入这样一行代码:
srand((unsigned int)time(NULL));
注:srand函数不需要频繁调用,⼀次运行的程序中调用一次即可
(4)设置随机数的范围
生成0~99之间的随机数:
rand() % 100; // 余数的范围为 0~99
生成1~100之间的随机数:
rand()% 100 + 1; // rand() % 100 的余数是0~99, 0~99的数字+1,范围是1~100
⽣成100~200的随机数:
100 + rand()% (200 - 100 + 1) ; // 余数的范围是0~100,加100后就是100~200
⽣成a~b的随机数:
a + rand() % (b - a + 1);