昔遊んだウォークラフト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 を実装するだけでよいと思いますよね。