예제 #1
0
        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();
        }
예제 #2
0
파일: AEstrela.cs 프로젝트: VictorGeorge/SI
        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();
        }