扫雷游戏C语言代码和详解

首先,我们创建了一个头文件和两个源文件,这样更好地观看和分析代码,当然在写代码的过程中也更加条理清晰。

头文件game.h

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9
#define COL 9

#define ROWS ROW + 2
#define COLS COL + 2

#define EASY 10
void chushihua(char mineboard[ROWS][COLS], int row,int col,int ret);//棋盘的初始化
void dayin(char mineboard[ROWS][COLS], int row, int col);//打印棋盘
void buzhi(char arr[ROWS][COLS], int row, int col);//布置地雷
void paicha(char arr[ROWS][COLS], char arr1[ROWS][COLS], int row, int col);//排查地雷

源文件text.c

这部分的内容主要是包含main函数和功能的轮廓

main函数

主函数只需要引用函数,并不需要进行函数的实现,把实现放在了text函数中

int main()
{
   
	test();
	return 0;
}

text函数

首先需要运用do…while语句,先打印菜单让玩家进行“开始游戏”或“结束游戏”的选择,判断条件为真假(0或1)的区分;其次,运用switch语句对玩家不同选择做出反应,即:1 输出开始游戏,0 输出结束游戏,为其他数字输出输入错误,请重新输入。

void test()
{
   
	int input;
	do
	{
   
		menu();
		printf("请输入>");
		scanf("%d", &input);
		switch (input)
		{
   
		case 1:
			printf("开始游戏\n"); break;
		case 0:
			printf("游戏结束\n"); break;
		default:
			printf("输入错误,请重新输入\n"); break;
		}
	} while (input);
}

运行截图如下:
在这里插入图片描述

game函数

我们只需要将输出开始游戏改为game(),将进入到game函数中。game函数中包含数组的定义和数组的初始化、布置地雷、打印棋盘、排查地雷的引用。
我们把99的格子看做是二维数组,我们将‘“0”看做是没有雷的地方、“1”是有雷的地方。如果排查的地方没有雷,则需要计算这个雷周围有多少雷,如果计算结果为“0”或者“1”,则与原来棋盘用来代表有没有雷的字符产生歧义。所以我们采用两个棋盘,一个用来记录雷,一个用来展示给玩家。
其中令人注意的是,在排查边缘雷的时候,如果我们数组的大小为9
9,排查时将会越界,所以我们所设定数组的大小为10*10。

| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

void game()
{
   
	//创建数组
	char mineboard[ROWS][COLS] = {
   0};
	char showboard[ROWS][COLS] = {
   0};
	//初始化
	chushihua(mineboard, ROWS, COLS, '0');
	chushihua(showboard, ROWS, COLS, '*');
	//布置雷
	buzhi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值