Death Pit Remake
Un remake parcial de un juego... paso a paso
04.- Presentación. Dos enemigos con distinto comportamiento
El trabajo propuesto
Mostrar la pantalla de presentación hasta que se pulse la tecla de ESPACIO. Cuando se pulse esa tecla, deberá entrarse al juego propiamente dicho. El personaje deberá poder moverse también hacia arriba y hacia abajo. Deberá haber dos enemigos: ambos tendrán la imagen del escorpión, pero uno se moverá a derecha a izquierda, "rebotando" cada vez que llegue a un extremo de la pantalla, y el otro deberá perseguir al personaje.
Forma de conseguirlo
- Lo de la pantalla de presentación es sencillo: creamos un nuevo "ElemGrafico", lo dibujamos en la pantalla oculta, visualizamos dicha pantalla oculta y esperamos con un do..while hasta que se pulse la tecla Espacio (TECLA_ESP)
- Cuando se pulse esta tecla, podemos borrar la pantalla con Hardware.BorrarPantallaOculta(0,0,0); (esos tres números representan la cantidad de Rojo, Verde y Azul que tendrá el color con el que se borra; (0,0,0) indica el color negro.
- Mover arriba y abajo nuestro personaje es igual de fácil que moverlo hacia los lados, pero comprobaremos las teclas Arriba (TECLA_ARR) y Abajo (TECLA_ABA) y modificaremos la coordenada "y".
- Para que el enemigo se mueva a derecha e izquierda, rebotando en los extremos, en vez de aumentar su posición siempre con "x++", podemos sumarle una variable "incremento", que inicialmente valga 1, y cuando llegue a un borde le cambiaremos el sigo, de forma que se convierta en -1 (por lo que retrocederá), luego en +1 (y volverá a avanzar) y así sucesivamente: if ( (xEnemigo >= max) || (xEnemigo <= min) ) incremento = (short) -incremento;
- Y que el otro enemigo nos persiga tampoco debería ser difícil: comparamos su "x" con la de nuestro personaje, y la aumentamos si es menor, o la disminuimos si es mayor (y lo mismo para la "y"): if (x > xEnemigo2 ) xEnemigo2 ++;
En este caso, la apariencia de esta versión nos muestra un fallo, que corregiremos en la siguiente entrega: cuando la imagen del personaje o la del enemigo se mueven arriba o abajo, dejan "rastro", porque la imagen llega exactamente hasta el límite de su recuadro, y no estamos borrando la pantalla entre un "fotograma" y otro:

Podría quedar así:
/** * Juego: L�gica de juego * * @see Hardware * @author 1-DAI IES San Vicente 2009/10 */ /* -------------------------------------------------- Parte de Death Pit - Remake Versiones hasta la fecha: Num. Fecha Por / Cambios --------------------------------------------------- 0.01 08-Sep-2009 Nacho Cabanes Versi�n inicial: muestra una imagen 0.02 07-Oct-2009 Nacho Cabanes Mueve el personaje hacia la derecha hasta llegar al margen 0.03 13-Oct-2009 Nacho Cabanes El personaje se mueve con flechas Un primer enemigo que se mueve a la vez 0.04 16-Oct-2009 Nacho Cabanes Primera pantalla de presentacion El primer enemigo rebota en los lados Un segundo enemigo nos persigue ---------------------------------------------------- */ public class Juego { private static void Main() { // Variables que usaremos: una imagen y un tipo de letra ElemGrafico imagenPersonaje, imagenEnemigo, imagenEnemigo2, presentacion; Fuente fuente18; short x = 100, xEnemigo = 50, xEnemigo2 = 50; short y = 300, yEnemigo2 = 200; short incremento = 1; int min = 0, max = 730; // Inicializo modo grafico 800x600 puntos, 24 bits de color Hardware.Inicializar(800, 600, 24); // Cargo imagenes y tipos de letra imagenPersonaje = new ElemGrafico("imagenes/personaje.png"); imagenEnemigo = new ElemGrafico("imagenes/escorpion.png"); imagenEnemigo2 = new ElemGrafico("imagenes/escorpion.png"); fuente18 = new Fuente("FreeSansBold.ttf", 18); presentacion = new ElemGrafico("imagenes/present.png"); //dibujo la presentacion presentacion.DibujarOculta(); // Finalmente, muestro en pantalla Hardware.VisualizarOculta(); //hasta que se pulse espacio do { } while (! Hardware.TeclaPulsada(Hardware.TECLA_ESP) ); //borro la presentacion Hardware.BorrarPantallaOculta(0,0,0); // Y espero a que se pulse ESC do { // Dibujo el personaje, el enemigo y un texto en la pantalla oculta imagenPersonaje.MoverA( x ,y); imagenPersonaje.DibujarOculta(); imagenEnemigo.MoverA( xEnemigo ,100); imagenEnemigo.DibujarOculta(); imagenEnemigo2.MoverA( xEnemigo2 ,yEnemigo2); imagenEnemigo2.DibujarOculta(); Hardware.EscribirTextoOculta( "Pulsa ESC para salir", 300, 500, 0xAA, 0xAA, 0xAA, fuente18); // Finalmente, muestro en pantalla Hardware.VisualizarOculta(); // Y lo muevo si se pulsa alguna flecha del teclado if (Hardware.TeclaPulsada(Hardware.TECLA_DER) ) x+=4; if(Hardware.TeclaPulsada(Hardware.TECLA_ARR) ) y-=4; if (Hardware.TeclaPulsada(Hardware.TECLA_IZQ) ) x-=4; if (Hardware.TeclaPulsada(Hardware.TECLA_ABA) ) y+=4; // Y muevo siempre al enemigo xEnemigo +=incremento; // El primero rebota en los lados if ( (xEnemigo >= max) || (xEnemigo <= min) ) incremento = (short) -incremento; // y el segundo me persigue if (x > xEnemigo2 ) xEnemigo2 ++; if (x < xEnemigo2 ) xEnemigo2 --; if( y > yEnemigo2 ) yEnemigo2 ++; if ( y < yEnemigo2 ) yEnemigo2 --; // Pausa para 25 fps Hardware.Pausa( 40 ); } while (! Hardware.TeclaPulsada(Hardware.TECLA_ESC) ); } } /* fin de la clase Juego */Siguiente entrega...
Acceso rápido
- 00.- Motivo
- 01.- Esqueleto vacío
- 02.- Un personaje que se mueve solo
- 03.- Personaje que se mueve con teclado. Enemigo simultáneo
- 04.- Presentación. Dos enemigos con distinto comportamiento
- 05.- Varios enemigos iguales
- 06.- Un fondo formado por "casillas" repetitivas (tiles)
- 07.- El personaje se mueve por el laberinto
- 08.- Un fuente más modular
- 09.- Varias pantallas conectadas
- 10.- Un enemigo que se mueve por el laberinto
- 11.- Varias vidas
- 12.- Distintas imágenes según la dirección. Matar enemigos y obtener puntos.
- 13.- Volver a empezar una partida.
- 14.- Rediseño usando objetos
- 15.- Tabla de records (Aún no)
- 16.- Varios tipos de enemigos (Aún no)
- 17.- Leyendo el mapa desde fichero (Aún no)
- 18.- Gastar aire y "energía" (Aún no)
- 19.- Recoger "premios" (Aún no)
- Orig.- Algunos datos sobre el juego original