private void BuildNodes(List<GraphNode> node_list) { NodeA = new GraphNode() { Name = "A", X = -19, Y = 11, Connections = new Connection[2] }; NodeB = new GraphNode() { Name = "B", X = -13, Y = 13, Connections = new Connection[2] }; NodeC = new GraphNode() { Name = "C", X = 4, Y = 14, Connections = new Connection[3] }; NodeD = new GraphNode() { Name = "D", X = -4, Y = 12, Connections = new Connection[3] }; NodeE = new GraphNode() { Name = "E", X = -8, Y = 3, Connections = new Connection[7] }; NodeF = new GraphNode() { Name = "F", X = -18, Y = 1, Connections = new Connection[2] }; NodeG = new GraphNode() { Name = "G", X = -12, Y = -8, Connections = new Connection[3] }; NodeH = new GraphNode() { Name = "H", X = 12, Y = -9, Connections = new Connection[3] }; NodeI = new GraphNode() { Name = "I", X = -18, Y = -11, Connections = new Connection[2] }; NodeJ = new GraphNode() { Name = "J", X = -4, Y = -11, Connections = new Connection[5] }; NodeK = new GraphNode() { Name = "K", X = -12, Y = -14, Connections = new Connection[3] }; NodeL = new GraphNode() { Name = "L", X = 2, Y = -18, Connections = new Connection[3] }; NodeM = new GraphNode() { Name = "M", X = 18, Y = -13, Connections = new Connection[3] }; NodeN = new GraphNode() { Name = "N", X = 4, Y = -9, Connections = new Connection[3] }; NodeO = new GraphNode() { Name = "O", X = 22, Y = 11, Connections = new Connection[2] }; NodeP = new GraphNode() { Name = "P", X = 18, Y = 3, Connections = new Connection[4] }; node_list.Add(NodeA); node_list.Add(NodeB); node_list.Add(NodeC); node_list.Add(NodeD); node_list.Add(NodeE); node_list.Add(NodeF); node_list.Add(NodeG); node_list.Add(NodeH); node_list.Add(NodeI); node_list.Add(NodeJ); node_list.Add(NodeK); node_list.Add(NodeL); node_list.Add(NodeM); node_list.Add(NodeN); node_list.Add(NodeO); node_list.Add(NodeP); }
private double CalculateDistance(GraphNode start, GraphNode target) { return Math.Sqrt(Math.Pow(target.X - start.X, 2) + Math.Pow(target.Y - start.Y, 2)); }
private void AddToCloseList(GraphNode node) { CloseList.Add(node); }
private void RemoveFromOpenList(GraphNode node) { OpenList.Remove(node); }
private void ProcessNode(GraphNode current_node, GraphNode from_node) { current_node.CostSoFar += CalculateDistance(Start, current_node); current_node.Heuristic = CalculateDistance(current_node, Goal); current_node.CameFrom = from_node; OpenList.Add(current_node); }
private void ProcessConnections(GraphNode current_node) { foreach (Connection connection in current_node.Connections) { if (InList(connection.Target, OpenList) || InList(connection.Target, CloseList)) { double temp_csf = connection.Target.CostSoFar + CalculateDistance(current_node, connection.Target); if (temp_csf < connection.Target.CostSoFar) { ProcessNode(connection.Target, current_node); } } else ProcessNode(connection.Target, current_node); } }
private bool InList(GraphNode looking_for, List<GraphNode> list) { foreach (GraphNode node in list) if (node == looking_for) return true; return false; }