手把手教你作出扫雷小游戏

前言

先解释下扫雷的玩法,随机点一个方块(这个是有运气成分在的),显示以这个方块为中心,3x3的格子里雷的总个数,玩家通过这个个数判断雷的位置,继续点击下一个方块,直到找到所有雷的位置,才算成功,中途碰到雷游戏结束。

本教程是基础款,也就是说不会出现点一下翻出一大片(这个需要程序连续测试相邻的格子有没有雷,直到有雷了才会停止展开),也不能标记

我这里简单一点,设置了80个雷,而且展示了真实棋盘,这时候,输入唯一不是雷的坐标6,1,游戏就结束了。

*文章风格与上一篇三子棋类似,但不会那么详细(比如为什么要头文件参与声明,为什么要宏定义变量等等),有兴趣的朋友先去看看这篇 手把手教你写三子棋

在这里插入图片描述

在这里插入图片描述

一、设计思路

在这里插入图片描述

三、具体步骤

1、模块化编程

在这里插入图片描述

2、游戏开始的逻辑

展示菜单–>玩家选择–>进入相应模式

所以main函数如下,很简单的一个do while里面加个switch,不多赘述,别忘了是main()放在最下面。

int main()
{
   
	int input = 0;
	srand((unsigned int)time(NULL));//这行是为了埋雷准备,可以先忽视
	do{
   
		menu();//展示菜单
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
   
		case 1:
			game();//进入游戏模式
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

菜单也很简单,如下:

void menu()
{
   
	printf("***********************\n");
	printf("******* 1.play ********\n");
	printf("******* 0.exit ********\n");
	printf("***********************\n");

}

3、游戏的实现

那么game()里包含什么呢?提醒下,game()在test.c里

1)棋盘的创建以及初始化 Init_board()

正如一开始所说,首先要定义两个数组(棋盘),一个给电脑用来埋雷,一个给玩家进行不断选择排查,这里延用上次三子棋宏定义变量的创建风格,方便进行棋盘大小的修改。

其次,判断的是以你选择的方块为中心,3x3的格子内雷的个数,这里要考虑,那些边上的格子怎么办,对于数组来说,你去排查边缘外边的格子可是会发生越界访问的,那么我们为什么不一开始的就建个大一点的数组呢,可以供边缘的格子进行3x3的排查

在game.h中

#define ROW 9
#define COL 9

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

game()里

	char mine[ROWS][COLS] = {
    0 };//mine有布置雷的意思
	char show[ROWS][COLS] = {
    0 };

初始化就很简单了,布雷棋盘与玩家看到的棋盘要填充不同的字符,一个要清清楚楚雷在哪,一个像是被盖住了

(1)首先确定你要确定传的参数,在game()里

	Init_board(mine, ROWS, COLS, '0');//这个是实际埋雷的棋盘
	Init_board(show, ROWS, COLS, '*');//这个是展示给玩家的棋盘	
	//			(棋盘,行,列,字符)

(2)再在game.h里声明

void Init_board(char arr[ROWS][COLS], int rows, int cols, char set);

(3)再转到game.c里定义

void Init_board(char arr[ROWS][COLS], int rows, int cols, char set)
{
   
	int i, j = 0;
	for (i = 0; i < rows; i++)
	{
   
		for (j = 0; j < cols; j++)
		{
   
			arr[i][j] = set;
		}
	}
}

2)打印棋盘 show_board()

这里注意,上面之所以要建立11x11的棋盘,是为了 排查雷这个操作不发生越界访问,但是实际打印给我们看的的时候只需要中心的9x9的棋盘,多出来的第0行和第0列可以利用下标注下几行几列,第10行和第10列,存在,而且也被填充了字符,但没有打印出来

*如下图,黑色的是实际棋盘,绿色的方框和数字是打印出来的(注意数字是打印出来,不是填充,实际上对应格子里还是‘0’和‘*’),右下角黄色框边缘方格排查雷的方式*

1)test.c中,game()

	//打印棋盘
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值