挑戰2048遊戲演算法分析
阿新 • • 發佈:2019-01-27
2048遊戲核心規則:
一行或者一列的相鄰相同數字的塊相加,每個方塊只參與一次運算,例如某行方塊從左往右為2,2,2,4,則向左拖動一次後運算結果為4,4,0,0,(0代表空白塊,即沒有顯示數字的塊),而不是6,4,0,0.,記住,每一個非空白塊都是2的N次方,如果不是,說明演算法有誤。
產生新方塊的規則:
每拖動一次(上、下、左、右),都要檢查是否有可以進行相加或者移動的方塊,如果有進行相加移動,並切在相加移動之後在剩餘的幾個空白處,隨機產生一個2或者4的方塊;如果拖動一次沒有導致任何的移動或者相加,則不產生新的方塊。
判斷遊戲結束的規則:
在每次拖動後、檢查產生新方塊,然後判斷是否還有空白塊,如果有空白塊,則遊戲未結束。如果沒有空白塊,則遊戲可能已經結束了,記住是可能,不是一定結束了。還需判斷是否有可以相加的方塊,如果沒有,那遊戲就真的結束了,如果還可以相加,那就繼續吧。
2048遊戲演算法實現:
相加並移動的演算法:以向左移動為例進行分析,例如某行數字為0,2,0,4,則向左移動後,變成了2,4,0,0看起來,像是把非0的數字排到了前廟,0挪到了後面,其實就是這樣,演算法中也是先用這種方式將非0的方塊移動到前端,演算法中稱此操作為移動緊促。在移動緊促後,然後進行相加,在加法完成後,需要再次移動緊促,到此就完成了一行資料的移動操作,迴圈各行,執行相同的操作。
對於向右移動,演算法中只需要把一行的數字塊,從右往左取出,然後執行向左操作類似的移動緊促->相加->移動緊促操作。
對於向上(下)移動,只需要把一列的數字,從上往下(從下往上)取出,執行型別的操作即可。
以下是遊戲介面,下一篇文章我將附上部分程式碼,敬請關注!