猜数字游戏开发指南:实现效果、难度设置与战绩查询模块详解

猜数字游戏开发指南:实现效果、难度设置与战绩查询模块详解

[id_1[id_1648941260]9618137]

我们在写任何一个小项目之前先要明确自己要实现的效果

所以猜数字游戏能实现什么效果呢?

猜数字游戏顾名思义,系统会随机生成一个数字,然后由玩家进行猜测,接着系统会反馈猜大了还是猜小了的信息,通过逐一减少默认数字的范围,最终能够锁定目标。

其实简单的猜数字游戏到这里的话就已经可以了

但是我们可以增加一些其他的功能

首先我们可以再设置一下游戏的难度

除了增加游戏的难度以外,还可以再增加战绩查询模块

游戏结构

清楚的知道了想要实现的目标,那我们开始搭建逻辑结构.

所以逻辑结构是啥呢?

代码实现

我们应该有一个游戏菜单,其目的是实现游戏的基本功能。通过这个菜单,玩家能够选择进入游戏或者退出游戏。为了让这个游戏可以反复玩,这个过程需要是一个循环。当玩家选择退出游戏时,就会打破这个循环。

我们定义唯一的主函数,目的是让代码具有条理性。接着按功能编写子函数,使每一个子函数都有其意义。

[id_101784100]

主函数

程序从主函数开始运行,到主函数结束时结束。因此,主函数应当起到搭建整个游戏基本框架的作用。

代码如下:

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		
		switch (input)
		{
		case 0:
			printf("成功退出游戏\n");
			break;
		case 1:
			game(); //玩游戏函数
			save(); //保存战绩函数
			break;
		case 2:
			find(); //查询战绩函数
			break;
		default:
			printf("输入错误,请重新输入!\n");
		}
	} while (input);
	return 0;
}

菜单函数

菜单功能十分简单

代码示例如下:

void menu()
{
	printf(欢迎来到我的游戏世界。);
	printf(请明确具体的横线下的句子内容呀,没有看到具体要改写的句子呢。);
	printf(退出游戏。);
	printf(开始进行游戏。);
	printf(查询战绩。);
	printf("*******************************************************\n");
}

游戏函数

玩家选好游戏模式之后,电脑首先会给出一个数字,这个数字是玩家需要去猜的,而这个数字的范围是 1 到 1000 。

玩家开始进行猜测。如果猜得偏大,系统就会给出“猜大了”的提示;如果猜得偏小,系统就会给出“猜小了”的提示。

并且每猜测一次,都会提示还剩余几次机会

为了使整个游戏看起来比较生动,我用了一些比较搞怪的话哈哈哈

void game()
{
	srand(time(NULL)); //随机数生成器
	int r = rand() % 1001; r 除以 1001 所得余数所对应的随机数范围在 1 与 1000 之间。
	int input = 0; //input 代表你输入的猜测的数字
	int num = 0; //num代表猜测剩余次数
	num = model(); //游戏模式函数
	while (1)
	{
		printf("\n请输入你猜的数字(0-1000):> ");
		scanf("%d", &input);
		if (num == 0)
		{
			break;
		}
		if (input > r)
		{
			printf("\n猜大了,再猜猜\n");
		}
		else if (input < r)
		{
			printf("\n猜小了,再猜猜\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		num--;
		printf("\n加油,你还剩余%d次机会哟\n", num);
	}
	if (!num)
	{
		printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
		computer++; //标记电脑的战绩
	}
	else
	{
		printf("你真的太棒了!!!\n");
		player++; //标记玩家战绩
	}
	printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}

关于随机数

生成随机数的方法:

C语言生成随机数要用rand函数

使用 rand()函数单独生成随机数是不可行的。因为它每次运行时生成的随机数都是一样的,这意味着随机数并不随机。所以需要借助 srand()函数,种下一个随机种子,从而产生随机数。

因为时间每时每刻都在发生变化,所以能够利用 time()时间函数来生成种子。

这里的 time_t 类型在 C 语言中被定义为长整型。srand()函数的参数类型是 unsigned int(无符号整形),使用时需进行强制类型转换。time()函数不需要设置参数,可用 NULL 来代替。

游戏模式函数

int model()
{
	int i = 0;
	int num = 0;
	printf(请输入游戏模式,有以下几种:一是简单,二是普通,三是困难。请选择相应的模式:>);
	scanf("%d", &i);
	if (i == 1)
	{
		easy();
		num = 25;
	}
	else if (i == 2)
	{
		medium();
		num = 15;
	}
	else
	{
		hard();
		num = 5;
	}
	return num;
}

保存战绩函数

这个的目标是无论啥时候打开游戏,都会记录之前玩过的成绩

void save()
{
	FILE* fp = fopen("grade.txt", "w");
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fprintf(fp, "computer 与 player 的比例为 %d 比 %d 。", computer, player);
	}
	fclose(fp);
}

查询战绩函数

void find()
{
	FILE* fp = fopen("grade.txt", "r");
	int a = 0, b = 0;
	char p[60] = { 0 };
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fgets(p, 60, fp);
		printf("%s\n", p);
	}
	fclose(fp);
	printf("是否继续游戏?\n");
}

