// 0 1 2 3 4 // 0 __ __ __ N6 __ // 1 N3 __ N5 __ __ // 2 __ N2 __ N4 __ // 3 __ __ N1 __ __ // 4 __ __ __ __ __ // // Begin:N1 // Goal:N6 // Links of Nodes: N3<-N2<-N1->N4->N5->N6 // Result way:N1->N4->N5->N6 public static void Main() { try { var G = new Graph(); Node N1 = G.AddNode(2,3,0); Node N2 = G.AddNode(1,2,0); Node N3 = G.AddNode(0,1,0); Node N4 = G.AddNode(3,2,0); Node N5 = G.AddNode(2, 1, 0); Node N6 = G.AddNode(3, 0, 0); G.AddArc(N1,N2,1); G.AddArc(N2,N3,1); G.AddArc(N1,N4,1); G.AddArc(N4,N5,1); G.AddArc(N5, N6, 1); Console.WriteLine( ListNodesAndArcs(G) ); Console.WriteLine("Start:"+N1.ToString()); Console.WriteLine("Goal:" + N6.ToString()); AStar AS = new AStar(G); if (AS.SearchPath(N1, N6)) { foreach (Arc A in AS.PathByArcs) Console.WriteLine(A.ToString()); } else { Console.WriteLine("No result !"); } } catch(Exception e) { Console.Write( "Error :\n\n"+e.ToString() ); } Console.ReadLine(); }
private static void ParseDataIntoGraph() { g = new Graph(); // LOAD NODES for (int y = 0; y <= squareSize_1; y++) { for (int x = 0; x <= squareSize_1; x++) { g.AddNode(nodes[x, y]); } } // LOAD ARCS for (int y = 0; y <= squareSize_1; y++) { for (int x = 0; x <= squareSize_1; x++) { // check up if (y > 0) { g.AddArc(nodes[x, y], nodes[x, y - 1], fileNodes[x, y - 1]); } // check down if (y < squareSize_1) { g.AddArc(nodes[x, y], nodes[x, y + 1], fileNodes[x, y + 1]); } // check left if (x >0) { g.AddArc(nodes[x, y], nodes[x - 1, y], fileNodes[x - 1, y]); } // check right if (x < squareSize_1) { g.AddArc(nodes[x, y], nodes[x + 1, y], fileNodes[x + 1, y]); } } } }
/// <summary> /// Build level graph /// </summary> /// <param name="l"></param> public void LoadData(LevelMapData l) { level = l; //make graph based on map try { MapGraph = new Graph(); MapNodes = new Node[level.Height * level.Width]; // put nodes in graph and array for (int i = 0; i < level.Height * level.Width; i++) { if (level.GetSquareAt(i % level.Width, i / level.Width).type == MapSquareType.Open) { MapNodes[i] = MapGraph.AddNode((i % level.Width) * 16 -8, (i / level.Width) * 16 -8, 0); } } for (int i = 0; i < level.Height * level.Width; i++) { //updown if (i / level.Width > 0) { if (MapNodes[i - level.Width] != null && MapNodes[i] != null) MapGraph.Add2Arcs(MapNodes[i], MapNodes[i - level.Width], 1); } //leftright if (i % level.Width > 0) { if (MapNodes[i - 1] != null && MapNodes[i] != null) MapGraph.Add2Arcs(MapNodes[i], MapNodes[i - 1], 1); } //top left diag if (i % level.Width > 0 && i / level.Width > 0) { if (MapNodes[i - level.Width - 1] != null && MapNodes[i] != null && MapNodes[i - level.Width] != null && MapNodes[i - 1] != null) MapGraph.Add2Arcs(MapNodes[i], MapNodes[i - level.Width - 1], 1); } //top right diag if (i % level.Width < level.Width - 1 && i / level.Width > 0) { if (MapNodes[i - level.Width + 1] != null && MapNodes[i] != null && MapNodes[i + 1] != null && MapNodes[i - level.Width] != null) MapGraph.Add2Arcs(MapNodes[i], MapNodes[i - level.Width + 1], 1); } } } catch (Exception e) { throw e; } }