推荐阅读:

  • 我的CSDN
  • 我的博客园
  • QQ群:704621321

今天给大家介绍传统扫雷游戏的制作思路吧,为什么选择这个游戏呢?
1.它太金典了,金典到我们都知道,都玩过,都会玩;
2.它也是一个轻量级的小游戏,比较简单。

我们先来捋一下扫雷游戏中的要素

从上到下的UI:遮罩层——>雷层——>数字层——>底层背景层。

下面来介绍一下制作流程:

1.我们制作的时候需要从底层开始做起,首先是底层背景层,只需要一张图片就ok了,作为游戏的背景;
2.按道理来水,我们应该接下来做数字显示层。可能有些朋友和我一样,一开始认为是先把数字标好再去布雷,其实应该是先布雷,再根据布雷情况给每个格子标数字,所以我们接下来是做雷层。
在这里提供给大家最简单的布雷思路:遍历nm个格子,每个格子随机指定是否是雷。为了不让生成雷的概率过大,我们可以根据概率来决定是否生成雷。
3.生成每个格子的遮罩层:遍历n
m个格子,分别创建一个Button。
4.根据玩家点击的格子位置,判断周围8个格子雷的数量显示数字。

现在我就来剖析一下扫雷的制作思路:

1.创建地图,并随机生成雷
   在这里我们创建一个m*n的地图,用二维数组存储地图信息,0代表无雷,1代表又雷。由于ts不能直接使用二维数组,需要借助一维数组帮助,使用方法如下:

let arr = new Array();
for (let i = 0; i < m; i++)
{arr[i] = new Array();for (let j = 0; j < n; j++)   {let num;//num=0或num=-1arr[i][j] = num;}
}

2.判断当前点击的是否是雷。
   在玩家点击了一个[i][j]格子时,我们需要判断接下来游戏的状态:
1.如果不是雷,则计算该格子周围雷的个数。我们需要计算格子周围8个数中雷的个数,显示在当前格子上。 如下图:

     //不是炸弹,创建数字else {if (evt.currentTarget.x - this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y - this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x - this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x - this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y + this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x == this.bowContainer.getChildAt(i).x && evt.currentTarget.y - this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x == this.bowContainer.getChildAt(i).x && evt.currentTarget.y + this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x + this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y - this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x + this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y == this.bowContainer.getChildAt(i).y) { this.bowNum++; }if (evt.currentTarget.x + this.currentCellW == this.bowContainer.getChildAt(i).x && evt.currentTarget.y + this.currentCellH == this.bowContainer.getChildAt(i).y) { this.bowNum++; }}textNum.text = this.bowNum.toString();

2.如果是雷,则显示所有雷,游戏失败。在第一步生成地图的时候我们顺便也应该生成雷,这时候我们比较友好的做法是把所有的雷装进一个雷的数组,方便这里失败时的显示。

///点击某个方格后显示对应信息//遍历雷,看当前对象是否是雷for (var i = 0; i < this.bowContainer.numChildren; i++) {//如果是雷,显示所有雷if (evt.currentTarget.x == this.bowContainer.getChildAt(i).x && evt.currentTarget.y == this.bowContainer.getChildAt(i).y) {this.gamePanel.addChildAt(this.bowContainer, 4);this.failM.play(0, 1);//地图上所有按钮不可点击this.lockAllBtn();this.showBannerAd("adunit-4a5e80c193902450");// this.showVideoAd("adunit-4ad7c6693898c4b0", this.VideoAdSuccess, this.VideoAdfail);break;}

3.自动展开无雷区域
   先给大家讲讲标题的含义。即当前点击的格子不是雷,寻找周围的8个格子,如果8个格子中其中至少有一个不存在雷,找到该种格子,继续寻找周围8个格子判断是否存在不为雷的。如此反复迭代
上述方法采用的是迭代递归的思想,其实该方法效率并不高,但作为初学者我们能实现此功能就ok了。
4.胜利判断
   就差最后一步了,当然是判断胜利了,其实方法很简单,只需要判断剩下未点击的格子数是否等于雷的个数。
扫雷的算法就介绍给大家了,这个算法是我第一次做扫雷时候使用的,可能不是特别完美,有什么建议或意见的,大家可以在下方留言哦!

扫雷游戏开发基本思路相关推荐

  1. Android——Cocosd2d-x手机游戏开发学习思路

    手机 APP 应用如雨后春笋般冒了出来,而在众多的 APP 应用中,游戏占据了半壁江山.它丰富着人们的业余生活,增进了人们之间的沟通交流.也有许多开发的朋友对游戏开发情有独钟,他们不止是享受着有很多的 ...

  2. 【数据结构与算法】之深入解析“扫雷游戏”的求解思路与算法示例

    一.题目要求 给你一个大小为 m x n 二维字符矩阵 board,表示扫雷游戏的盘面,其中: 'M' 代表一个未挖出的地雷: 'E' 代表一个未挖出的空方块: 'B' 代表没有相邻(上,下,左,右, ...

  3. Weex 版扫雷游戏开发

    2019独角兽企业重金招聘Python工程师标准>>> 扫雷是一个喜闻乐见的小游戏,今天在看 Weex 文档的过程中,无意中发现用 Weex 完全可以开发一个扫雷出来.当然这个扫雷和 ...

  4. java斗地主游戏开发 算法思路讲解

    上学期刚开学的时候我特别沉迷于斗地主 充了6块钱赢了30万豆 然后一夜之间破产 越想越气 然后我就有一个大胆的想法开发一个斗地主现在这个斗地主能在控制台上运行 本文主要讲解我在开发斗地主时研究的算法思 ...

  5. Weex 版扫雷游戏开发 1

    扫雷是一个喜闻乐见的小游戏,今天在看 Weex 文档的过程中,无意中发现用 Weex 完全可以开发一个扫雷出来.当然这个扫雷和 Windows 那个有一点差距,不过麻雀虽小五脏俱全,随机布雷.自动挖雷 ...

  6. 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)

    文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...

  7. 【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)

    游戏背景介绍 扫雷游戏是一款大众类的益智小游戏,于1992年发行.游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输. 扫雷在科技历史上也扮演了相似的角 ...

  8. 用python tkinter组件实现扫雷游戏

    首先介绍扫雷游戏规则.扫雷游戏界面是有若干行和列的方块矩阵,用矩阵的行列号定位矩阵中的方块.每个方块都有一些状态,例如有无雷.有无标记等,用一个2维列表记录这些状态,为了和方块矩阵形成对应关系,把矩阵 ...

  9. 用C语言实现扫雷游戏

    用C语言实现扫雷游戏 -扫雷游戏的基本思路 1.打印游戏的菜单 2.为了便于后面排查周围雷的个数,初始化两个二维数组,一个作为向玩家显示的面板,一个作为布雷的面板.两个数组嵌套在一起.如下图所示: 3 ...

