Bem-vindo de volta à parte seis sobre o algoritmo da Páscoa.
Agora, embora eu tenha dito que o conceito é realmente simples, o código continua e continua, mas estamos quase, quase
acabando.
Acho que poderia ter dito isso no último vídeo.
De qualquer forma, o que você tem até agora, você deve ser capaz de correr.
Portanto, espero que você tenha dado uma pequena olhada nisso.
Mas se você não conseguia entender o que estava acontecendo, vamos fazer isso com você.
Então vamos brincar com a imprensa e vamos gerar nossos dez por dez labirintos.
Portanto, aqui está ele.
Aqui.
Agora, se pressionarmos a tecla P, teremos um sistema de nó inicial e final sentados lá dentro.
Agora, quando você atingir C, vai gerar posições sobre, você sabe, para começar a explorar basicamente.
Vamos ver se eu consigo dar a volta a isso para que possamos ver os valores nesses nós.
Aí está.
Portanto, temos os valores G, H e F ali dentro.
Agora, se atingirmos C novamente, então começaremos a acrescentar mais.
Agora, quando um nó é explorado e colocado fechado, ele se torna vermelho, o que significa que não o exploramos novamente.
Então, continuamos e você verá que estamos procurando em ambas as direções até
encontrarmos um caminho até o final.
Nesse ponto, se você continuar batendo em C, nada vai acontecer.
Então, na verdade, descobrimos aqui que nossa posição final desta forma não funcionou, nós corremos para fora.
E o que temos que fazer agora é realmente conseguir o caminho.
O caminho não é todo dos nós vermelhos, ok, porque eles estão aqui.
Portanto, o caminho para chegar até aqui não envolve realmente estes nós.
Acabamos de pesquisar através deles.
O caminho pode ser encontrado pegando o último nó e realmente trabalhando em nosso caminho de volta ao local de
onde começamos.
Agora, neste ponto, você pode bater a tecla p e, devido à maneira como codificamos isto, você pode começar
de novo e depois trabalhar com isso em seu próprio ritmo.
Para obter uma melhor compreensão, você poderá ver como os valores G, H e F são atualizados e alterados
aqui.
Agora, se você quiser trabalhar com um labirinto maior, você pode fazer isso também.
Portanto, se clicarmos em nosso labirinto e entrarmos no roteiro recursivo e mudarmos isso para dizer 30 por 30 e depois pressionarmos
play, você verá como o algoritmo se comporta em um cenário maior.
Agora, é claro, teríamos que ampliar para ver realmente tudo, o que significa que você
pode perder muito dos detalhes dos valores F, mas pode não estar interessado nisso.
Então, deixe-me clicar aqui e chegamos ao P, aí está nosso começo e fim e então você
pode simplesmente chegar ao C até que continuemos e continuemos até chegarmos ao fim e encontrarmos um caminho que pode levar um
pouco de tempo.
Portanto, não vou sentar aqui e continuar fazendo isso, mas vocês verão novamente como temos muitos
nós fechados na busca que está acontecendo aqui, o que provavelmente não vai fazer parte deste caminho real para chegar
a este ponto.
E nós queremos trabalhar ao contrário.
Certo.
Portanto, esse é o último pedaço que realmente temos que colocar em nosso código é conseguir o caminho.
Cada vez que pressionamos C, vamos fazer uma busca com nossa última posição.
Agora, se voltarmos à nossa busca, a última posição é definida no final, que é o marcador
da lista aberta com o menor valor.
E então, se olharmos para o topo e lembrarmos o que fizemos é que se passarmos por este nó e ele estiver
realmente à altura do nó de objetivo, ele simplesmente retornará sem fazer nada e se colocará em pé de igualdade
com a verdade.
Isso significa que depois de termos terminado de encontrar o local da meta e o que eu vou fazer aqui para ter
certeza de que não vamos continuar tentando correr o que está colocado e não feito.
Basicamente, isso vai nos impedir de fazer qualquer coisa quando pressionamos.
Veja, agora, o que temos a esta altura?
Bem, se olharmos para um mapa de exemplo, o que você verá é um monte de nós fechados ali, todos os vermelhos.
Este não é o caminho, como eu disse, estes são apenas todos os caminhos que exploramos e que possivelmente podem
estar no caminho.
Os que estão no caminho são os que estão ligados por esse valor de pais que somamos aqui mesmo.
Portanto, aqui está nosso valor paternal em nosso marcador de caminho.
Portanto, se conseguirmos nosso último nó, nosso nó de localização de objetivo e o seguirmos de trás para frente até seu pai, então
pegue o pai daquele e o pai daquele até que você volte ao início.
Na verdade, teremos nosso caminho estrelado.
Certo.
Portanto, considerando o tempo em que esta chave C já não funciona mais e está pronta.
É igual a verdade.
O valor da última posição vai ter a posição de objetivo nela.
Levando isso em consideração, vamos usar isso para retroceder através da lista dos pais.
Portanto, vamos colocar aqui outra IFF, coloque um ponto de entrada para baixar a chave e eu colocarei um ponto de código m para o mapa, neste
caso.
E então, se for esse o caso, vamos conseguir o caminho.
É claro que ainda não escrevemos isso, portanto, isso vai estar acima da atualização.
Vazio.
Trace o caminho.
E aqui, o que vou fazer é, antes de mais nada, remover todos os marcadores, o que significa que já limpamos todos aqueles pequenos blocos
do mapa e podemos realmente colocar os marcadores exatamente onde está o caminho e vamos conseguir nossa
posição inicial.
Portanto, marcador de caminho.
O início é igual à última pausa.
Certo.
Agora, você não achou que seria tão fácil ou que eu o deixaria sair tão facilmente?
O que eu gostaria que você fizesse como um desafio é terminar este método.
Portanto, você vai ter que começar com a última pausa e fazer um loop up de alguma forma através de todos os pais.
Cada vez que você encontra o pai, você quer colocar um marcador no mapa naquele local.
E isto vai acontecer quando você pressionar a tecla.
Uma vez que você tenha passado por todos os C's e ficou sem marcadores reais e encontrou um caminho,
ok, então faça uma pausa no vídeo agora e dê uma chance.
E quando voltarmos, eu lhe mostrarei minha solução.
Certo.
Como você reagiu a isso?
Um pouco de desafio, mas nada que tenho certeza de que você não consiga lidar.
Vou usar um laço de parede para o meu.
Portanto, embora não estejamos no nó inicial.
Então comece.
O ponto do nó é igual ao início.
Então, vamos começar.
Não é o mesmo que o nó inicial e o início não é igual a nulo.
Portanto, esperamos ter um marcador de caminho a partir do qual possamos realmente começar.
Embora isto seja verdade, vamos instanciar.
Um caminho pe pré-fabricado na posição tão novo vetor três e será começar localização ponto x e não se esqueça de multiplicá-lo
por nosso labirinto escala ponto zero e depois começar localização ponto z multiplicado por escala ponto labirinto e depois, é claro,
um gatinho dentro.
Identidade do ponto.
Apenas para terminar a criação.
Agora isso cria um bloco ou um marcador naquela última pausa.
Queremos agora chegar ao pai da última pausa ou, neste caso, começar, porque já começamos no início.
Portanto, o que vamos fazer é dizer que começar agora é igual a começar ponto pai.
Assim.
Muito bem, ótimo.
Agora, uma vez feito isso, podemos também colocar ali o nó inicial, aquele de onde realmente partimos,
caso não esteja em nenhuma dessas listas.
E o nó inicial na verdade não tem pais nem nada, por isso pode ser deixado de fora.
Portanto, vou apenas instanciar isso.
Caminho ervilha novo vetor três ponto de localização do nó de partida ponto x multiplicado por nosso labirinto escala ponto zero e nossa partida.
Localização do ponto do nó e multiplicado por nossa escala de pontos do labirinto.
E depois uma reviravolta na identidade.
Ok, agora, porque estamos fazendo looping enquanto não estamos à altura do início, o que significa que realmente
temos que fazer isso aqui no final e não esquecer de colocar uma vírgula no final.
Acabei de ter a idéia de que isto poderia ser um loop, que então incorporaria isso ali, e você
mesmo pode ter feito isso.
Portanto, se o fez, bem feito e é praticamente isso.
Percebi que só tenho lá um Y em vez de um Z.
Se você tiver encontrado algo diferente para este loop, por favor, compartilhe-o nos fóruns ou nas perguntas e respostas
onde quer que você possa entrar em contato conosco, pois estamos sempre interessados em ver como outras pessoas resolveram
os mesmos problemas.
E como eu sempre digo, meu código não é o mais otimizado ou eficiente.
É construído para que você possa realmente ler o que estou fazendo.
Ok, então vamos guardar isso.
Vamos voltar à unidade e vamos experimentar isto.
Portanto, antes de mais nada, vamos ao labirinto e torná-lo menor novamente.
Portanto, vamos fazer como 15 por 15.
Pronto, então pressionamos o jogo, o que nos dará nosso labirinto.
Vamos apenas colocar isso na tela para que você possa vê-lo.
Agora atingimos P, o que nos dará nossas posições inicial e final.
Em seguida, atingimos C até encontrarmos realmente um caminho.
E este é o caso.
É bastante fácil.
Então, se chegarmos a M para pegar nosso caminho, você pode ver que ele passa e apaga tudo e apenas
deixa você o que está nessa lista de caminhos.
K Vamos fazer outra tentativa.
Então vamos para P novamente.
Eles estão um pouco mais longe desta vez e batemos em C até esgotarmos nossa busca ou chegarmos
ao fim, que vamos para K e depois batemos na chave e isso nos dá nosso caminho de um para o outro ou
este vai assim e por ali, ok.
Portanto, este é um algoritmo de caminho estelar representado visualmente para que você possa realmente trabalhar através dele, trabalhar
através dos valores e dos cálculos do G e F.
Assim, você realmente se dá conta de como isso funciona.
E acredite em mim, não há fim para os usos deste algoritmo em particular.
Vemos isso o tempo todo na IA, então espero que você tenha gostado muito desta seção e que tenha conseguido muito com ela.