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:

Apariencia de la version 0.04

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...