最新文章

  1. BIOS-SMI Introduction
  2. 28. extjs中Ext.BLANK_IMAGE_URL的作用
  3. python强制可读吗_python 中的强制类型转换
  4. fsimage文件丢失_hadoop fsimage edits关系
  5. ELK日志系统的写入优化
  6. Spring MVC_Hello World
  7. php5.5 反序列化利用工具_Yii框架反序列化RCE利用链2
  8. 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?
  9. C++ 进阶——object slicing 与虚函数与dynamic_cast
  10. invalid use of constructor as a template 编译错误
  11. fastjson list转json
  12. Linux | 如何通过Xshell上传文件到Linux
  13. 2021-07-21
  14. 街头卖艺里的故事,你还会相信吗?
  15. hdu1698(线段树/区间修改/求和)
  16. 群晖服务器+微信同步,群晖服务器 云同步
  17. 高效的公式提取神器Mathpix snipping Tool+ Mathtype
  18. JAVAEE 实训日志 一
  19. 高项、高级项目管理师论文-进度管理
  20. 图库图库图库词典制作在线查看AI翻译

热门文章

  1. 文字转语音:CyberBukit TTS for php 1.2.3
  2. 【云计算学习教程】云计算架构参考模型
  3. jQuery下的ajax之省市区三级联动
  4. java 行列式计算_n阶行列式的全排列求解(Java)
  5. mysql from 嵌套查询,MySQL嵌套查询实例详解
  6. 自动驾驶技术-环境感知篇:激光雷达、毫米波雷达、超声波雷达相关技术介绍
  7. Data Binding的报错集合 例如Error 10 54 错误 程序包com kodulf recycl
  8. 《把时间当朋友》 第六章交流 读书笔记
  9. MCMC和贝叶斯统计在宇宙微波背景辐射(CMB)中应用
  10. python如何注释一段代码_python如何注释