public void Pathfind(Agente agent, Estado inicial, Estado final, Labirinto maze) { Console.WriteLine("Você quer ver a animação? 0 pra não E 1 pra sim"); mostrarAnimacao = Convert.ToInt32(Console.ReadLine()); if (mostrarAnimacao == 1) { maze.mostraLabirinto(); } inicial.h = distEuclidiana(inicial, final); inicial.g = 0; inicial.f = inicial.g + inicial.h; inicial.pai = null; Estado atual; Estado antigo; Estado auxiliar; atual = inicial; antigo = atual; while (atual.posX != final.posX || atual.posY != final.posY) { Console.Clear(); agent.ir(maze, atual, antigo, mostrarAnimacao); if (mostrarAnimacao == 1) { maze.mostraLabirinto(); System.Threading.Thread.Sleep(150); Console.Clear(); } if (atual.posX == final.posX && atual.posY == final.posY) { break; } Vizinhos = olhaVizinhos(maze, atual, final, agent); Vizinhos.Sort((x, y) => x.f.CompareTo(y.f)); // sort auxiliar = Vizinhos[0]; if (auxiliar.f <= atual.f) { antigo = atual; // pega a posição anterior atual = Vizinhos[0]; } Vizinhos.Clear(); } maze.mostraCaminho(atual, maze); //Console.Clear(); maze.mostraLabirinto(); }
public void Pathfind(Agente agent, Estado inicial, Estado final, Labirinto maze) { Console.WriteLine("Você quer ver a animação? 0 pra não E 1 pra sim"); mostrarAnimacao = Convert.ToInt32(Console.ReadLine()); if (mostrarAnimacao == 1) { maze.mostraLabirinto(); } inicial.h = distEuclidiana(inicial, final); inicial.g = 0; inicial.pai = null; Aberta.Add(inicial); Estado atual; Estado antigo; atual = inicial; while (Aberta.Any()) { Console.Clear(); Aberta.Sort((x, y) => x.f.CompareTo(y.f)); // sort antigo = atual; atual = Aberta[0]; Aberta.RemoveAt(0); Fechada.Add(atual); agent.ir(maze, atual, antigo, mostrarAnimacao); if (mostrarAnimacao == 1) { maze.mostraLabirinto(); System.Threading.Thread.Sleep(150); Console.Clear(); } if (atual.posX == final.posX && atual.posY == final.posY) { break; } adicionaVizinhos(maze, atual, final, agent); } maze.mostraCaminho(atual, maze); //Console.Clear(); maze.mostraLabirinto(); }