2048 年、プレイヤーはタイルを左、右、上、または下にスライドさせて次のことを試みました。同じ値のタイルを一致させてマージします。タイルがマージされると、それらの値が結合されて、より高い値を持つ 1 つのタイルが作成されます。プレイヤーは、それ以上のマージが不可能になりゲームが終了するまで動きを続けます。ただし、タイルを正しく移動することは、特に複数のタイルを結合できる場合に困難になる可能性があります。
processCommand 関数用に提供されたコードでは、タイル移動にはマージの問題が発生します。この問題は、同じ値の 2 つのタイルが互いに隣接しており、プレイヤーがこれらのタイルをマージする可能性のある動きをした場合に発生します。ボードが間違った方向にスキャンされると、タイルは 1 回ではなく 2 回結合されます。
この問題を解決するには、プレイヤーの動きと逆方向にボードをスキャンする必要があります。これにより、タイルを結合し、結合済みとしてマークすることができ、同じ列または行での後続の結合を防ぐことができます。
プレーヤーが上に移動するとき、たとえば、ボードを下から上に向かってスキャンする必要があります。これにより、最下位のタイルが最初にマージされ、それ以降のマージは防止されます。同様のロジックが他の移動方向にも適用されます。
さらに、提供されたコードでは、それぞれのケースでネストされた for ループ内にコードの重複が見られます。これは、単一の for ループを使用し、switch ステートメントを使用してさまざまなケースを処理することで最適化できます。最適化されたコードの例を次に示します。
for i := 1; iこの最適化されたコードでは、updateBoardDown() 関数と updateBoardUp() 関数がそれぞれ下方向と上方向のタイルの移動を処理します。同様の機能を左方向と右方向にも実装できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3