【C语言】猜数字游戏

简介: 现在很多游戏都有抽奖抽卡的功能,其实这个就类似于猜数字,生成一个随机数,然后你去猜,猜对了就得奖。猜到一定次数就会保底。要实现猜数字的小游戏,首先是要让程序生成随机数,这就要用到rand、srand和time这三个函数,其次要了解时间戳。

前言


现在很多游戏都有抽奖抽卡的功能,其实这个就类似于猜数字,生成一个随机数,然后你去猜,猜对了就得奖。猜到一定次数就会保底。要实现猜数字的小游戏,首先是要让程序生成随机数,这就要用到rand、srand和time这三个函数,其次要了解时间戳。


rand函数


先看一下下面这张图:

11.png

通过这张图我们可以了解到rand函数的返回值是int类型,形参为空,它的头文件<stdlib.h>以及它的返回值范围是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,转换成二进制就是32767.所以rand返回的随机数的范围就是0到32727。

其实我们用rand函数就可以生成随机数了,那为什么我们还要用到srand函数呢?

因为只有第一次生成的随机数是随机的,如果程序执行多次,那第二次之后生成的随机数就会和第一次生成的一样。这是一种伪随机。

12.png

因此只用到rand函数是不够的,我们要用rand函数之前,先用strand函数。


srand函数


13.png

看一下strand函数,返回值为void,形参是int类型的数据,要用strand函数,首先要给strand传一个int类型的数据,根据传进去的值不同,生成的随机数也不同。但是这样就矛盾了。生成一个随机数之前首先要传进去一个随机数,为了解决这个问题,就要使用时间戳。

时间戳


14.png

我们无法给它一个随机数,但是我们可以用时间作为参数传进去,时间是变的,这样生成的随机数也就是变的。怎么获得时间戳呢?C语言也为我们提供了一个time函数可以帮助我们获得时间戳。

15.png

time的头文件是<time.h>,time的函数原型有点复杂,看不懂没关系,会用就行。我们只是要把time的值作为参数传给strand函数。strand的形参是unsigned int类型的,而time的返回值是time_t类型的,我们可以强制类型转换。time的形参是指针类型的参数,我们用NULL就可以了。

srand((unsigned int)time(NULL));

解决完这个问题,我们还要解决rand生成随机数的范围的问题,我们如果要获得一个1~N之间的数的话,就要对生成的随机数对N进行取余+1.为了方便猜数字,生成的随机数范围就控制在1到100.猜数字不是一次就能才对的,猜不对就要一直猜,猜对了才退出。下面是完整代码。


完整代码+程序运行图


#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void menu()

{

printf("|-------------------|\n");

printf("|-----1.玩游戏------|\n");

printf("|-----0.退出--------|\n");

printf("|-------------------|\n");

}

void game()

{

int ret = rand()%100+1;

int m = 0;

while (1)

{

 scanf("%d", &m);

 if (m > ret)

 {

  printf("猜大了!\n");

 }

 else if (m < ret)

 {

  printf("猜小了!\n");

 }

 else

 {

  printf("恭喜你,猜对了!\n");

  break;

 }

}

}

int main()

{

srand((unsigned int)time(NULL));

int n = 0;

do

{

 menu();

 printf("请选择:");

 scanf("%d", &n);

 switch (n)

 {

 case 1:

  printf("开始猜数字\n");

  game();

  break;

 case 0:

  printf("已退出\n");

  break;

 default:

  printf("选择错误,请重新选择\n");

  break;

 }

} while(n);

return 0;

}

程序运行图如下:

16.png

相关文章
|
4月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
124 8
|
5月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
167 0
|
4月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
111 2
|
4月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
57 1
|
5月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
130 1
|
5月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
121 2
|
5月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
140 1
|
5月前
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
5月前
|
存储 算法 安全
C语言实现扫雷游戏
C语言实现扫雷游戏
|
5月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
115 1