ホームページ  >  記事  >  バックエンド開発  >  2048 ゲームで二重マージを回避するには?

2048 ゲームで二重マージを回避するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 16:15:02852ブラウズ

How to Avoid Double Merging in the 2048 Game?

2048 年のゲームの正しいタイルの動き

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。