Sodele... Algo geändert. Er funktioniert auch, aber nicht immer... Das Ding hat bis gerade ganz schöne Kapriolen geschlagen, aber wie soll es auch anders, wenn ich ihm für Bloodstreams negative Kosten geb
Die Kosten sollten jetzt alle stimmen, aber manchmal kommt er leer zurück:
Code:
FStartNode = AStartNode;
FGoalNode = AGoalNode;
FOpenList.Add(FStartNode);
while (FOpenList.Count > 0)
{
// Get best node and move to closed list
AStarNode NodeCurrent = (AStarNode)FOpenList.Pop();
FClosedMatrix[((NetNode)NodeCurrent).Coords.X, ((NetNode)NodeCurrent).Coords.Y] = true;
//FClosedList.Add(NodeCurrent);
// investigate Successors
ArrayList ASuccessors = new ArrayList(4);
NodeCurrent.GetSuccessors(ASuccessors);
foreach (AStarNode NodeSuccessor in ASuccessors)
{
//If Node is Goal, write path and leave
if (NodeSuccessor.IsSameState(FGoalNode))
{
FSolution.Clear();
AStarNode Node = NodeSuccessor;
while (Node != null)
{
FSolution.Insert(0, Node);
Node = Node.Parent;
}
FOpenList.Clear(); // to exit main loop
break;
}
//If Node in Closed List, we skip it
/*bool SkipNode = false;
foreach (AStarNode NodeClosed in FClosedList)
{
if (NodeClosed.IsSameState(NodeSuccessor))
{
SkipNode = true;
break;
}
}
if (SkipNode)
continue;
*/
/*if (FClosedList.Contains(NodeSuccessor))
continue;*/
if (FClosedMatrix[((NetNode)NodeSuccessor).Coords.X, ((NetNode)NodeSuccessor).Coords.Y])
continue;
//If Node in Open List and cost higher, change it, else skip it
AStarNode NodeOpen = null;
foreach (AStarNode N in FOpenList)
{
if (N.IsSameState(NodeSuccessor))
NodeOpen = N;
}
if (NodeOpen != null && NodeOpen.Cost > NodeSuccessor.Cost)
NodeOpen = NodeSuccessor;
else if (NodeOpen == null)
{
FOpenList.Add(NodeSuccessor);
}
}
}
Das ganze auskommentierte Zeug liegt daran, dass ich hier meine Closed-Liste ein wenig umgebaut habe(siehe Link in vorigem Post).
Fällt jemandem ein Fehler auf?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1