0 規(guī)則
只要三種同色的在一行或一列即可消除
1 數(shù)據(jù)結(jié)構(gòu)
一個色塊含這些內(nèi)容
- 色塊的類型:type
- 色塊的顏色:color
- 色塊空間位置: Index(row, col)
- 色塊序列位置: IndexCount
- 色塊圖形位置:Position
2 坐標(biāo)轉(zhuǎn)換
色塊的空間魏铅,序列和位置是可以相互轉(zhuǎn)換的
// 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 方陣
二位矩陣,對矩陣作出標(biāo)示坚芜,可以改變二維矩陣為任意形狀
不規(guī)則二維矩陣
4 預(yù)判
-
檢測當(dāng)前點1并檢測同向相隔一格的相同點2览芳,當(dāng)成立后,檢測當(dāng)前臨格的隔壁點3是否為相同點鸿竖,如果符合條件沧竟,說明可消除
-
檢測當(dāng)前點1并檢測相鄰點相同2,當(dāng)成立后千贯,檢測第三個位置的周圍點3是否有相同點
-
檢測方向為從左向右屯仗,從上向下檢測
5 消除檢測
- 單向三連最好檢測,順序檢測臨近的顏色即可
- 縱橫都存在的情況下搔谴,其實縱向和橫向單獨去檢測即可魁袜,對于橫向不進(jìn)行縱向忽略,對于縱向,不進(jìn)行橫向忽略(同向忽略已檢測的點)
6 添加/塌方
消除產(chǎn)生的空穴峰弹,需要及時添加
- 消除后會產(chǎn)生空隙店量,算出每列上空需要幾個新色塊來填補空隙。第一個圖需要3個 鞠呈, 剩下兩個圖需要5個
- 塌方的規(guī)則
- 如果塌方上部是死區(qū)融师,則從斜上方下落
- 優(yōu)先從左上方落下,其次是右上方
- 如果離兩斜上方超過一個單位蚁吝,則從橫向擠壓
-
不規(guī)則形狀的塌方方式
-
第二種不規(guī)則方式塌方
6.1 開心消消樂的塌方方式是傳送旱爆,不進(jìn)行斜向擠壓,傳送會從上到下穿過阻礙掉落到指定位置窘茁,傳動也可以分開不同區(qū)域怀伦,進(jìn)行錯位傳送,挺有創(chuàng)意的方法
7 循環(huán)
當(dāng)執(zhí)行#6時山林,可能會產(chǎn)生新的可消除元素房待,這時候,需要進(jìn)行重復(fù)檢測
->刪除檢測->添加->刪除檢測->
這樣循環(huán)下去驼抹,直到無法刪除/無法添加為止