Vue3实现扫雷小游戏

564 阅读2分钟

编码实现

规则分析

游戏区包括雷区、地雷计数器(位于左上角,记录剩余地雷数)和计时器(位于右上角,记录游戏时间),确定大小的矩形雷区中随机布置一定数量的地雷(初级为99个方块10个雷,中级为1616个方块40个雷,高级为1630个方块99个雷,自定义级别可以自己设定雷区大小和雷数,但是雷区大小不能超过2430),玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。

状态梳理

  1. 未扫状态
  2. 空状态
  3. 周围有雷状态(1,2,3,4,5,6,7,8)
  4. 雷爆炸状态
  5. 标旗状态

伪代码

  1. 创建行列变量row,column和地雷数mine
  2. 通过变量生成row*column的二维数组,默认值全部设置为10
  3. 随机放入mine个地雷,地雷标记为数字19
  4. 放雷时,雷的八个方位的数值+1,若为19则不加
  5. 循环数组渲染,大于等于10小于19的数字显示为未扫状态
  6. 点击扫雷,把当前数字-10。如果值等于9,那么表里数组显示全部雷游戏结束;其他显示出来数字,0显示为空白
  7. 当0时递归连锁周围的数字直到周围没有0,显示出来数字(如果为标旗那么不解锁)
  8. 右键标旗,标旗逻辑即当前数字+10,取消标旗-10
  9. 标旗时判断数组内29的个数等于雷数且19的数字为0,即全部标记出来雷了,游戏结束
  10. 扫雷时未解锁的区域等于雷数,那么游戏结束

游戏时数组值状态

数组值显示状态
0已解锁的空白
1-8周围有雷的
9雷爆炸
10-19未解锁的状态
20-29标旗

后续优化

  1. 使用canvas绘图来实现效果减少HTML引发的样式问题(开发中....)

如果有不合适的地方请大佬斧正!