当前位置: 首页>>代码示例>>C++>>正文


C++ AStarNode::setH方法代码示例

本文整理汇总了C++中AStarNode::setH方法的典型用法代码示例。如果您正苦于以下问题:C++ AStarNode::setH方法的具体用法?C++ AStarNode::setH怎么用?C++ AStarNode::setH使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AStarNode的用法示例。


在下文中一共展示了AStarNode::setH方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Astar

void TileMapScene::Astar(Point S,Point E)
{
	std::set<AStarNode> open;
	std::set<AStarNode> close;
	AStarNode start;
	AStarNode end;
	AStarNode t;
	AStarNode cur;
	int sx = S.x;
	int sy = S.y;
	int ex = E.x;
	int ey = E.y;
	start.setPos(sx,sy);
	start.setG(0);
	start.setH(abs(sx-ex)+abs(sy-ey));
	start.setF(start.g+start.h);
	start.setPPos(sx,sy);
	end.setPos(ex,ey);
	open.insert(start);
	int a[] = {-1, 0, 1, 0, -1,-1, 1, 1};
	int b[] = { 0, 1, 0,-1, -1, 1,-1, 1};
	while(!open.empty())
	{
		cur = top(open);
		close.insert(cur);
		open.erase(cur);
		if(cur == end)
		{
			break;
		}
		CCLOG ("OPENSIZE:%d\n", open.size());
		CCLOG ("CLOSESIZE:%d\n", close.size());
		for(int i = 0; i < 8; ++i)
		{
			if(cur.x + a[i] >= 0 && cur.x +a[i]<=39 && cur.y + b[i] >= 0 && cur.y +b[i]<=39)
			{
				t.setPos(cur.x + a[i], cur.y + b[i]);
				if(i<=3)t.setG(cur.g+1);
				else t.setG(cur.g+1.4);
				t.setH(abs(end.x-t.x)+abs(end.y-t.y));
				t.setF(t.g+t.h);
				t.setPPos(cur.x,cur.y);
				auto oft = open.find(t);
				int block = meta->getTileGIDAt(Vec2(t.x,t.y));
				if(close.find(t)!=close.end()||block)
					continue;
				if(oft==open.end())
				{
					open.insert(t);
				}
				else if(oft->f>t.f)
				{
					open.erase(*oft);
					open.insert(t);
				}
			}
		}
	}
	auto test = close;
	//cur = end;
	while(!(cur==start))
	{
		vec.push_back(cur);
		cur.setPos(cur.px,cur.py);
		cur = *close.find(cur);
	}
	count = vec.size()-1;
}
开发者ID:wayonglee,项目名称:tilemap,代码行数:68,代码来源:TileMapScene.cpp


注:本文中的AStarNode::setH方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。