猜数字游戏初级及进阶玩法(含教学)

本文介绍了如何在编程中实现猜数字游戏,包括使用随机数生成、时间作为种子、菜单设计、逻辑框架、用户输入处理和游戏难度升级。作者逐步展示了从基础到进阶玩法的代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情指引

首先,我们需要知道,猜数字游戏的原理在哪里
在程序中,我们会给你一个随机数让你猜,并在大了、小了与正确之间徘徊。这时候,我们要解决的问题有哪些?随机数判断随机数与所猜数字的大小关系以及游戏最基础的逻辑框架结构

  • 首先解决的是随机数的问题
    我们知道rand()函数就是电脑用来生成随机数的,但是它还是不是绝对的随机数,它只是根据种子而生成随机数罢了,所以,如果要生成真正的随机数,那就要拥有真正随机的种子才可以
    所以,我们找到了srand函数,一个生成随机数种子的函数,而后,我们又发现了一个无需人为操作,自己就是随机数的东西:时间。所以,只要将随机数种子设为时间,那么rand函数生成的随机数,就是真正的随机数
    在这里插入图片描述
  • 再就是游戏的逻辑框架结构与判断随机数与所猜数字的大小关系
    是个人都知道,玩游戏需要有进入和退出的菜单才可以,就比如这样:在这里插入图片描述
    所以首先要设置一个menu函数,用来输出菜单
    然后呢,就是通过按键选择玩或是不玩。由于我们希望通过循环使玩家在玩完一局之后还可以再玩,所以我们选择使用循环结构与分支结构嵌套在一起
    因为以上缘故,我们特地将“玩”与“不玩”设置为选择“1”和“0”,这样在选择1的时候,会一直在里面循环,而选择0的话则是会结束循环,结束程序
    最后,游戏的核心程序,比较输入数与随机数的大小,利用if语句,让输入数大了的时候输出“大了”,而小了的时候输出“小了”,直到答对的时候输出“对了”,并退出循环,再次进入到游戏的主界面选择环节

知道了这些原理之后,我们就可以开始编写代码,并把它们组装到一起了

代码编写

  • 基础架构
//主函数
int main()
{
	srand((unsigned int)time(NULL));
	//随机随机数种子
	int input = 0;
	do
	{
		menu();//菜单
		printf("Please enter:");
		scanf("%d", &input);

		switch (input)
		{
		case 0:
			printf("Exit the guess number game\n");
			break;
			//退出游戏
		case 1:
			printf("Game start\n");
			game();
			break;
			//玩游戏
		default:
			printf("Error,again please\n");
			break;
			//输错了,重新输一遍
		}
	} while (input);

	return 0;
}
//菜单
void menu()
{
	printf("*************\n");
	printf("***1. play***\n");
	printf("***0. exit***\n");
	printf("*************\n");
}

//游戏函数
void game()
{
	int guess = rand() % 100 + 1;//1到100的随机数
	int num = 0;

	while (1)
	{
		printf("请输入猜测数:\n");
		scanf("%d", &num);

		if (num < guess)
			printf("小了\n");
		else if (num > guess)
			printf("大了\n");
		else
		{
			printf("It is right\n");
			break;
		}
	}
	
}
//头文件
#include<stdio.h>
#include<time.h>//time(NULL)需要引用
#include<stdlib.h>//srand和rand

显而易见,将这些组合起来之后就可以运行一个简单的猜数字游戏了,功能已经相当的完备。
所以,在后面,我将会给这个代码加上一点难度,让它变得更加复杂,也就是进阶玩法

  1. 限制次数
void game_two()
{
	int guess = rand() % 100 + 1;//1到100的随机数
	int num = 0;
	int count = 10;
	//表示有几次机会
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请输入猜测数:\n");
		scanf("%d", &num);

		if (num < guess)
			printf("小了\n");
		else if (num > guess)
			printf("大了\n");
		else
		{
			printf("It is right\n");
			break;
		}

		count--;//每选一次机会就变少
	}

	if (count == 0)
	{
		printf("Loser!");//机会用完,输了
	}
}
  1. 加上倒计时
void times(int n)
{
	for (int i = n; i >= 0; i--)//倒计时
	{
		printf("倒计时:%d\n", i);
		Sleep(1000);//一秒之后再输出
		system("cls");//每过一次就清除前一次的输出
	}
}
//这里要用到#include<Windows.h>
//这里如果想一边倒计时一边输入比较困难,需要用到多线程,笔者暂时还不会,如果有会输入线程的小伙伴欢迎来与我探讨

而如果想要包含这些模式进去,那么我们就需要考虑建立第二个菜单,也就是副菜单,包含几个模式的输入

//副菜单
void menu_two()
{
	printf("*************\n");
	printf("***1. easy***\n");//简单模式
	printf("***2. average***\n");//普通模式
	printf("***3 .difficult***\n");//困难模式
	printf("*************\n");
}

而主函数也会变成这个样子

//主函数
int main()
{
	srand((unsigned int)time(NULL));
	int input1 = 0;
	int input2 = 0;

	do
	{
		menu_one();
		printf("Please enter:");
		scanf("%d", &input1);
        //主要的变化在下面
		switch (input1)
		{
		case 0:
			printf("Exit the guess number game\n");
			break;
		case 1:
			menu_two();
			printf("Please enter:");
			scanf("%d", &input2);
			printf("Game start\n");
			switch (input2)
			{
			case 1:
				printf("简单模式开始\n");
				game_one();
				break;
			case 2:
				printf("普通模式开始\n");
				game_two();
				break;
			case 3:
				printf("困难模式开始\n");
				game_three();
				break;
			}
			break;//这里的break是为了防止前面的游戏结束之后,继续输出default的内容
		default:
			printf("Error,again please\n");
			break;
		}
	} while (input1);

	return 0;
}

以上就是笔者我对于猜数字游戏的一些粗略理解,如有更佳的方法或者更苦难的写法,欢迎大家一起来探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值