【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;
}

相关推荐

  1. c语言数字游戏

    2024-04-06 21:10:01       44 阅读
  2. C语言数字游戏

    2024-04-06 21:10:01       42 阅读
  3. C语言数字游戏智能版

    2024-04-06 21:10:01       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 21:10:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 21:10:01       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 21:10:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 21:10:01       20 阅读

热门阅读

  1. 谈谈Python中的正则表达式及其用法。

    2024-04-06 21:10:01       22 阅读
  2. 在MacOS上安装Homebrew:初学者指南

    2024-04-06 21:10:01       28 阅读
  3. js的some函数

    2024-04-06 21:10:01       21 阅读
  4. 【面经】3月29日 美团/美团平台/后端/一面/1h

    2024-04-06 21:10:01       19 阅读
  5. tomcat 知多少

    2024-04-06 21:10:01       18 阅读
  6. 新概念英语1:Lesson 19 学习笔记

    2024-04-06 21:10:01       21 阅读
  7. git使用

    git使用

    2024-04-06 21:10:01      14 阅读
  8. Swagger介绍与knife4j框架

    2024-04-06 21:10:01       13 阅读