DESARROLLO DE UN JUEGO EN JAVA CON AWT (IV)

Hoy planteamos el inicio de la codificación. Trabajaremos siguiendo el patrón Modelo-Vista-Controlador o MVC abreviado.
En esta entrega desarrollaremos el proyecto a nivel de Menú principal y para probar la gestión de eventos, también el Top Ten.
Comencemos.

Lo primero, desde Eclipse, creamos un proyecto nuevo llamado Juego. Nuestro proyecto consistirá en un programa principal donde se crearán un único modelo y un único controlador. Adicionalmente, tendremos 6 vistas, una por pantalla (Ver Entrada II del Blog del 8 de Julio de 2020) que serán creadas a posteriori.
A este proyecto, añadiremos ahora una clase llamada Inicio dentro del paquete es.studium.Juego:
Cuando ejecutemos este proyecto, esta será la clase que contenga el procedimiento principal (main) y por tanto será el que se inicie en primer lugar.
Su código será el siguiente:
Si tenemos solamente este código, nos saldrán varios errores, ocasionados porque aún no existen las clases de las que estamos haciendo uso (Modelo, VistaPrincipal y Controlador).
De momento, debemos tener lo siguiente como mínimo, para visualizar una primera aproximación al programa:
Clase Modelo:

Clase Controlador:

Clase VistaPrincipal:
Con un resultado similar a este:

El resto de clases las iremos completando en siguientes apartados;y añadiendo otras que aún falta, sobre todo Vistas.
No quiero acabar esta entrada sin dejar una mínima funcionalidad de los botones. Las desarrollaremos de más fácil a más complicada.
Primero, el botón de "Salir", al igual que la X del Frame.
Dado el carácter modular del patrón MVC, solamente tenemos que trabajar sobre la clase Controlador, implementando los dos interfaces necesarios para poder cerrar la ventana (Frame) y poder interactuar con los botones oportunos (btnSalir). Debemos importar las clases oportunas, añadir los Listeners necesarios, incluir los métodos de las dos interfaces, tanto de WindowListener como de ActionListener y darle funcionalidad a los métodos concretos, es decir, el actionPerformed() y el windowClosing().
Clase Controlador:
Si ejecutamos ahora, ya podemos cerrar el programa, tanto en la X de la propia ventana de la aplicación, como pulsando el botón "Salir".
Seguimos con el "Top 10".
Esta tarea implica:
  1. Crear una clase que represente la vista de la pantalla.
  2. Añadir los Listeners oportunos.
  3. Dar funcionalidad.
Primero debemos crear una nueva clase, a la que llamaremos VistaTopTen; tendrá el siguiente código y la siguiente apariencia:

Para que aparezca y se cierre (pulsando la X o el botón "Volver") debemos añadir unas líneas al Controlador, que están marcadas con un comentario // Top Ten:

NOTAS:
  • Línea 11: Declaramos un objeto de la clase recién creada.
  • Línea 17: Damos funcionalidad al botón de la VistaPrincipal para que despliegue esta nueva vista.
  • Líneas 29 a 35: Código a ejecutar al pulsar el botón "Top Ten":
    • Crea el objeto vtt, antes declarado.
    • Le añade el listener correspondiente para que se pueda cerrar la ventana nueva.
    • Le añade el listener al botón de "Volver".
    • Muestra la ventana creada.
  • Líneas 36 a 39: Gestión del botón de "Volver" de la nueva ventana VistaTopTen.
  • Líneas 53 a 60: Debemos hacer una modificación al método windowClosing() pues ahora entraremos aquí desde diversos sitios; cada vez que pulsemos una X de alguna ventana (Vista o Frame). Así que debemos articular algún método para diferenciar qué X se ha pulsado y qué hacer al respecto.
En entregas posteriores haremos que dentro del TextArea aparezca la información obtenida de la base de datos a través de algún método del Modelo.

Y ahora "Partida Nueva".
Aquí radica la gran funcionalidad del programa, por lo que en esta entrega nos limitaremos a establecer los principios básicos y las vistas necesarias hasta llegar justo antes de comenzar la partida; preguntaremos el número de jugadores y los nombres de los mismos, y nos quedaremos justo antes de dar funcionalidad al botón de "Comenzar la Partida".
Crearemos una nueva clase llamada PartidaNueva que será una Vista (Frame) que funcionará como el tablero del juego con dos diálogos, uno para pedir el número de jugadores, otro para pedir los nombres de cada jugador. Su codigo sería tal que así:


NOTAS:
  • Líneas 14 a 30: Declaramos todos los elementos gráficos que compondrán la vista, los diálogos que aparecerán en sucesivas ocasiones, así como algunas variables auxiliares como la que guardará el número de jugadores, o los nombes de éstos.
  • Líneas 32 a 47: El constructor de la clase, donde establecemos:
    • color de fondo,
    • distribución de la vista (Frame),
    • tamaño de la ventana,
    • contenido del desplegable
  • Líneas 49 a 52: Método para mostrar el diálogo que nos preguntará por el número de jugadores de la partida.
  • Líneas 54 a 57: Método para ocultar el diálogo anterior.
  • Líneas 59 a 112: Método que prepara el diálogo que nos pregunta por los nombres de los jugadores. La cantidad de estos vendrá definida por lo que se haya elegido en el cuadro de diálogo del desplegable y es por ello, por lo que debemos hacer diversas comprobaciones para averiguar qué cantidad de cuadros de texto debemos mostrar y resetear el contenido de los mismos por si volvemos a este diálogo en sucesivas ocasiones. Por último, llamamos al método que muestra el diálogo.
  • Líneas 114 a 117: Método que muestra el diálogo que pregunta los nombres de los jugadores.
  • Líneas 119 a 122: Método que oculta el diálogo anterior.
Obviamente, debemos hacer algunos añadidos al Controlador para que todo esto funcione. Para no mostrar de nuevo TODO el código de esta clase, nos limitamos a indicar las líneas en las que debemos insertar las instrucciones necesarias, que vendrán indentificadas por el comentario // Partida Nueva:



Como podemos observar, la funcionalidad principal se centra, cómo no, en el método que gestiona los botones que vamos pulsando, el actionPerformed(). La idea es la siguiente:
  • Líneas 41 a 46: En la VistaPrincipal, al pulsar el botón de "Partida Nueva", se muestra el diálogo para pedir el número de jugadores mediante un desplegable y un botón de "Continuar...".
  • Líneas 47 a 55: Se ha pulsado el botón anterior, y se llama al método que prepara el siguiente diálogo pasándole como parámetro el número de jugadores. Este método prepara el contenido del diálogo en función de este valor pasado y muestra dicho diálogo. 
  • Líneas 56 a 70: Entre los componentes del diálogo anterior, hay un botón para "Comenzar Partida", que pulsaremos una vez tengamos escritos los nombres de los jugadores. Si se queda algún nombre en blanco no se puede comenzar la partida. Si todo es correcto, de momento, simplemente mostraremos por consola el mensaje "Comienza la partida...".
  • Líneas 88 a 101: Controlamos si se pulsa X en los diferentes diálogos mostrados, así como la eliminación de ciertos Listeners y el reseteo del desplegable.
La ejecución desde la pantalla principal sería algo similar a esto:


Con esto finalizamos esta entrega. La funcionalidad de la partida propiamente dicha, la veremos en la próxima entrega.

NOTA: El botón de "Ayuda" lo describiremos en otra entrada, pues primero, debemos desarrollar un fichero de ayuda (chm).


Comentarios

Entradas populares