0 规则
只要三种同色的在一行或一列即可消除
1 数据结构
一个色块含这些内容
- 色块的类型:type
- 色块的颜色:color
- 色块空间位置: Index(row, col)
- 色块序列位置: IndexCount
- 色块图形位置:Position
2 坐标转换
色块的空间,序列和位置是可以相互转换的
// Index -> IndexCount
IndexCount = row+col*ROW_MAX;
// IndexCount -> Index
Index = {IndexCount%ROW_MAX, floor(IndexCount/ROW_MAX)};
// Index -> Position
Position = {Index.row*Unit_WDistance, Index.col*Unit_HDistance};
// Position -> Index
Index = {round(Position.x/Unit_WDistance), round(Position.y/Unit_HDistance)};
3 方阵
二位矩阵,对矩阵作出标示,可以改变二维矩阵为任意形状
不规则二维矩阵
4 预判
-
检测当前点1并检测同向相隔一格的相同点2,当成立后,检测当前临格的隔壁点3是否为相同点,如果符合条件,说明可消除
-
检测当前点1并检测相邻点相同2,当成立后,检测第三个位置的周围点3是否有相同点
-
检测方向为从左向右,从上向下检测
5 消除检测
- 单向三连最好检测,顺序检测临近的颜色即可
- 纵横都存在的情况下,其实纵向和横向单独去检测即可,对于横向不进行纵向忽略,对于纵向,不进行横向忽略(同向忽略已检测的点)
6 添加/塌方
消除产生的空穴,需要及时添加
- 消除后会产生空隙,算出每列上空需要几个新色块来填补空隙。第一个图需要3个 , 剩下两个图需要5个
- 塌方的规则
- 如果塌方上部是死区,则从斜上方下落
- 优先从左上方落下,其次是右上方
- 如果离两斜上方超过一个单位,则从横向挤压
-
不规则形状的塌方方式
-
第二种不规则方式塌方
6.1 开心消消乐的塌方方式是传送,不进行斜向挤压,传送会从上到下穿过阻碍掉落到指定位置,传动也可以分开不同区域,进行错位传送,挺有创意的方法
7 循环
当执行#6时,可能会产生新的可消除元素,这时候,需要进行重复检测
->删除检测->添加->删除检测->
这样循环下去,直到无法删除/无法添加为止