Funpack活动第十期 游戏移植 简单扫雷
本次活动实现了任务一,完成PC端经典扫雷游戏的移植,通过微软的MakeCode ARCADE平台使用图块的简单方式实现。
标签
MakeCode Arcade
游戏移植
相伴左右
更新2021-08-30
570

FunPack 第十期 Kitronik ARCADE

 

实现功能

       本次Funpack活动提供了两个任务选择,由于感觉游戏板移植游戏比较好玩,最终选择了任务一,移植PC端经典游戏扫雷。

代码实现

       扫雷游戏规则:

       扫雷的玩法:

       在一个自定义大小的方块矩阵中随机布置一定量的地雷,再由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。

       操作方法:

       左键用于打开安全的格子,推进游戏进度;右键用于标记地雷,以及辅助判断,在一个数字周围的地雷标记完时,左键单击数字相当于对数字周围未打开的方块均进行一次左键单击操作:

       左键单击:在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数(一般为8个格子,对于边块为5个格子,对于角块为3个格子。所以扫雷中最大的数字为8);如果方块上为空(相当于0),则可以递归地打开与空相邻的方块;如果不幸触雷,则游戏结束。

       右键单击:在判断为地雷的方块上按下右键,可以标记地雷(显示为小红旗),标记之后再一次按下右键显示,若再一次按右键则取消标记。

       自动展开:左键单击数字,当点击位置周围已标记雷数等于该位置数字时操作有效,相当于对该数字周围未打开的方块均进行一次左键单击操作。地雷未标记完全时左键数字无效。

      游戏板上没有鼠标,所以使用上下左右按键实现选择框的移动,A代替鼠标左键,B代替鼠标右键。

      规则如上,接下来根据规则实现游戏,需实现的有

  • 地图自动生成
  • 地图显示
  • 选择框的移动
  • AB按键的逻辑实现已经游戏成功失败判断
  • 地图自动生成

      我们在运行扫雷游戏时,会发现每一次雷出现的位置都不相同,所以我们需要随机生成这些雷,然后还会发现雷周围的数字会加1,我们也是根据这些数字来完成“扫雷”这一目标。

Fn3xFLnELOyuJ3t3fkTKtn1It7In

  • 一维数组映射二维平面

         使用一个60大小的一维数组ImageList对应屏幕上的6*10的图块地图

  • 地雷的生成

         设定一个变量MineNums记录地雷的数量,然后在ImageList中随机选择MineNums个位将索引值置为-1(-1表示地雷)

FhRe9j_sJWEU3Z6ZZCc9ZS7-5AfD

        然后根据地雷的位置,计算数组其余位置的值(二维地图中,当前位置周围8个图块中地雷的个数)

Fn5VEDwZ8rMUbhYbh5QchnnVRSKU

  • 加密数组

      此时若直接显示,则所有雷都一清二楚,所以需要将ImageList做一个加密处理,此处进行简单的偏移隐藏信息,那么要实现这一功能,我们就需要将第一层进行加密,我们为每一个格子加20,就完成了加密,在后面A键按下时,只需要将所选位置的索引值减去20即可完成解密,按B键时加20进行深度加密,当达到一定加密层数时变回到第一层加密状态。

FrX2p-rZy5AieXtV9GBxt2Ui_jWY

  • 地图的显示

          地图的显示主要是根据ImageList数组中不同的索引位置和索引值在二维平面上显示图块。

  • 1~8用对应数字表示
  • -1用地雷表示
  • 0用空格表示
  • 19~38用未翻开的快表示
  • 39~58为B键标记状态,用小红旗表示
  • 59~79为第二次按B键,用?表示
  • 其余地雷的各种状态由-2,-3表示

FvgfaiDv5-ZdGtEVnbkyD_P6goLQ

  • 选择框的移动

              由于Kitronik ARCADE游戏手柄并不支持触屏操作,所以我们需要创建一个选择框,通过上下左右按键移动选择框选择想要操作的方块.

  • 选择框的创建

               由于需要移动选择框,所以此处将选择框设置为一个Player的精灵角色,通过控制精灵的位置达到移动的效果

FvrmFIRDHkKWZBjuEODahnbs-phI

  • 选择框的上下左右移动

               选择框的移动操作只需要改变选择框精灵的X,Y值即可实现移动,此处注意左上角表情处只能上下移动

FtFXoCgYfX4d5UBUgGYmMzakKa-QFqnYNAJzgdA2E6bPVzyTA8Afxss6Fpp9ycX3R6wyV7a4P11kokvSO1_9

FjPbzLsot4nS9b43CczkS2ivQPR-

  • AB按键的逻辑实现已经游戏成功失败判断

   A键的实现

  • 检查方块的值,若为20则表示为空白块,执行自动翻开周围方块任务
  • 若不为20则直接将值-20实现解密操作,判断解密结果,若为-1则扫雷失败,放开全部埋有地雷的块,并将失败标志置位,等待点击左上角表情重新开始
  • 若点击的块是已经翻开的数字,则判断周围地雷是否标记完全,若标记完全则自动翻开周围块,此处需要使用递归的方法实现。
  • 若点开为地雷则游戏失败
  • 若游戏失败,点击左上角表情重新开始游戏

Fgn3ojXim8hZ7rwymGgcgJwVLQTu

Fk_8ppKvn6C2SWdjK5t-Nj3k23sDFjPJnX98teX6eQLCYVUWm2_sJThL

   B键的实现

  • B键只是简单的再加密操作,若当前图块不在-1~18的范围内,则执行+20操作或者还原。
  • B键标记时若地雷都标记出来则游戏胜利,进入下一关

FpbSZQJ9skyp5DHtpIqsF1lTC-Rb

FuprrBBdb6ACp_rEavISMeuIwQWq

       以上基本为游戏实现的主要部分,其余只是一些提示已经即使操作,详细代码请查看游戏源码

实现演示以及说明

开机操作提示

FrKsmx8zCl0OFJKRIRkbNhppZu8sFntiEHjyRlCE7y9gJDE3EIG_IkDi

进入关卡界面

Fks1DT3iRBmbVMGV6fdtfzG0WDC2

自动翻开空白以及标记功能

FhPg0GTVffQtYB_5tWmP_DNte49Z

成功提示

FkjML8kD67SrXP6g_6BHgypSruOfFkRK7XfMl-lYNOe2DT1kH02qRSST

失败提示

FitOPHEcrE_zWkCOfAw-zoN8qJ4e

心得体会

       本次活动从下单开始就一直不顺利,第一块板子屏幕白屏退货之后想着有始有终又购买了一块,但第二块同样出现问题,然后就是等待退货流程耽误了大半个月,在活动老师知道我这个情况之后还是鼓励我完成任务,直接给我寄了一块过来,在最后所剩不多的时间里匆匆忙忙完成任务对我来说是一种挑战也是一种抗压的锻炼。可能游戏并不完美,但认真做出来能流畅运行的时候还是很有成就感。

 

游戏链接:https://makecode.com/_6aXHHhDy97RT

附件下载
arcade-简易扫雷.uf2
扫雷游戏可执行文件
arcade-简易扫雷.png
扫雷游戏源码
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号