我用 C++ 开发了一个游戏,并希望确保一切都正确完成。使用 QHashIterator 来检查列表中的哪个项目具有最低值(寻路的 F 成本)是否是一个好的解决方案。
我的代码片段:
while(!pathFound){ //do while path is found
QHashIterator<int, PathFinding*> iterator(openList);
PathFinding* parent;
iterator.next();
parent = iterator.value();
while(iterator.hasNext()){ //we take the next tile, and we take the one with the lowest value
iterator.next();
//checking lowest f value
if((iterator.value()->getGcost() + iterator.value()->getHcost()) < (parent->getGcost() + parent->getHcost())){
parent = iterator.value();
}
}
if(!atDestionation(parent,endPoint)){ //here we check if we are at the destionation. if we are we return our pathcost.
clearLists(parent);
filllists(parent,endPoint);
}else{
pathFound = true;
while(parent->hasParent()){
mylist.append(parent);
parent = parent->getParent();
}
pathcost = calculatePathCost(mylist); //we calculate what the pathcost is and return it
}
}
如果不?有更好的改进吗?
我还发现了一些关于 std::priority_queue 的信息。它比 QHashIterator 更好吗?
对于那些不大的游戏世界来说,这可能不是问题。但是,当游戏世界很大时(例如 + 10000 次计算),我正在寻找合适的解决方案。任何标记?