Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


C# AStar


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 nickem   Members   -  Reputation: 210

Like
0Likes
Like

Posted 28 June 2012 - 10:59 AM

[source lang="csharp"]while(openlist.Count > 0) { current_square = LowestF(openlist); openlist.Remove(current_square); closedlist.Add(current_square); List<Node> path = new List<Node>(); 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<Node> 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!

Sponsor:

#2 alexjc   Members   -  Reputation: 450

Like
1Likes
Like

Posted 28 June 2012 - 02:28 PM

Assuming you're doing this for learning purposes, and not reusing an existing piece of code... My best advice is to write some unit tests incrementally and check all your assumptions. I've found that unit tests provide amazing support for learning new algorithms, languages, and writing new code in general :-)

I realize you wanted someone to debug your program but well... ;-)

Join us in Vienna for the Game/AI Conference 2014, on July 7-10... Don't miss it!


#3 nickem   Members   -  Reputation: 210

Like
0Likes
Like

Posted 28 June 2012 - 02:50 PM

No no no. I didn't want any one o debug it for me, being this is just learning... just maybe thought someone could see something I couldn't after staring at the darn thing for awhile. But I did figure it out:

Changed:
[source lang="csharp"]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);[/source]

To:
while(true)
{

if(current_square.x == start.x)
{
if(current_square.y == start.y)
return path;
}

path.Add(current_square);
current_square = current_square.parent;


}
[source lang="csharp"][/source]

And everything is working as it should! Thanks!




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS