Bienvenidos de nuevo a la sexta parte sobre el algoritmo de Pascua.
Ahora, aunque he dicho que el concepto es realmente sencillo, el código no para de avanzar, pero ya casi, casi hemos
terminado.
Creo que podría haber dicho eso en el último vídeo.
De todos modos, con lo que tienes hasta ahora, deberías poder correr.
Así que espero que le hayas echado un vistazo.
Pero si no puedes entender lo que está pasando, vamos a repasarlo contigo.
Así que vamos a pulsar el play y generaremos nuestro laberinto de diez en diez.
Así que aquí está.
Aquí.
Ahora, si pulsamos la tecla P, obtendremos un sistema de nodos de inicio y de finalización.
Ahora, cuando se pulsa C, va a generar posiciones en, ya sabes, para empezar a explorar básicamente.
Veamos si puedo darle la vuelta a esto para que podamos ver los valores en esos nodos.
Ahí lo tienes.
Así que tenemos los valores G, H y F justo ahí.
Ahora, si volvemos a pulsar C, entonces empezaremos a añadir más.
Ahora, cuando un nodo se explora y se pone en cerrado, se vuelve rojo, lo que significa que no lo volvemos a explorar.
Así que seguimos adelante y verás que buscamos en ambas direcciones hasta
encontrar un camino hasta el final.
En ese momento, si sigues pulsando C, no va a pasar nada.
Así que en realidad hemos encontrado el punto aquí es nuestra posición final de esta manera no funcionó, nos quedamos sin.
Y lo que tenemos que hacer ahora es conseguir realmente el camino.
El camino no son todos los nodos rojos, vale, porque están por aquí.
Así que el camino para llegar hasta aquí no implica realmente estos nodos.
Acabamos de buscar en ellos.
El camino se puede encontrar obteniendo el último nodo y volviendo al punto
de partida.
Ahora, en este punto, puede pulsar la tecla p y, debido a la forma en que codificamos esto, puede comenzar
de nuevo y luego trabajar a través de eso a su propio ritmo.
Para entender mejor, podrás ver cómo se actualizan y cambian los valores G,
H y F aquí.
Ahora, si quieres trabajar con un laberinto más grande, también puedes hacerlo.
Así que si hacemos clic en nuestro laberinto y vamos al script recursivo y cambiamos esto a digamos 30 por 30 y luego presionamos play,
verás cómo se comporta el algoritmo en un escenario más grande.
Ahora, por supuesto, tendríamos que alejar el zoom para ver realmente todo, lo que significa
que podrías perder muchos detalles de los valores F, pero puede que eso no te interese.
Así que permítanme hacer clic aquí y le damos a la P, ahí está nuestro inicio y final y luego
pueden darle a la C hasta que sigamos avanzando y avanzando hasta que eventualmente lleguemos al final y encontremos un camino que podría tomar
un poco de tiempo.
Así que no me sentaré aquí y seguiré haciendo eso, pero verás de nuevo cómo tenemos un montón de
nodos cerrados en la búsqueda que está sucediendo aquí, que probablemente no va a ser parte de este camino real para
llegar a este punto.
Y queremos trabajar hacia atrás.
De acuerdo.
Así que esa es la última parte que tenemos que poner en nuestro código es conseguir la ruta.
Cada vez que pulsamos C, vamos a hacer una búsqueda con nuestra última posición.
Ahora, si volvemos a nuestra búsqueda, la última posición se establece al final, que es el marcador
de la lista abierta con el valor más pequeño.
Y entonces si echamos un vistazo a la parte superior y recordamos lo que hicimos es que si pasamos
por este nodo y en realidad es igual al nodo de la meta, sólo va a volver sin hacer nada y establecer hecho
a igual a verdadero.
Así que eso significa que después de haber terminado de encontrar la ubicación de la meta y lo que voy a hacer justo
aquí abajo para asegurarse de que no seguimos tratando de ejecutar que se pone y no se hace.
Básicamente nos va a impedir hacer nada cuando presionemos.
Mira, ahora, ¿qué tenemos en este punto?
Bueno, si echamos un vistazo a un mapa de ejemplo, lo que verás es un montón de nodos cerrados allí, todos
los rojos.
Este no es el camino, como he dicho, estos son sólo todos los que hemos explorado y que podrían estar
en el camino.
Los que están en la ruta son los vinculados por ese valor padre que añadimos aquí arriba.
Así que aquí está nuestro valor padre en nuestro marcador de ruta.
Así que si obtenemos nuestro último nodo, nuestro nodo de ubicación de la meta y lo seguimos hacia atrás hasta su padre, luego obtenemos el padre de
ese y el padre de ese hasta que llegaremos a todo el camino de vuelta al inicio.
En realidad, tendremos nuestro camino estelar.
De acuerdo.
Así que considerando que para cuando esta tecla C ya no funciona y listo.
Es igual a verdadero.
El valor de la última posición va a tener la posición de meta en ella.
Teniendo en cuenta esto, vamos a utilizarlo para retroceder en la lista de padres.
Así que vamos a poner otro IFF aquí, punto de entrada obtener clave hacia abajo y voy a poner el código clave punto m para el mapa en este
caso.
Y si ese es el caso, vamos a tener camino.
Por supuesto, aún no lo hemos escrito, así que estará por encima de la actualización.
Vacío.
Consigue el camino.
Y aquí, lo que voy a hacer es, en primer lugar, eliminar todos los marcadores, lo que significa que hemos eliminado todos esos pequeños
bloques del mapa y podemos poner marcadores justo donde está el camino y obtendremos nuestra posición
inicial.
Así que marcador de camino.
El comienzo es igual a la última pausa.
De acuerdo.
¿No pensaste que iba a ser tan fácil o que te dejaría ir tan fácilmente?
Lo que me gustaría que hicieras como reto es terminar este método.
Así que vas a tener que empezar con la última pausa y hacer un bucle de vuelta a través de todos los padres.
Cada vez que te encuentres con el padre, querrás poner un marcador en el mapa en ese lugar.
Y esto va a suceder cuando se presiona la tecla.
Una vez que hayas pasado por todas las C's y te hayas quedado sin marcadores reales y hayas encontrado
un camino, vale, pues pon en pausa el vídeo y ve a intentarlo.
Y cuando volvamos, te mostraré mi solución.
De acuerdo.
¿Cómo te fue con eso?
Un poco de desafío, pero nada que no pueda manejar.
Voy a utilizar un bucle de pared para el mío.
Así que mientras no estemos en el nodo de partida.
Así que empieza.
El punto del nodo es igual al comienzo.
Así que vamos a empezar.
No es lo mismo que el nodo start y begin no es igual a null.
Así que, con suerte, tenemos un marcador de ruta del que partir.
Si bien esto es cierto, vamos a instanciar.
Un camino pe prefabricado en la posición por lo que el nuevo vector tres y será comenzar ubicación punto x y no se olvide de multiplicar
por nuestro laberinto punto escala cero y luego comenzar punto ubicación punto z multiplicado por la escala de punto de laberinto y luego, por supuesto,
un gatito en.
Identidad de punto.
Sólo para terminar la creación.
Eso crea un bloque o un marcador en esa última pausa.
Ahora queremos subir al padre de la última pausa o en este caso comenzar, porque hemos empezado en el comienzo.
Así que lo que vamos a hacer es decir que empezar ahora es igual a empezar punto padre.
Así.
Bien, genial.
Ahora, una vez que hemos hecho eso, también podemos poner el nodo de inicio allí, el que realmente empezamos,
por si acaso no está en ninguna de estas listas.
Y el nodo de inicio en realidad no tiene padres ni nada, por lo que podría quedar fuera.
Así que voy a instanciar eso.
Camino pea nuevo vector tres inicio nodo punto ubicación punto x multiplicado por nuestro laberinto punto escala cero y nuestro inicio.
Ubicación del punto del nodo y multiplicado por nuestra escala de puntos del laberinto.
Y luego un giro en la identidad.
Bien, ahora, porque estamos haciendo un bucle mientras no somos iguales al inicio, lo que significa que en
realidad tenemos que hacer esto aquí al final y no olvidar poner una coma al final de allí.
Sólo tuve la idea de que esto podría ser un bucle do while, que luego incorporaría eso ahí, y puede
que lo hayas hecho tú mismo.
Así que si lo hiciste, bien hecho y esto es prácticamente todo.
Me he dado cuenta de que tengo una Y en lugar de una Z.
Si se te ocurre algo diferente para este bucle, compártelo en los foros o en el apartado de preguntas y respuestas, dondequiera
que te pongas en contacto con nosotros, porque siempre nos interesa ver cómo otras personas han resuelto los mismos
problemas.
Y como siempre digo, mi código no es el más optimizado o eficiente.
Está hecho para que puedas leer realmente lo que estoy haciendo.
Bien, guardemos eso.
Vamos a volver a la unidad y vamos a probar esto.
Así que, en primer lugar, vamos a hacer el laberinto más pequeño.
Así que vamos a hacerlo como 15 por 15.
Bien, entonces pulsamos el play, con lo que conseguiremos nuestro laberinto.
Pongamos eso en la pantalla para que lo veas.
Ahora pulsamos P, que nos dará nuestras posiciones inicial y final.
Entonces pulsamos C hasta que encontremos un camino.
Y este es el caso.
Es muy fácil.
Entonces, si presionamos M para obtener nuestra ruta, puedes ver que pasa y borra todo
y sólo te deja lo que está en esa lista de rutas.
K Vamos a tener otra oportunidad.
Así que vamos a la P de nuevo.
Esta vez están un poco más lejos y le damos a C hasta agotar la búsqueda o llegar
al final, que vamos a K y entonces le damos a la tecla y nos da nuestro camino de uno a otro
o este va así y por ahí, vale.
Así que este es el algoritmo de la ruta de la estrella representado visualmente para que usted pueda trabajar a través de él, trabajar a
través de los valores y los cálculos de la G y F.
Así que realmente te haces una idea de cómo funciona.
Y créeme, los usos de este particular algoritmo no tienen fin.
Lo vemos todo el tiempo en la IA, así que espero que hayas disfrutado de esta sección y hayas sacado mucho provecho de ella.