【C语言】猜数字小游戏(并讲解随机数相关知识)

news/2024/7/24 1:43:58 标签: c语言, 开发语言

前言

一、游戏菜单

二、游戏逻辑

1.用户选择

2.开始游戏

2.1 生成1~100的随机数

总结


前言

本文讲解使用C语言写一个猜数字小游戏(1~100),涉及到的语法为:循环、分支、随机数、函数


一、游戏菜单

一个游戏的最开始,往往是一个菜单,我们只需利用print函数,打印出一个简易菜单即可。

//游戏菜单
void menu()
{
	printf("******欢迎进入猜数字游戏******\n");
	printf("*********1、开始*************\n");
	printf("*********0、退出*************\n");
	printf("****************************\n");
}

二、游戏逻辑

1.用户选择

打印完菜单后,用户开始选择,在游戏逻辑中,无论是否开始游戏,都会运行一遍菜单,因此在这里使用do...while循环是最合适的。

int input = 0;
do
{
	menu(); //打印游戏菜单
	printf("请选择:>");
	scanf("%d", &input);
	switch (input)
	{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("无该选项\n");
			break;
	}
} while (input);

2.开始游戏

调用game()函数,在该函数可以分为两步:1、生成1~100的随机数;2、开始猜数字

2.1 生成1~100的随机数

生成随机数函数:rand();C语言规定,使用该函数需先定义一个随机数生成器:srand()

在MSDN上查找rand() 与 srand() 函数,看看它们的结构:

可以看到Remarks: The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand。意思为rand函数返回一个介于0到rand MAX范围内的伪随机整数。在调用rand之前,使用srand函数为伪随机数生成器提供种子。

rand()函数会生成0~rand_MAX之间的数,我们可以看看rand_MAX是什么:

RAND_MAX为32767的数,因此rand()会生成0~32767之间的数,我们再看看srand()函数:

该函数的参数,需要传递一个unsigned int 种子,这个种子需要是一个变化的值。我们来看看官方给的例子:

srand( (unsigned)time( NULL ) );

time()函数需要传递的参数为指针,返回值为一个time_t的指针,该指针为时间戳,下面我们看看时间戳的概念:

时间戳:当前时间点和计算机起始时间的一个差值,然后转换成秒

当然,使用这三个库函数也要包含对应的头文件:

stdlib.h --> rand、srand

time.h --> time

解释清楚后,我们该如何编写代码呢?

//游戏逻辑
void game()
{
	printf("游戏开始\n");
	//1、生成随机数
	//rand()函数(包含stdlib.h头文件) --> 生成随机数 --> 使用此函数需要先定义一个随机数生成器
	// srand(unsigned int 变化的数)
	int number = rand() % 100 + 1; //rand() % 某数 --> 0~某数-1 -->再进行+1 --> 1~某数
	int Num = 0;
	//2、猜数字
	while (1)
	{
		printf("请输入:>");
		scanf("%d", &Num);
		if (Num > number)
		{
			printf("猜大了!\n");
		}
		else if (Num < number)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

srand()函数生成一次就够了。当需要多次rand()时,不需要每一次都进行srand。如果每次rand都srand,则会导致生成的随机数不够随机,因此将srand定义在调用循环之前。

还有一点需要注意,关于生成1~100范围的随机数,对rand() % 最大范围 操作,可以生成0~最大范围-1 之间的数,再进行+1 则生成1~最大范围 的数。当需要自定义生成某一个范围之间的数时,可以这样做。

rand() % 100 +1

总结

好了,这就是用c语言简易版的猜数字小游戏,下面是完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//游戏菜单
void menu()
{
	printf("******欢迎进入猜数字游戏******\n");
	printf("*********1、开始*************\n");
	printf("*********0、退出*************\n");
	printf("****************************\n");
}
//游戏逻辑
void game()
{
	printf("游戏开始\n");
	//1、生成随机数
	//rand()函数(包含stdlib.h头文件) --> 生成随机数 --> 使用此函数需要先定义一个随机数生成器
	// srand(unsigned int 变化的数)
	int number = rand() % 100 + 1; //rand() % 某数 --> 0~某数-1 -->再进行+1 --> 1~某数
	int Num = 0;
	//2、猜数字
	while (1)
	{
		printf("请输入:>");
		scanf("%d", &Num);
		if (Num > number)
		{
			printf("猜大了!\n");
		}
		else if (Num < number)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}
//猜数字游戏
//范围1~100
int main()
{
	int input = 0;
	// srand往往只需调用一次,在一个程序调用多次会让随机数不够随机
	//包含stdlib.h头文件
	srand((unsigned int)time(NULL)); //time()-->包含time.h头文件函数会返回时间戳,是变化的
	do
	{
		menu(); //打印游戏菜单
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("无该选项\n");
				break;
		}
	} while (input);
	return 0;
}


http://www.niftyadmin.cn/n/5471268.html

相关文章

html的简单使用

1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Web应用课作业</title><meta name"…

Java 设计模式系列:备忘录模式

简介 备忘录模式是一种软件设计模式&#xff0c;用于在不破坏封闭的前提下捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定…

vue vue3直接运行dist打包文件

1、打包项目文件 npm run build2、进入dist打包文件 cd dist3、全局安装http-server npm install http-server -g4、启动dist文件(-p:端口。9008具体端口号) http-server -p 9008

Qt | Qt 的重要文件简介(推荐)

一、项目文件(pro 文件)及其语法 1、项目文件(pro 文件)的作用是列举项目中的源文件, 2、pro 文件的语法形式为:“变量 操作符 值”,比如 QT += widgets,多个值之间使用空格分开。 3、pro 文件的注释:从“#”开始,直至本行结束。 4、pro 文件的操作符见下表 5、pro 文…

如何保护您的企业免受人工智能生成的深度伪造品的侵害

最近&#xff0c;网络犯罪分子利用一家跨国公司高管的“深度伪造”视频&#xff0c;说服该公司驻香港的员工汇出 2560 万美元。 根据包含多个 Deepfake 的视频电话会议&#xff0c;员工认为是他们驻英国的首席财务官要求转移资金。 据报道&#xff0c;警方已逮捕六名与该诈骗案…

三足鼎立 PTA(25分)

目录 题目 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 样例解释&#xff1a; 题解 C code Java code 题目 当三个国家中的任何两国实力之和都大于第三国的时候&#xff0c;这三个国家互相结盟就呈“三足鼎立”之势&#…

安卓APP的技术质量:如何提高

安卓APP的技术质量:如何提高 技术质量包括稳定性和性能,还有资源工具化程序.你的APP 的技术质量能够影响你的用户体验.一个高质量的体验不仅 最小化了技术问题的存在,而且也最大化地利用了安卓操作 系统和设备硬件的能力. 为了构建一个高质量的APP,遵循如下的指导原则: 形式因…

【Canvas与艺术】绘制铜质蓝底五周年(Five Years Anniversary)徽章

【关键点】 利用二次贝塞尔曲线生成环形波纹轮廓。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>铜质五周年徽…