整体代码

#include 
#include 
#include 
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
void menu()
{
	printf("\n************Welcome To My Game's World*****************\n");
	printf("*******************************************************\n");
	printf("*******************  0. 退出游戏  *********************\n");
	printf("*******************  1. 开始游戏  *********************\n");
	printf("*******************  2. 查询战绩  *********************\n");
	printf("*******************************************************\n");
}
int model()
{
	int i = 0;
	int num = 0;
	printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
	scanf("%d", &i);
	if (i == 1)
	{
		num = 25;
	}
	else if (i == 2)
	{
		num = 15;
	}
	else
	{
		num = 5;
	}
	return num;
}
void game()
{
	srand(time(NULL));
	int r = rand() % 1001;
	int input = 0; //input 代表游戏猜测的数字
	int num = 0; //num代表猜测剩余次数
	num = model(); //游戏模式函数
	while (1)
	{
		printf("\n请输入你猜的数字(0-1000):> ");
		scanf("%d", &input);
		if (num == 0)
		{
			break;
		}
		if (input > r)
		{
			printf("\n猜大了,再猜猜\n");
		}
		else if (input < r)
		{
			printf("\n猜小了,再猜猜\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		num--;
		printf("\n加油,你还剩余%d次机会哟\n", num);
	}
	if (!num)
	{
		printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
		computer++; //标记电脑的战绩
	}
	else
	{
		printf("你真的太棒了!!!\n");
		player++;
	}
	printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}
void find()
{
	FILE* fp = fopen("grade.txt", "r");
	int a = 0, b = 0;
	char p[60] = { 0 };
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fgets(p, 60, fp);
		printf("%s\n", p);
	}
	fclose(fp);
	printf("是否继续游戏?\n");
}
void save()
{
	FILE* fp = fopen("grade.txt", "w");
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fprintf(fp, "computer : player = %d : %d\n", computer, player);
	}
	fclose(fp);
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		
		switch (input)
		{
		case 0:
			printf("成功退出游戏\n");
			break;
		case 1:
			game(); //玩游戏函数
			save(); //保存战绩函数
			break;
		case 2:
			find(); //查询战绩函数
			break;
		default:
			printf("输入错误,请重新输入!\n");
		}
	} while (input);
	return 0;
}

动画演示

我们来看下游戏运行的效果把!!!

其实到了这里的话就基本已经完工了!!!

但是,我认为选择模式较为单调。我想要一些不同的东西,于是,特别的操作出现了!

升级版

我在游戏模式的函数 model()之中,于对应的简单模式里添加了一个函数,于对应的普通模式里添加了一个函数,于对应的困难模式里添加了一个函数。

当你选择简单模式时,屏幕会进行清屏操作。接着,屏幕会慢慢地打印出一句欢迎语。就如同这样!

普通和困难模式也一样

我们来看看效果!

简单模式函数

void easy()
{
	char arr1[] = 游戏即将进入简易模式。;
	char arr2[] = 请明确指出具体的“####################################”内容呀,没有具体的句子怎么进行改写呢?;
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("只有菜鸡才会选择简单模式!\n");
	return 0;
}

普通模式函数

