室友说你怎么才学到数组,然后我用C语言做了个扫雷(递归展开+难度选择+优化打印)

本文介绍了使用C语言实现扫雷游戏的过程,包括扫雷框架、初始化棋盘、打印棋盘、布置雷、排查雷等功能。重点讲解了递归展开和计算雷个数的方法,并提供了两种棋盘打印格式。代码可维护性高,支持难度选择,如简单、普通和困难模式。
摘要由CSDN通过智能技术生成

扫雷

创作不易,还请观众老爷耐心看完儿! 

目录

扫雷

1.扫雷框架

2.初始化棋盘

3.打印棋盘

格式1:

格式2:

4.布置雷

5.排查雷

5.1排查雷的功能

5.2递归展开功能bool_mine

5.3计算该位置的雷的个数

6.扫雷的全部代码

7.作者试玩环节



1.扫雷框架

2.初始化棋盘

        这是用户看到的棋盘,9*9大小,需要自己去排查雷

为了程序员更好地去控制扫雷,我们需要两个数组

  1. 程序员看的雷区数组 -- 里面存放着雷的位置 -- 11*11大小
  2. 用户看的展示数组 -- 全是*号,需要用户去排查 -- 11*11大小

使这两个数组一样大的原因:是为了使我们后面设计的接口函数更加兼容,即使展示的数组本质是11*11大小,但是我们打印的时候打印9*9就可以了

        为了可以提高代码可维护性和兼容性,我们将数组的行数和列数,使用来替换


#define ROWS 11
#define COLS 11


#define ROW 9
#define COL 9
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
	for (int i = 0; i < rows; ++i)
	{
		for (int j = 0; j < cols; ++j)
		{
			board[i][j] = set;
		}
	}
}

        我们将如果初始化的内容以字符的形式作为参数传进去,上述代码就可以很好地解决了兼容性,这一个函数可以解决雷区棋盘和展示用户的棋盘的初始化


3.打印棋盘

         打印棋盘大家可以充分发挥自己的艺术细胞,根据自己的喜好去设置棋盘的打印格式。下面博主提供两种。

格式1:

void print_mineline(int row)//打印分割线
{
	for (int i = 0; i < row; ++i)
	{
		if (i == row / 2)
		{
			printf("扫雷");
		}
		printf("==");
	}
	printf("\n");
}

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	print_mineline(row);//先打印一行分割线
	//打印列号
	for (int j = 0; j <= col; ++j)
	{
		if (0 == j)//将列对齐
		{
			printf("  ");
			continue;
		}
		printf("%d ", j);
	}
	printf("\n");


	for (int i = 1; i <= row; ++i)
	{
		printf("%d ", i);
		for (int j = 1; j <= col; ++j)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	print_mineline(row);//最后再打印一行分割线
	printf("\n");
}

效果:

格式2:

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	//打印列号
	for (int j = 0; j <= col; ++j)
	{
		if (j == 0)
		{
			printf("    ");
			continue;
		}
		printf(" %d  ", j);
	}
	printf("\n\n");

	for (int i = 1; i <= row; ++i)
	{
		//打印列号
		//1.打印第一部分
		printf(" %d  ", i);

		for (int j = 1; j <= col; ++j)
		{
			printf (" %c ", board[i][j]);
			if (j <= col -1)
				printf("|");
		}
		printf("\n");
		//2.打印第二部分
		if (i <= row - 1)
		{
			printf("    ");
			for (int j = 1; j <= col; ++j)
			{
				printf("---");
				if (j <= col - 1)
					printf("+");
			}
		}
		printf("\n");
	}

}

效果:

         但是格式2的缺点是如果棋盘是9*9以上大小,那么存在一些对齐问题,当然厉害的同学可以改善一下。这是提供的两个思路


4.布置雷</

  • 84
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 118
    评论
评论 118
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值