2

私はPHPでボードゲームを開発していますが、アルゴリズムを書くのに問題があります...

ゲーム ボードは多次元配列 ($board[10][10]) であり、ボードの行列またはベクトルの行と列を定義します...

今、ボード全体をループする必要がありますが、動的な開始点があります。たとえば、ユーザーがセル [5,6] を選択すると、これがループの開始点になります。目標は、移動方法のターゲット セルを見つけるために、選択したセルの周囲にあるすべての使用可能なボード セルを見つけることです。これを行うには、パフォーマンスが高く効率的な方法が必要だと思います。マトリックス/ベクトルをループするアルゴリズムを知っている人はいますか?

追加のルール... 追加された画像では、選択された青いフィールドです (他のフィールドより少し大きいです)。使用可能なフィールドは右側のみです。左側は利用可能ですが、現在選択されている位置からは到達できません...これは、アルゴリズムを少し複雑にする追加情報だと思います....

これまでのところ大きなthx!

敬具

4

2 に答える 2

1

要件が正しいかどうか完全には確信が持てないので、もう一度言います。

n が約 10 の nxn 行列のすべての要素をループする効率的なアルゴリズムが必要です。これは、指定された要素 (i,j) から始まり、(i,j) からの距離によって順序付けられます!?

0 から n/2 までの距離変数 d をループしてから、d の値ごとに l から -(2*d) から +(2*d)-1 までループし、セル (i+d, j +l)、i>=0 の場合、各セルに対して (i+l,jd),(i+l, j+d) も選択し、モジュロ n を適用して負のインデックスをマトリックスにマップし直す必要があります。

これは、マトリックスを基本的にトーラスと見なし、上端と下端、および左端と右端を接着します。

それが気に入らない場合は、d を n まで実行し、モジュロ演算の代わりに、マトリックス外の値を無視することができます。

これらのアプローチにより、フィールドが正しい順序で直接提供されます。小さなフィールドの場合、このレベルでの最適化がほとんどの状況で大きな影響を与えるとは思えませんが、ニコラスのアプローチも同様に優れている可能性があります。

更新 「現在の列または同じ列にあるフィールドのみを考慮する」というルールを順守するために、選択するセルをわずかに変更しました

于 2013-02-22T09:53:09.020 に答える
0

マップが 10x10 しかない場合は、[0][0] からループして、プレイヤーが移動できるすべてのスペースを収集し、現在のプレイヤーの位置までの距離によってスペースをグレーディングします。N は小さいので、アルゴリズムに O(N^2) があるという事実は、パフォーマンスに大きな影響を与えるべきではありません。

アルゴリズムのバックグラウンドを持っている人は、何かを秘めているかもしれません。

于 2013-02-22T09:39:52.950 に答える