1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
首先你的合并問題
目前你總是從上到下和從左到右掃描你的瓷磚,與玩家的移動(dòng)無關(guān)。然而,對于 2048,最好在玩家移動(dòng)的相反方向上掃描,因?yàn)榇纱u只會在那個(gè)方向合并。例如,讓我們考慮以下場景:
0 0 2 0 |
0 0 2 2 | Player move
0 2 4 8 v
2 32 4 2
讓我們假設(shè)玩家的移動(dòng)方向是朝向底部,所以我們開始從底部向上掃描。在第三列中,我們需要先合并 4+4,然后再合并 2+2,即自下而上。朝那個(gè)方向前進(jìn),您可以合并 4+4,然后將列的最底部字段標(biāo)記為已合并,從而不允許進(jìn)一步合并(由數(shù)字周圍的括號表示):
0 0 0 0 |
0 0 2 2 | Player move
0 2 2 8 v
2 32 (8) 2
合并最底部的單元格(如果可能)后,我們繼續(xù)處理上面的單元格,依此類推……
0 0 0 0 |
0 0 0 2 | Player move
0 2 (4) 8 v
2 32 (8) 2
[...]
0 0 (0) 0 |
0 0 (0) 2 | Player move
0 2 (4) 8 v
2 32 (8) 2
當(dāng)不再有可能合并時(shí),移動(dòng)結(jié)束,所有“合并”標(biāo)記都被刪除,我們等待下一輪。這種方法解決了您的多重合并問題。
掃描方向的另一個(gè)示例(數(shù)字現(xiàn)在表示循環(huán)將如何通過字段):
Player move
---->
4 3 2 1
8 7 6 5
12 11 10 9
16 15 14 13
關(guān)于你的代碼
查看代碼,您會注意到關(guān)于您的循環(huán)有很多代碼重復(fù)。對于每個(gè)case你做一個(gè)單獨(dú)的嵌套for循環(huán),這不是真正的最佳。相反,您可以執(zhí)行以下操作:
for i := 1; i < height; i++ {
for j := 0; j < width; j++ {
if board[i][j] == 0 {
continue
}
switch input {
case "d":
updateBoardDown(board, i, j)
case "u":
updateBoardUp(board, i, j)
[...]
}
}
}
- 1 回答
- 0 關(guān)注
- 265 瀏覽
添加回答
舉報(bào)