我正在改造一个古老的魔兽争霸3定制游戏,我过去常常将游戏放回到iphone上。基本上,你有一定的时间来构建一定数量的模块中的迷宫,蠕动运行迷宫所需的时间越长,得到的分数就越多。
我正在使用cocos2d进行播放,现在我正在使用a *寻路算法。我正在使用Justin Heyes-Jones' implementation并正在处理节点类。
然而,有几件事令我困惑。该课程如下:
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,对吗?
答案 0 :(得分:1)
据我了解,成本是确定“最快路径”的“总合计”。为每个他们必须去的广场或节点添加成本。这还可能包括地形限制(例如减慢速度等)。
答案 1 :(得分:1)
一般A *基于加权图。在实际的迷宫解决应用中,所有边缘对于可通过的地形具有相同的有限权重(通常为1),并且无限(写为非常大的数字,仅使用100000或其他)用于不通的地形。