El trabajo propuesto

A partir de la entrega 14 de Death Pit, añadir una clase "Creditos" que represente una pantalla de créditos (nombres de los autores del programa).

Esta clase debe tener un método Ejecutar, que borrará la pantalla, escribirá los nombres de los autores y mostrará hasta que se pulse una tecla una animación, en la que el escorpión perseguirá al personaje de derecha a izquierda de la pantalla, desapareciendo por el extremo izquierdo y volviendo a aparecer por el extremo derecho.

Se debe llamar desde "Juego", cuando en la "Presentación" se pulse la tecla "C".

La apariencia podría ser:

Apariencia de la version 0.15

Forma de conseguirlo

Nuestro diagrama de clases ahora incluye una nueva clase, "Créditos":

Clases Deathpit 0.15

En la "Presentación", habrá que avisar de que se puede pulsar una nueva tecla, y comprobar si efectivamente se pulsa dicha tecla:


public class Presentacion
{    
    // Opciones posibles
    public const byte OPC_PARTIDA = 0;
    public const byte OPC_SALIR = 1;   
    public const byte OPC_CREDITOS = 2;
 
    ...
 
    public  void Ejecutar()
    {
        //dibujo la imagen de la presentacion
        imagen.DibujarOculta();
 
        // Esscribo avisos de las teclas utilizables
        Hardware.EscribirTextoOculta(
                "Pulsa Espacio para jugar, pulsa T para terminar",
                175, 550, 0xAA, 0xAA, 0xAA, fuenteSans18);
        Hardware.EscribirTextoOculta(
                "o pulsa C para créditos.",
                300, 575, 0xAA, 0xAA, 0xAA, fuenteSans18);
 
        // Finalmente, muestro en pantalla
        Hardware.VisualizarOculta();  
 
        //hasta que se pulse espacio
        do {
 
        } while ((! Hardware.TeclaPulsada(Hardware.TECLA_ESP) )
          && (! Hardware.TeclaPulsada(Hardware.TECLA_T))
          && (! Hardware.TeclaPulsada(Hardware.TECLA_C)));
 
        opcionEscogida = OPC_PARTIDA;
        if (Hardware.TeclaPulsada(Hardware.TECLA_T))
            opcionEscogida = OPC_SALIR;
 
        if (Hardware.TeclaPulsada(Hardware.TECLA_C))
            opcionEscogida = OPC_CREDITOS;
 
        //borro la presentacion
        Hardware.BorrarPantallaOculta(0,0,0);    
 
    } 
 
    ...
 


La clase "Juego" ahora tendrá que preguntar a la Presentación si se ha esogido esa nueva opción:

public class Juego
{
    private Presentacion presentacion;
    private Partida partida;
    private Creditos creditos;
 
 
    // Inicialización al comenzar la sesión de juego
    public Juego()
    {
        // Inicializo modo grafico 800x600 puntos, 24 bits de color
        Hardware.Inicializar(800, 600, 24);
 
        // Inicializo componentes del juego
        presentacion = new Presentacion();
        partida = new Partida();
        creditos = new Creditos();
    }
 
 
 
    // --- Comienzo de un nueva partida: reiniciar variables ---
    public void Ejecutar()
    {    
        do
        {
            presentacion.Ejecutar();
            switch( presentacion.GetOpcionEscogida() )
            {
                    case Presentacion.OPC_PARTIDA: 
                        partida.BuclePrincipal();
                        break;
 
                    case Presentacion.OPC_CREDITOS:
                        creditos.Ejecutar();
                        break;
 
            }
        }
        while (presentacion.GetOpcionEscogida() != Presentacion.OPC_SALIR );
    }
 
    ...
 


Y la clase "Créditos", tendría simplemente un constructor para cargar las imágenes y tipos de letra, y un método "Ejecutar", que mostrara los nombres de los autores y la animación:

/* --------------------------------------------------         
   Parte de Death Pit - Remake
   Versiones hasta la fecha:
 
   Num.   Fecha       Por / Cambios
   ---------------------------------------------------
   0.15  28-Ene-2010  Estibaliz Garcia y Nacho Cabanes
                      Aparece una pantalla de creditos
 ---------------------------------------------------- */
 public class Creditos
{
    // Atributos
    private Fuente fuenteSans18;
    protected short coordenadax, coordenaday;
    protected string[] lineas =
    {
      "PROGRAMA REALIZADO POR:", 
      " ",
      "  Helios Pastor Aracil",    
      "  José Manuel Rizo Alonso",
      "  José Javier Perez Perez",
      "  Alejandro Ferrandiz Lillo",
      "  Joaquín Montoya Ruiz", 
      "  Gemma Vicedo Jover",
      "  Estibaliz García Diego",
      "  Sacha Van de Sijpe Bueno",
      "  Mario Matas Adé",
      "  Juan Antonio Domenech Rubio",  
      "  Jose Carlos Rabasco", 
      "  Fran Asensi",
      "  Diego Ibañez Ortuño",
      "  Ignacio Botte García",
      "  Miguel Rosario Salinas",
      "  Nacho Cabanes"
    };
 
    private ElemGrafico personaje, enemigo;
    private short xPersonaje, yPersonaje, xEnemigo, yEnemigo;
 
    public Creditos()  // Constructor
    {
        fuenteSans18 = new Fuente("FreeSansBold.ttf", 18);
        coordenadax = 200;
        coordenaday = 50;
 
        personaje = new ElemGrafico("imagenes/personajei1.png" );
        xPersonaje = 800; yPersonaje = 450;
        enemigo = new ElemGrafico("imagenes/aranya1.png");
        xEnemigo = 880; yEnemigo = 450;
    }
 
    /// Lanza la pantalla de creditos
    public  void Ejecutar()
    {
      //que borrará la pantalla, escribirá los nombres de los autores 
      /*y mostrará hasta que se pulse una tecla una animación, 
       * en la que el escorpión perseguirá al personaje de derecha a 
       * izquierda de la pantalla, desapareciendo por el extremo izquierdo
       *  y volviendo a aparecer por el extremo derecho.*/
 
    bool salir = false;
 
    // Muestra los nombres y la animacion hasta que se pulse una tecla de ESC
    while (! salir )
    {
      Hardware.BorrarPantallaOculta(0,0,0); // Borro en negro
 
      Hardware.EscribirTextoOculta(
          "Pulsa ESC para volver...",
          100,550,0xAA, 0xAA, 0xAA, fuenteSans18);
 
      // Son varias líneas
      for(int i = 0; i < lineas.Length; i++)
      {
        Hardware.EscribirTextoOculta(
            lineas[i], coordenadax, (short) (coordenaday + i*20),
            (byte) (200 - i*8), (byte) (200 - i*8), (byte) (200 - i*8),
            fuenteSans18);
      }
 
      //Dibuja al personaje y el enemigo siguiendole
      personaje.DibujarOculta(xPersonaje, yPersonaje);
      enemigo.DibujarOculta(xEnemigo, yEnemigo);
 
      xPersonaje -= 5;
      if (xPersonaje < -50) xPersonaje = 800;
 
      xEnemigo -= 5;
      if (xEnemigo < -50) xEnemigo = 800;
 
      Hardware.VisualizarOculta();
      Hardware.Pausa(40);
 
      salir = Hardware.TeclaPulsada (Hardware.TECLA_ESC);
 
    }
  }
 
 
} /* fin de la clase Creditos */
 


Esta vez los cambios son muy sencillos, así que para esta entrega no hay fichero ZIP.

Siguiente entrega...