Quiero agregar un desafío pero me temo que éste debe estar muy bien definido antes de comenzar, ya que se presta a muchas confusiones. Se trata de resolver caminos en un laberinto para poder alcanzar a un objetivo que puede estar en movimiento cuyas coordenadas son conocidas y pueden utilizarse para que nuestro sprite se acerque.
Intentaré definir el tipo de laberintos primero.
1) tiene caminos delimitados por muros
2) los muros son como mínimo del ancho de los caminos en grosor
3) los caminos son del ancho de los sprites.
4) debe existir caminos fluidos para que los "sprites" circulen por el laberinto, aunque es posible que haya caminos sin salida (trampas) en forma de U.
Los sprites de ahora en adelante escribiré sin estilo, tienen coordenadas conocidas y son como lo dije antes del tamaño correcto como para caber en los caminos.
Dado que hacer la programación como para dibujar el laberinto, mostrar los sprites y moverlos es avanzado, el desafío se limita al uso de funciones y procedimientos para comprobar y mover. Las funciones son las siguientes:
1) Camino_libre(direccion: byte): boolean; comprueba si es posible mover en la dirección especificada
2) Caminar(direccion: byte); mueve el sprite un paso en la dirección indicada
Las coordenadas del sprite perseguido son XP y YP, mientras que las coordenadas de nuestro sprite son X y Y.
Otras variables necesarias pueden ser creadas libremente (pues de otra manera sería algo complicado).
XXXXXXXXXXXXXXX
X X X X X
X XXX X X XXX X
X X X X X
X X XXXXXXX X X
X X X X
X XXX XX XXXX X
X X X
XXXXXXXXXXXXXXX
Esta muestra con X es algo extremadamente pequeño, pero apenas pueda subiré una imagen clara sobre el caso, claro que siempre y cuando le interese a alguien.
También en breve subo un algoritmo inicial como para que se entienda mejor.
Una comprobación típica es IF (X<XP), que comprueba si la ordenada horizontal de nuestro spritre es menor que la del sprite perseguido. Es decir, si será necesario moverse en dirección de la derecha.
Por último para facilitar la comprensión dejo la codificación de las direcciones:
1. Arriba
3. Derecha
5. Abajo
7. Izquierda
Los pares están reservados para su uso en una función, por ejemplo para comprobar si será necesario tomar la dirección abajo y derecha, que será 4. Claro que el sprite no podrá moverse en diagonal.
Los códigos de direcciones siguen así:
2. arriba y derecha
4. abajo y derecha
6. abajo e izquierda
8. arriba e izquierda
Aclaro una vez más, los sprites no pueden moverse en diagonal.
Espero que les sea de agrado.
Saludos