益智泡泡龙
英文名:Puzzle Bobble
Github 另有视频,详见各视频平台。
素材资源
参考资料
洪水算法
Puzzle Bubble 在线游玩
Puzzle Bubble 2 在线游玩
设计与实现
游戏规则
这是款三消类游戏。泡泡从中间发射台发射,碰到墙壁会反弹,碰到别的泡泡或陷阱机关底部会停止。碰到泡泡停止后会对该泡泡周围进行检测,当相连的相同泡泡数超过三个时它们就会被消除。消除后,不与顶部直接或间接相连的泡泡会下落。
随着时间流逝陷阱机关会下降,使得能够存放泡泡的区域变小。
场地中的泡泡被全部消灭后游戏胜利。当场地中泡泡逼近发射台水平线时游戏失败。
主要的游戏对象
场地(Playfield):存放泡泡的地方。设计为12行8列,最下面两行在关卡设计时不能设置泡泡。
发射台(Launcher):发射泡泡
泡泡(bubble):……
陷阱机关(trap):随着时间流逝,它会下降,使场地中能存放泡泡的区域变小。
场地(Playfield)
用一个二维数组存放泡泡。泡泡从发射台发射,碰到墙壁会反弹,碰到陷阱机关底部或其他泡泡时,会被加入场地中(添加到二维数组)。
这是设计的两种坐标。左侧的画布坐标即游戏中的坐标。右侧的泡泡坐标即二维数组中的坐标。圆心坐标可以相互转换
泡泡坐标 -> 画布坐标
将圆心的泡泡坐标转换为画布坐标,先判断其位于奇数行还是偶数行(行数从0开始计算),然后在根据列的特征计算其纵坐标。
画布坐标 -> 泡泡坐标
根据逐行递增
邻居坐标
从这里我们可以很容易的找出泡泡坐标中任意一位置的邻居坐标。
算法
可以看一下参考资料。
消除泡泡
对于要消除的泡泡,我使用的是下图这种: 这里记录的坐标就是要消除的泡泡的坐标。
下落泡泡
对于获取那些在泡泡消除后悬空的泡泡(不与顶部直接或间接相连的泡泡),与上图算法略有不同。
- 将顶部泡泡的坐标放入栈中,并从棋盘中移除。
- 从栈顶拿出一个坐标,获取直接相连的泡泡的坐标,并将它们放入栈中
- 将这些坐标中的泡泡从棋盘中移除。
- 重复2、3,直至栈为空
- 最后,棋盘中剩余的泡泡即为悬空的泡泡(会掉下去的泡泡)