2048 年、プレイヤーはタイルを左右上下にスライドさせようとしました同じ値のタイルを照合してマージします。タイルがマージされると、それらの値が結合されて、より高い値を持つ 1 つのタイルが作成されます。プレイヤーは、それ以上のマージが不可能になりゲームが終了するまで動きを続けます。ただし、タイルを正しく移動することは、特に複数のタイルをマージできる場合に困難になる可能性があります。
processCommand 関数用に提供されたコードでは、タイルの移動は結合の問題の影響を受けます。この問題は、同じ値の 2 つのタイルが互いに隣接しており、プレイヤーがこれらのタイルをマージする可能性のある動きをした場合に発生します。ボードが間違った方向にスキャンされると、タイルは 1 回ではなく 2 回マージされます。
これを解決するにはこの問題を解決するには、プレイヤーの動きの反対方向にボードをスキャンする必要があります。これにより、タイルを結合して結合済みとしてマークすることができ、同じ列または行での後続の結合を防ぐことができます。
たとえば、プレイヤーが上に移動するときは、ボードを下から上に向かってスキャンする必要があります。これにより、最下位のタイルが最初にマージされ、それ以降のマージは防止されます。同様のロジックが他の移動方向にも適用されます。
さらに、提供されたコードでは、それぞれのケースでネストされた for ループ内でコードの重複が見られます。これは、単一の for ループを使用し、switch ステートメントを使用してさまざまなケースを処理することで最適化できます。最適化されたコードの例を次に示します。
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) [...] } } }
この最適化されたコードでは、updateBoardDown() 関数と updateBoardUp() 関数がそれぞれ下方向と上方向のタイルの移動を処理します。同様の機能を左方向と右方向にも実装できます。
以上が2048 ゲームで二重マージを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。