Por Nacho Cabanes
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:
Nuestro diagrama de clases ahora incluye una nueva clase, "Créditos":
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...