Original Post
[source lang="csharp"]while(openlist.Count > 0)
{
current_square = LowestF(openlist);
openlist.Remove(current_square);
closedlist.Add(current_square);
List path = new List();
if(current_square.x == end.x && current_square.y == end.y)
{
path.Clear();
do
{
if(current_square.tile != 100)
{
//current_square.tile = 199;
path.Add(current_square);
current_square = current_square.parent;
}
}while(current_square.x != start.x && current_square.y != start.y);
return path;
}
List sucessors = GetSucessors(current_square);
foreach(Node successor in sucessors)
{
if(closedlist.Contains(successor))
{
continue;
}
if(successor.tile == 100)
{
continue;
}
bool cornerwalkable = true;
if(cornerwalkable == true)
{
if(!openlist.Contains(successor))
{
if(successor.tile == 100)
continue;
successor.h = H(end.x, end.y,successor.x, successor.y);
int addedG = 0;
if(Math.Abs(successor.x - current_square.x) == 1 && Math.Abs(successor.y - current_square.y) == 1)
addedG = 14;
else
addedG = 10;
successor.g = current_square.g + addedG;
successor.f = successor.g + successor.h;
successor.parent = current_square;
openlist.Add(successor);
}
else
{
if(successor.tile == 100)
continue;
int addedG = 0;
if(Math.Abs(successor.x - current_square.x) == 1 && Math.Abs(successor.y - current_square.y) == 1)
addedG = 14;
else
addedG = 10;
int tempG = current_square.g + addedG;
if(tempG < successor.g)
{
successor.parent = current_square;
successor.g = tempG;
}
}
}[/source]
For some reason it's not returning the path everytime. It only happens when there's a wall in between the player and the destination node. The path is only the start node and end node which makes the player walk right through the wall. But most of the time it works. Ha! Cannot figure it out!
{
current_square = LowestF(openlist);
openlist.Remove(current_square);
closedlist.Add(current_square);
List
if(current_square.x == end.x && current_square.y == end.y)
{
path.Clear();
do
{
if(current_square.tile != 100)
{
//current_square.tile = 199;
path.Add(current_square);
current_square = current_square.parent;
}
}while(current_square.x != start.x && current_square.y != start.y);
return path;
}
List
foreach(Node successor in sucessors)
{
if(closedlist.Contains(successor))
{
continue;
}
if(successor.tile == 100)
{
continue;
}
bool cornerwalkable = true;
if(cornerwalkable == true)
{
if(!openlist.Contains(successor))
{
if(successor.tile == 100)
continue;
successor.h = H(end.x, end.y,successor.x, successor.y);
int addedG = 0;
if(Math.Abs(successor.x - current_square.x) == 1 && Math.Abs(successor.y - current_square.y) == 1)
addedG = 14;
else
addedG = 10;
successor.g = current_square.g + addedG;
successor.f = successor.g + successor.h;
successor.parent = current_square;
openlist.Add(successor);
}
else
{
if(successor.tile == 100)
continue;
int addedG = 0;
if(Math.Abs(successor.x - current_square.x) == 1 && Math.Abs(successor.y - current_square.y) == 1)
addedG = 14;
else
addedG = 10;
int tempG = current_square.g + addedG;
if(tempG < successor.g)
{
successor.parent = current_square;
successor.g = tempG;
}
}
}[/source]
For some reason it's not returning the path everytime. It only happens when there's a wall in between the player and the destination node. The path is only the start node and end node which makes the player walk right through the wall. But most of the time it works. Ha! Cannot figure it out!