El Laberinto del Puntotauro. Por ¡Tony Stuvo Aky! / Ødrusba ¡Hola amiguetes! Bienvenidos a 'cómo hacer un laberinto con un puntito'. La idea está basada en el laberinto que aparece en el LLFB MUSIC DISK #1, que no me molaba eso de poder pasear el puntero por cualquier sitio para llegar al final. Así que voy a explicar cómo hacer un laberinto como ese, pero sin posibilidad de hacer trampas atravesando los muros. Lo primero que necesitaréis es un laberinto pintado con cualquier programa de dibujo. Para este ejemplo es mejor que sea a dos colores. Lo pintáis dejando el color 0 para los pasillos y el 1 para las paredes. Lo segundo, el AMOS (¡oh no!- dirán algunos). Lo que haremos será cargar el dibujillo en el Amos, y programar unas rutinas de control,de movimiento del puntito, y otra de detección de colisión contra las paredes. Pero vamos a empezar por inicializar la pantalla, poner las variables que vamos a usar, y todo eso... Aquí va el listadoide: * Abrimos la pantalla * Screen Open 0,320,256,2,lowres Curs off: Hide: Paper 0 : Cls * Cargamos el dibujito * Load Iff "Laberinto.Iff" * Declaramos las posiciones X e Y originales * * Dependen del diseño del laberinto * X=4 : Y=4 * El centro de la META * METAX=300 : METAY=230 Ahora haremos la rutina de control, usaremos el Joystick en el Port 2 para el movimiento: * Usamos la variable dirección para saber hacia donde nos movemos * MUEVE=Joy(1) If (MUEVE and 1) and (Y > 0) <--- SUBIMOS Dec Y End If If (MUEVE and 2) and (Y < 255) <--- BAJAMOS Inc Y End If If (MUEVE and 8) and (X < 319) <--- DERECHA Inc X End If If (MUEVE and 4) and (X > 0) <--- IZQUIERDA Dec X End If Con eso ya sabremos hacia dónde movernos, pero no sabremos si hemos chocado o no con un muro. Así que habremos de controlar que el lugar hacia el que nos movemos está libre. Lo haremos con el comando POINT, que nos devuelve el número de pixel indicado en las coordenadas X e Y. Si nos dá 0, estará libre, sino habrá una pared y no realizaremos el movimiento. Quedaría así: If (MUEVE and 1) and (Y > 0) and (Point (X,Y-1)=0) Dec Y End If If (MUEVE and 2) and (Y < 255) and (Point (X,Y+1)=0) Inc Y End If If (MUEVE and 8) and (X < 319) and (Point (X+1,Y)=0) Inc X End If If (MUEVE and 4) and (X > 0) and (Point (X-1,Y)=0) Dec X End If Bueeeno, ya nos chocamos con las paredes. ¿Qué diver, no? Pero nos sigue faltando algo... EL PUNTO. Sí, no se nos vé por ningún sitio. Para lograr un movimiento decente sin hacer un double buffer, lo que haremos será comprobar si hemos movido el joystick. Si no lo hemos hecho, pues no pasa nada, y si lo movimos, borramos la posición anterior. Traducido al Amos, queda así: (( asignar a MUEVE Joy(1) )) If MUEVE Ink 0 Plot X,Y End If (( rutina de control )) Ink 1 Plot X,Y Y para acabar, comprobaremos si se ha llegado a la meta final. Para ello comprobaremos que las coordenadas X e Y están dentro de un rectángulo que corresponderá a la posición del final en el dibujo. O lo hacéis a ojo, o con el programa de dibujo miráis sobre que pixels cae. Así queda: If (X > METAX-10) and (X < METAX+10) and (Y > METAY-10) and misma línea> (Y < METAY+10) Exit End if Los dieces son las dimensiones del lugar. En este caso es de veinte pixels de ancho por veinte de alto. El cuadrado iría de (METAX-10,METAY-10) hasta (METAX+10,METAY+10). Pues ya está. Creo que eso es todo. El listado final quedaría una cosa así: Screen Open 0,320,256,2,lowres Curs off: Hide: Paper 0 : Cls Load Iff "Laberinto.iff" X=4 : Y=4 METAX=300 : METAY=230 Do MUEVE = Joy(1) If MUEVE Ink 0 Plot X,Y End If If (MUEVE and 1) and (Y > 0) and (Point (X,Y-1)=0) Dec Y End If If (MUEVE and 2) and (Y < 255) and (Point (X,Y+1)=0) Inc Y End If If (MUEVE and 8) and (X < 319) and (Point (X+1,Y)=0) Inc X End If If (MUEVE and 4) and (X > 0) and (Point (X-1,Y)=0) Dec X End If Ink 1 Plot X,Y If (X > METAX-10) and (X < METAX+10) and (Y > METAY-10) and misma línea> (Y < METAY+10) Exit End if Wait Vbl Loop Cls Print "¡LO CONSEGUITE! ¡TE HAS GANADO UN POLLIFANTE!" End ¿Fácil, no? Pues ya sabéis, a hacer montones de juegos de laberintos con puntitos. Y si tenéis ganas, les ponéis monstruos zampapuntos para que no sea tan fácil... ¡Hala! ¡A programar! ¡Tony Stuvo Aky! / Ødrusbæ