El trabajo propuesto

Seis enemigos (murcielagos) deben moverse de lado a lado a distintas alturas, usando arrays. Borrar la pantalla de juego en cada "pasada" por el bucle principal, para que los personajes no dejen "rastro" al moverse.

Forma de conseguirlo

  • Para tener varios enemigos iguales, basta crear un array de "elementos gráficos": ElemGrafico[] imagenesMurcielagos; que luego inicializaremos con imagenesMurcielagos = new ElemGrafico[6];
  • Cada uno de esos elementos gráficos los inicializamos a partir de su imagen, como hacíamos con el personaje y el otro enemigo: for (i=0; i<6; i++) imagenesMurcielagos[i] = new ElemGrafico("imagenes/murcielago.png");
  • De igual modo, podemos crear una coordenada "x" distinta para cada enemigo, aunque de momento les daremos a todas el mismo valor: short[] xMurcielagos;
  • Usaremos "for" para dibujar todos los murciélagos, para aumentar su coordenada x, etc:for (i=0; i<6; i++) { imagenesMurcielagos[i].MoverA( xMurcielagos[i] , (short) (100+i*70) ); imagenesMurcielagos[i].DibujarOculta(); }
  • Y lo de borrar pantalla ya lo hemos visto antes...

La apariencia sería:

Apariencia de la version 0.05

Y el fuente podría ser:

/** 
 *   Juego: Logica 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
                      Version 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
   0.05  20-Oct-2009  Nacho Cabanes
                      Array de enemigos (murcielagos)
                       que rebotan en los lados
 ---------------------------------------------------- */
 
public class Juego
{
 
    private static void Main()
    {
        // Variables que usaremos: una imagen y un tipo de letra
        ElemGrafico imagenPersonaje,
          imagenEnemigo2, presentacion;
        ElemGrafico[] imagenesMurcielagos;        
        Fuente fuente18;
        int i;
 
        short x = 100, xEnemigo2 = 50;
        short[] xMurcielagos;
        short y = 300, yEnemigo2 = 200;
        short incremento = 1;
        int min = 0, max = 730;
 
        imagenesMurcielagos = new ElemGrafico[6];
        xMurcielagos = new short[6];
 
        // 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");
 
        for (i=0; i<6; i++)
          imagenesMurcielagos[i] = new ElemGrafico("imagenes/murcielago.png");
 
        for (i=0; i<6; i++)
          xMurcielagos[i] = 50;  
 
        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 {
 
          Hardware.BorrarPantallaOculta(0,0,0);
 
          // Dibujo el personaje, el enemigo y un texto en la pantalla oculta
          imagenPersonaje.MoverA( x ,y);
          imagenPersonaje.DibujarOculta();
 
          for (i=0; i<6; i++)
          {
            imagenesMurcielagos[i].MoverA( 
              xMurcielagos[i] , (short) (100+i*70) );
            imagenesMurcielagos[i].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 a los enemigos
          for (i=0; i<6; i++) 
          {
            xMurcielagos[i] +=incremento;
 
            // Los murcielagos rebotan en los lados
            if ( (xMurcielagos[i] >= max) 
                 ||  (xMurcielagos[i] <= 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...