0

昔遊んだウォークラフト3のカスタムゲームをリメイクしてiPhoneに入れています。基本的に、一定量のブロックから迷路を構築するのに一定の時間があり、クリープが迷路を実行するのに時間がかかるほど、より多くのポイントを獲得できます。

私はこれをすべて cocos2d を使ってエアプレイで行っており、現在は a* 経路探索アルゴリズムを入れています。私はJustin Heyes-Jones の実装を使用しており、現在ノード クラスに取り組んでいます。

ただし、いくつかのことが私を混乱させています。クラスは次のようになります。

class MapSearchNode
{
public:
    unsigned int x;  // the (x,y) positions of the node
    unsigned int y; 


    MapSearchNode() { x = y = 0; }
    MapSearchNode( unsigned int px, unsigned int py ) { x=px; y=py; }

    bool IsGoal( MapSearchNode &nodeGoal ) { return (x == nodeGoal.x && y == nodeGoal.y); }
    bool IsSameState( MapSearchNode &rhs ) { return (x == rhs.x && y == rhs.y); }

    float GoalDistanceEstimate( MapSearchNode &nodeGoal );
    float GetCost( MapSearchNode &successor );
    bool GetSuccessors( AStarSearch<MapSearchNode> *astarsearch, MapSearchNode *parent_node );

    //void PrintNodeInfo();
};

GetCost の意味がわかりません。この例の迷路では、X は壁で、_ は歩行可能なエリアです。(3, 1) から (3, 2) に移動するコストは 0 になりますか? そして、(3, 1) から (4, 1) に移動するコストはいくらになるでしょうか? それは不可能なので?

X X _ X X
X _ _ X X
X _ X X X
X _ _ _ _
X X X X X

そして、距離の式を使用して、GoalDistanceEstimate を実装するだけでよいと思いますよね。

4

2 に答える 2

1

私の理解では、コストは「最速のパス」を決定する「合計」でした。コストは、彼らが行かなければならないすべての正方形またはノードに追加されます。これには、地形の制限(速度を落とすなど)なども含まれます。

于 2011-04-27T16:56:51.500 に答える
1

一般的なA*は、加重グラフに基づいています。実際の迷路解決アプリケーションでは、すべてのエッジは、通過可能な地形では同じ有限の重み(通常は1)を持ち、通過できない地形では無限(非常に大きな数として記述され、100000などを使用)になります。

于 2011-04-27T16:58:02.380 に答える