El trabajo propuesto

El personaje deberá alternar al menos entre dos fotogramas cuando se mueve, para dar una impresión de movimiento más real. Lo mismo deberá ocurrir con el enemigo.

Forma de conseguirlo

La clase "ElementoGrafico" ya tiene soporte para imágenes formadas por varios fotogramas consecutivos, que se guardan en un "array de imágenes". Basta con usar "CargarSecuencia" en lugar de "CargarImagen", e indicar la dirección en la queremos que "mire" inicialmente (tenemos definidas constantes como ARRIBA y ABAJO):

public class Personaje : ElemGrafico
{
 
  public Personaje(Partida p) 
  {
    //Antes era: CargarImagen("imagenes/personaje.png");
    direccion = IZQUIERDA;
    CargarSecuencia( DERECHA, 
      new string[] {"imagenes/personajed1.png",
                    "imagenes/personajed1.png","imagenes/personajed1.png",
                    "imagenes/personajed2.png",
                    "imagenes/personajed2.png","imagenes/personajed2.png"} );
    CargarSecuencia( IZQUIERDA, 
      new string[] {"imagenes/personajei1.png",
                    "imagenes/personajei1.png","imagenes/personajei1.png",
                    "imagenes/personajei2.png",
                    "imagenes/personajei2.png","imagenes/personajei2.png"} );
    CargarSecuencia( ARRIBA, 
      new string[] {"imagenes/personajea1.png",
                    "imagenes/personajea1.png","imagenes/personajea1.png",
                    "imagenes/personajea2.png",
                    "imagenes/personajea2.png","imagenes/personajea2.png"} );
    CargarSecuencia( ABAJO, 
      new string[] {"imagenes/personajea1.png",
                    "imagenes/personajea1.png","imagenes/personajea1.png",
                    "imagenes/personajea2.png",
                    "imagenes/personajea2.png","imagenes/personajea2.png"} );
    ancho =70;
    alto = 50;
    ...
 

En este caso, hemos incluido algunas imágenes repetidas, porque el juego avanzará a 25 fotogramas por segundo, pero no queremos que el personaje cambie de fotograma también 25 veces por segundo. Una forma de conseguirlo sería contando fotogramas y comprobando si ya han pasado tantos como para cambiar de imagen. La alternativa simple, que hemos usado aquí, es mostrar varias veces la misma imagen, con lo que parece que no cambia tan rápido.

A partir de ahora, cuando queramos que el Personaje pase de una imagen (fotograma) a la siguiente, usaremos la función "SiguienteFotograma". Y si queremos que pase de una dirección a otra, usaremos "CambiaDirección". Por ejemplo, la función "MoverDerecha" completa, que cambiara de dirección, se moviera a la pantalla contigua si ya estamos en el extremo derecho, y avanzara un poco, cambiando de fotograma, si no estamos en el extremo derecho de la pantalla (y es posible mover a la derecha) quedaría así:

  public void MoverDerecha() 
  {
      CambiarDireccion(DERECHA);
      if (x >= miPartida.GetMapa().GetMaxX()-5)
      {
        x = 0;
        miPartida.GetMapa().IrAHabitacionDerecha();
        miPartida.RecolocarEnemigo();
      }
      else if (x < miPartida.GetMapa().GetMaxX())
        if (miPartida.GetMapa().EsPosibleMover((short) (x+incrX),y,
          (short) (x+ancho +incrX),(short) (y+alto)))
      {
          x += incrX;
          SiguienteFotograma();
      }
  }
 

De igual modo, podríamos hacer que el enemigo también cambiara de imagen: la secuencia de imágenes la cargaríamos en el constructor de la clase "Escorpión" y cambiaríamos de dirección o de fotograma en el método "Mover", que pertenece a la clase superior, "EnemigoMortal".

Siguiente entrega...