void medium()
{
	char arr1[] = ;
	char arr2[] = 请提供具体的需要改写的句子呀,你只给了“"######################################"”,没有实际内容呢。;
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("哎哟!你终于不玩简单模式了呀?\n");
	return 0;
}

困难模式函数

void hard()
{
	char arr1[] = ;
	char arr2[] = "####################################";
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("这可不是一般的难哦!拿出你的实力让我看看吧!\n");
	return 0;
}

注意:需要引用头文件:#include

添加游戏模式函数

int model()
{
	//char str[20] = { 0 };
	int i = 0;
	int num = 0;
	printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
	scanf("%d", &i);
	if (i == 1)
	{
		easy(); //简单模式函数
		num = 25;
	}
	else if (i == 2)
	{
		medium(); //普通模式函数
		num = 15;
	}
	else
	{
		hard(); //困难模式函数
		num = 5;
	}
	return num;
}

升级版完整代码

#include 
#include 
#include 
#include 
int computer = 0; //电脑的战绩
int player = 0; //玩家的战绩
void menu()
{
	printf("\n************Welcome To My Game's World*****************\n");
	printf("*******************************************************\n");
	printf("*******************  0. 退出游戏  *********************\n");
	printf("*******************  1. 开始游戏  *********************\n");
	printf("*******************  2. 查询战绩  *********************\n");
	printf("*******************************************************\n");
}
void easy()
{
	char arr1[] = "The Game is about to enter easy mode";
	char arr2[] = "####################################";
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("只有菜鸡才会选择简单模式!\n");
}
void medium()
{
	char arr1[] = "The Game is about to enter medium mode";
	char arr2[] = "######################################";
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("哎哟!你终于不玩简单模式了呀?\n");
}
void hard()
{
	char arr1[] = "The Game is about to enter hard mode";
	char arr2[] = "####################################";
	int left = 0;
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//睡眠函数-单位是毫秒
		system("cls");//执行系统命令的
		left++;
		right--;
	}
	printf("这可不是一般的难哦!拿出你的实力让我看看吧!\n");
}
int model()
{
	int i = 0;
	int num = 0;
	printf("请输入游戏模式:1.简单  2.普通  3.困难\n请选择相应的模式:> ");
	scanf("%d", &i);
	if (i == 1)
	{
		easy();
		num = 25;
	}
	else if (i == 2)
	{
		medium();
		num = 15;
	}
	else
	{
		hard();
		num = 5;
	}
	return num;
}
void game()
{
	srand(time(NULL));
	int r = rand() % 1001;
	int input = 0; //input 代表游戏猜测的数字
	int num = 0; //num代表猜测剩余次数
	num = model(); //游戏模式函数
	while (1)
	{
		printf("\n请输入你猜的数字(0-1000):> ");
		scanf("%d", &input);
		if (num == 0)
		{
			break;
		}
		if (input > r)
		{
			printf("\n猜大了,再猜猜\n");
		}
		else if (input < r)
		{
			printf("\n猜小了,再猜猜\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		num--;
		printf("\n加油,你还剩余%d次机会哟\n", num);
	}
	if (!num)
	{
		printf("\n闯关失败,你不行啊!简直弱爆了!!!\n");
		computer++; //标记电脑的战绩
	}
	else
	{
		printf("你真的太棒了!!!\n");
		player++;
	}
	printf("\n你是否还想继续游戏呢?\n"); //这一步是提醒玩家是否继续
}
void find()
{
	FILE* fp = fopen("grade.txt", "r");
	int a = 0, b = 0;
	char p[60] = { 0 };
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fgets(p, 60, fp);
		printf("%s\n", p);
	}
	fclose(fp);
	printf("是否继续游戏?\n");
}
void save()
{
	FILE* fp = fopen("grade.txt", "w");
	if (fp == NULL)
	{
		exit(-1);
	}
	else
	{
		fprintf(fp, "computer : player = %d : %d\n", computer, player);
	}
	fclose(fp);
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		
		switch (input)
		{
		case 0:
			printf("成功退出游戏\n");
			break;
		case 1:
			game(); //玩游戏函数
			save(); //保存战绩函数
			break;
		case 2:
			find(); //查询战绩函数
			break;
		default:
			printf("输入错误,请重新输入!\n");
		}
	} while (input);
	return 0;
}

动画演示

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

88阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读