C语言——扫雷游戏实现(超详解)

目录

一、扫雷游戏规则与实现思路

1、游戏概述

2、游戏规则描述:

3、游戏实现思路

二、模块化代码实现

1、创建主函数main()

2、创建菜单函数

 3、创建游戏函数game()

①棋盘的设置

②棋盘的初始化

③打印棋盘

④雷的布置

⑤雷的排查

三、全部源码

四、总结


一、扫雷游戏规则与实现思路

1、游戏概述

扫雷游戏想必大家应该都玩过吧,这个游戏的目标呢就是在一个 9x9 的棋盘上找出所有没有地雷的格子,而不踩到地雷。当然这个9×9只是一个初级玩法,棋盘大小和雷的数量是可以随便设置的,有那种电脑满屏的模式,但是我没去尝试过,一般玩的都是初级9×9的模式,而本篇文章也主要说的是9×9扫雷游戏的实现。

扫雷游戏网页版 - Minesweeper

2、游戏规则描述:

  1. 棋盘上的某些格子里有地雷,其他格子是空白的。
  2. 游戏开始时,棋盘上会有一些数字,这些数字表示周围 8 个格子中地雷的数量。
  3. 通过点击格子,如果格子是空白的,则会打开该格子;如果格子中有地雷,则游戏结束。
  4. 如果打开的格子周围的地雷数量与数字相符,则该格子周围的其他格子也会被打开。
  5. 游戏的目标是在不踩到地雷的情况下,找出所有没有地雷的格子。

扫雷游戏需要玩家运用逻辑推理和数学计算来推断哪些格子可能有地雷,哪些格子是安全的。通过不断尝试和推理,最终完成游戏。总的来说扫雷游戏是一款能够锻炼玩家多种能力的益智游戏,对提高玩家的逻辑推理、数学计算、观察、耐心和毅力、空间想象力等能力都有帮助。平时没事的时候可以玩一玩的,我个人感觉还是很interesting!

3、游戏实现思路

第一步,首先是需要我们去创建一个菜单界面函数,用于选择退出游戏或者是进入游戏。
第二步,创建用于放置雷的棋盘,并进行棋盘初始化。
第三步,放入雷,并打印出雷的初始化棋盘
第四步,输入排查雷的坐标

第五步,反馈输入坐标的结果,之后循环,直到成功排查或被炸死

在扫雷的过程中,创建棋盘布置雷和排查雷都需要储存信息,所以我们需要一定的数据结构来存储这些信息,在布置雷时,如果是雷就放1,不是雷就放0;

同时为了让游戏具有一定的可玩性,便于修改游戏难度,那么们便在头文件中define行、列和雷的数量

#define number 10//雷的个数
#define ROW 9//棋盘显示的长宽
#define COL 9

#define ROWS ROW+2//设置的存储的棋盘的长宽
#define COLS COL+2

二、模块化代码实现

在实现代码之前,我们使用多文件的形式对函数的声明与定义,这可以极大的简化我们的代码

test.c //⽂件中写游戏的测试逻辑 
game.c //⽂件中写游戏中函数的实现等
game.h //⽂件中写游戏需要的数据类型和函数声明等

1、创建主函数main()

在主函数中我们创建一个put值,用于输入判断我们菜单的选择,用do  while判断我们输入的选择是否结束,在这里我们需要创建菜单函数,每一次循环我们都调用菜单函数,接着使用switch语句中,来执行输入的结果,如果输入1则提示玩家开始游戏并调用游戏函数game(),输入0则退出游戏,输入其他数值则提示错误,并循环执行switch语句,直至玩家主动退出。

int main()
{
	int put = 0;//选项选择
    srand((unsigned int)time(NULL));//生成一个随机数,time函数无参返回,返回类型强制转换为unsigned
	do {
		menu();//调用菜单函数
		printf("请输入你的选择:");
		scanf(" %d", &put);
		switch (put)//switch语句,判断执行内容
		{
		case 1:
			printf("\n请开始扫雷\n");
			game();
			break;
		case 0:
			printf("\n已退出游戏!\n");
			break;
		default:
			printf("\n选择错误,请重新输入!\n");
			break;
		}
	} while (put);

	return 0;
}

2、创建菜单函数

因为不需要返回值所以使用void,菜单函数会在mian()函数中被调用

void menu()//不需要返回值,void
{
	printf("***********************\n");
	printf("***********************\n");
	printf("******  1.play  *******\n");
	printf("******  0.exit  *******\n");
	printf("***********************\n");
	printf("***********************\n");
}

 3、创建游戏函数game()

①棋盘的设置

扫雷游戏我们首先要创建一个棋盘用于放置雷,而棋盘我们用二维数组char[x][y]来设置,x,y表示棋盘的行列,那么在设置棋盘之前,我们先来说一下游戏的排雷,当我们任意选择棋盘中的一个坐标,如果这个坐标放置的不是雷,那么它就会显示以当前坐标为中心的周围 8 个格子中地雷的数量,如图所示

但是如果我们选择的坐标是这个棋盘的最边上,那么它所搜查的范围就会超出所设置的二维数组9×9的棋盘,如下图所示的灰色框,中心位置显示周围有两个雷,但是它搜查的范围是以它为中心的一个九宫格,所以最下面的那一行就已经不在一开始布置的9×9棋盘里了,出了棋盘的范围,导致了越界问题

所以我们在设置棋盘的时候可以选择将棋盘的范围设置的大一些,在9×9棋盘的基础上,将二维数组扩大一圈设置成11×11的棋盘,如下图所示,中间蓝色范围是用来布置雷的棋盘,而周边多出来的一圈绿色便是用来防止越界问题的,那么在这个棋盘上我们输入坐标排查的的范围都是在棋盘的范围之内,就不存在越界问题了,所以在设置棋盘的时候我们将存放数据的数组可以设置成char[11][11]

假设我们现在已经布置好了雷(雷用1表示,不是雷用0表示),当我们搜查一个坐标的时候,如果这个坐标周围有一个雷,那么我们需要将这个雷的数量信息记录并存储下来,同时打印给玩家,但是我们存放雷的数组里面已经有数据了,如果再存放在里面就会可能产生混淆从而导致棋盘混乱打印困难,所以我们可以设置两个棋盘,一个是雷的棋盘mine,一个是用于放置雷的信息的棋盘show,我们

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

根本学不会_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值