0 規(guī)則
只要三種同色的在一行或一列即可消除
1 數(shù)據(jù)結(jié)構(gòu)
一個(gè)色塊含這些內(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 方陣
二位矩陣,對(duì)矩陣作出標(biāo)示,可以改變二維矩陣為任意形狀

不規(guī)則二維矩陣

4 預(yù)判
-
檢測(cè)當(dāng)前點(diǎn)1并檢測(cè)同向相隔一格的相同點(diǎn)2,當(dāng)成立后,檢測(cè)當(dāng)前臨格的隔壁點(diǎn)3是否為相同點(diǎn),如果符合條件,說(shuō)明可消除
-
檢測(cè)當(dāng)前點(diǎn)1并檢測(cè)相鄰點(diǎn)相同2,當(dāng)成立后,檢測(cè)第三個(gè)位置的周圍點(diǎn)3是否有相同點(diǎn)
-
檢測(cè)方向?yàn)閺淖笙蛴?,從上向下檢測(cè)
5 消除檢測(cè)
- 單向三連最好檢測(cè),順序檢測(cè)臨近的顏色即可
- 縱橫都存在的情況下,其實(shí)縱向和橫向單獨(dú)去檢測(cè)即可,對(duì)于橫向不進(jìn)行縱向忽略,對(duì)于縱向,不進(jìn)行橫向忽略(同向忽略已檢測(cè)的點(diǎn))

6 添加/塌方
消除產(chǎn)生的空穴,需要及時(shí)添加
- 消除后會(huì)產(chǎn)生空隙,算出每列上空需要幾個(gè)新色塊來(lái)填補(bǔ)空隙。第一個(gè)圖需要3個(gè) , 剩下兩個(gè)圖需要5個(gè)
- 塌方的規(guī)則
- 如果塌方上部是死區(qū),則從斜上方下落
- 優(yōu)先從左上方落下,其次是右上方
- 如果離兩斜上方超過(guò)一個(gè)單位,則從橫向擠壓

-
不規(guī)則形狀的塌方方式
-
第二種不規(guī)則方式塌方
6.1 開(kāi)心消消樂(lè)的塌方方式是傳送,不進(jìn)行斜向擠壓,傳送會(huì)從上到下穿過(guò)阻礙掉落到指定位置,傳動(dòng)也可以分開(kāi)不同區(qū)域,進(jìn)行錯(cuò)位傳送,挺有創(chuàng)意的方法
7 循環(huán)
當(dāng)執(zhí)行#6時(shí),可能會(huì)產(chǎn)生新的可消除元素,這時(shí)候,需要進(jìn)行重復(fù)檢測(cè)
->刪除檢測(cè)->添加->刪除檢測(cè)->
這樣循環(huán)下去,直到無(wú)法刪除/無(wú)法添加為止




