0

六角形の地図で最短の道を見つけるためにA*アルゴリズムを使用しています。しかし、A *アルゴリズムを実装する前に、このバージョンを使用しました。(ユニットをクリックしてください)

すでにA*を使用している最短の場所を見つけるために、ユニットが移動する可能性のあるフィールドをマークするためにA*を使用したいと思います。今、私はそれのためにこの関数を使用します:ここ(58行目)

そして私の質問は、この問題にA *を使用する最良の方法は何ですか?各フィールドへの最短の道を見つけて道の長さを取得し、その長さをユニットの動きと比較する必要がありますか?この解決策は良くなく、非常に遅いです...

より良い解決策について何かアイデアはありますか?

4

1 に答える 1

0

バトルテックのようなゲームでも同様の問題があります。

私が行ったことは A* を実行することですが、「オープン」リストが空 (すべての 16 進数に達した) か、このリストの最小値が無限大 (つまり、16 進数は到達不能) の場合にのみ停止します。これは、「目的地」ヘクスがないようなものです。このソリューションでは、各ヘクスを 1 回だけ渡します (開いているマップで最も低い値の場合)。

次に、計算された16進数で2つのことを行うことができます(クローズドリスト)

  • 値(あなたの場合、長さ)が移動よりも大きいすべてのヘクスを削除します。これにより、ユニットが移動できるヘクスのみが残ります

  • これらのヘックスを保持しますが、長さに応じて異なる色でヘックスを表示します。たとえば、そこに到達するまでのターン数に応じた色 (このターン数は (length-1)%movement) です。現在のユニットのマップ上の任意の (到達可能な) ヘクスへの最速パスを確認できるようになったため、これはプレイヤーにとって便利です。

もう 1 つの可能性は、最小値が動きよりも大きい場合 (つまり、1 ターンで移動できない場合) に、開いているリストの検索を停止することです。これにより、検索で使用する 16 進数の数が制限されます。

よろしく

于 2012-08-30T10:31:27.297 に答える