C语言扫雷(递归展开)(详细注释)(完整代码)

本文介绍了如何使用C语言实现扫雷游戏,详细讲解了雷盘初始化、玩家排查雷的递归展开过程以及游戏的胜负判断。通过初始化两个数组show和mine来表示游戏状态,利用递归解决边缘格子的计算问题,实现扫雷的逻辑。此外,还提供了游戏的完整代码包括game.h、test.c和game.c。
摘要由CSDN通过智能技术生成

目录

一、功能实现

1.雷盘初始化与打印

雷盘定义

初始化雷盘

打印雷盘

随机布置雷

2.玩家排查雷

获取坐标周围雷数

递归展开

胜负判断

显示雷位置

二、游戏试玩

三、游戏完整代码

game.h 

test.c

game.c


      扫雷大家应该都知道,翻开一个格子,显示的数字就是周围 8 格所含的雷数。例如,红色框框里的1周围8格就只有一个雷。

      我们定义两个数组来实现,show数组存放玩家看到的棋盘,mine数组存放隐藏的雷盘

这两个数组搭配使用,就能计算某个位置周围的雷数,并且修改show数组来显示这个位置的雷数。

但是如果计算边缘格子周围的雷数时,数组会越界

我们只要在周围留一圈就能解决这个问题

如下图所示,假设我们要玩 9x9 的大小,我们的数组大小就定义为 11x11

一、功能实现

1.雷盘初始化与打印

  • 雷盘定义

  • 初始化雷盘

初始化show,mine两个数组,show 存放 '*' , mine存放 '0'

void init_board(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}
  • 打印雷盘

//打印show雷盘

void display_board(char board[ROWS][COLS], int row, int col)
{
	int i = 0;
	int j = 0;

	//这里打印上面一行数字
	printf("|");
	for (j = 0; j <= col; j++)
	{
		printf(" %-2d |", j);
	}
	printf("\n");


	for (i = 1; i <= row; i++)
	{
		printf("|");
		for (j = 0; j <= col; j++)
		{
			printf("----|");//打印两行之间的分割线
		}
		printf("\n");

		printf("|");
		printf(" %-2d |", i);//打印左边一列数字

		for (j = 1; j <= col; j++)
		{
			printf(" %2c |",board[i][j]);//打印show数组
	
		}
		printf("\n");
	}
}

 效果图:

  • 随机布置雷

随机布置雷,将mine中的 '0' 改为 '1'

//随机布置雷,在mine数组里随机设置COUNT个雷

void set_mine(char mine[ROWS][COLS], int row, int col)
{
	int count =
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值