编码实现
规则分析
游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为99个方块10个雷,中级为1616个方块40个雷,高级为1630个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过2430),玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。
状态梳理
- 未扫状态
- 空状态
- 周围有雷状态(1,2,3,4,5,6,7,8)
- 雷爆炸状态
- 标旗状态
伪代码
- 创建行列变量row,column和地雷数mine
- 通过变量生成row*column的二维数组,默认值全部设置为10
- 随机放入mine个地雷,地雷标记为数字19
- 放雷时,雷的八个方位的数值+1,若为19则不加
- 循环数组渲染,大于等于10小于19的数字显示为未扫状态
- 点击扫雷,把当前数字-10。如果值等于9,那么表里数组显示全部雷游戏结束;其他显示出来数字,0显示为空白
- 当0时递归连锁周围的数字直到周围没有0,显示出来数字(如果为标旗那么不解锁)
- 右键标旗,标旗逻辑即当前数字+10,取消标旗-10
- 标旗时判断数组内29的个数等于雷数且19的数字为0,即全部标记出来雷了,游戏结束
- 扫雷时未解锁的区域等于雷数,那么游戏结束
游戏时数组值状态
| 数组值 | 显示状态 |
|---|---|
| 0 | 已解锁的空白 |
| 1-8 | 周围有雷的 |
| 9 | 雷爆炸 |
| 10-19 | 未解锁的状态 |
| 20-29 | 标旗 |
后续优化
- 使用canvas绘图来实现效果减少HTML引发的样式问题(开发中....)