私はキューブの表面上で再生するsnake gameを構築しています。現在は、経路探索のためのDijkstraのアルゴリズムを使用しています。セットと優先順位キューのデータ構造による最適化にもかかわらず、それはまだ少し遅いです。蛇が食べ物を食べて新しいものを探し始めると、あなたは遅れを感じます。キューブ表面の発見的なPathfindingアルゴリズムヒューリスティック
代わりにA *を使用しようとしていますが、優れたヒューリスティックは見つかりません。 4方向の動きのあるフラットグリッドでは、マンハッタンの距離を使用します。私は良い理由のために働かなかった3Dマンハッタン距離abs(dx) + abs(dy) + abs(dz)
を使用してみました:蛇に、ゲーム世界は実際には珍しいラップアラウンドプロパティを持つ6 grids (corresponding to the faces of the cube)です。
コードでは、各正方形はgrid[15][15]
2D配列に格納されています。各面を格納する配列は6つあります。したがって、各四角形には、2次元配列のオフセットを記述し、どの配列を指定するのかを示す(arrayX, arrayY, d)
トリプルがあります。また、各正方形は、空間的位置を表す三つ組の三角形を有する。
ここで経路探索が発生したゲームコードのエリアです:
https://github.com/mhluska/Snakeception/blob/master/src/js/game.coffee#L105
はここ*のためのライブラリのコードです:
https://github.com/mhluska/Stimpack/blob/master/src/js/graph.coffee#L60
これに適した、簡潔なヒューリスティックは何ですかゲームの世界?
あなたのグラフは、2D +の形をしたグリッドと考えることができます。したがって、A *のあなたのヘリオリズムは、ちょっとした値の最小値を取ります*(1D最初にラップするグリッド)*。しかし、1000ノードしかないので、Javascriptでもこれは本当に必要ではありません。あなたのコードの一部(またはおそらくあなたが使用しているデータ構造)は、**道**を実行するには長すぎます。どの回線が減速の原因になっているかを判断するには、プロファイリングを行う必要があります.1000ノードを目に見えない遅延なく簡単に検索することができます。 –