sábado, 31 de agosto de 2013

Buscaminas en Java usando swing

Este post tiene como finalidad mostrar como desarrollar un juego como el Buscaminas usando Java y la librería gráfica Swing, sin necesidad de usar Java2d.


El código expuesto no esta mejorado ni optimizado al 100%, por supuesto que tiene partes que podremos mejorar, eso os lo dejo a vosotros, el objetivo es al aprendizaje del lenguaje Java y las librerías y utilidades que nos ofrece.


Conocimientos necesarios:



- Lenguaje Java.
- Conocimientos básicos MVC.
- Conocimientos básicos de las librerías Swing y AWT.
- Eventos.
- Entrada/Salida de ficheros.
- Colecciones.
- Control de excepciones.
- Hilos (Thread).



El funcionamiento es el siguiente:

Empieza el juego, la vista lanza el DialogoOpciones , y en él indicamos la dificultad del juego (tamaño y nº minas), pasamos esos parámetros a los parámetros del objeto vista, se cierra el objeto DialogoOpciones y se abre el objeto Vista(interfaz del buscaminas), después al inicializar el modelo, le pasamos estos parámetros de la vista, y finalmente se inicializa el controlador al que se le pasan el objeto vista, y el objeto modelo.

En el DialogoOpciones controlamos los parámetros que nos pasan en el radiobutton Personalizada mediante excepciones, para ello utilizaremos el objeto ExcepcionOpciones.



Ya tenemos la ventana del juego principal (Vista) del tamaño especificado en el DialogoOpciones y con el numero de bombas correspondientes.


Al pulsar sobre una casilla con el botón izquierdo iniciaremos el juego, iniciando el cronometro y mostrando el numero de bombas que hay en las casillas de alrededor, si se pulsa el 2º botón sobre una casilla, estaremos indicando que hay una mina, cambiara el fondo de la casilla mostrando/ocultando una bandera y cambiara el nº de minas restantes de la esquina inferior derecha.

Si pulsamos sobre una mina se mostrara una alerta indicando que hemos perdido el juego, si se gana, se creara un objeto DialogoGanar al que le pasaremos nuestro nombre para guardarlo en una colección ordenada, y de esta a un archivo de puntuaciones, según la dificultad especificada, se guardara en principiante, intermedio, o avanzado, o no se guarda si es personalizada.

He comentado el código para que sea mas entendible, por lo cual, explico el funcionamiento principal, recomiendo bajarse el código, y leerlo para entenderlo mejor.



Árbol del Proyecto (Desarrollado en Eclipse)

Opciones de la barra de menús

-Nuevo juego: vuelve a generar las posiciones de las minas, tapa todas las casillas y lo necesario para reiniciar el juego.

-Estadísticas: crea el objeto DialogoEstadisticas en el podremos ver y restablecer a 0 las puntuaciones de las diferentes dificultades, se guardan las 10 mejores para cada dificultad, para cada una habrá un archivo de texto que almacenara las puntuaciones previamente ordenadas con colecciones.


-Cambiar apariencia: se crea el objeto DialogoCambiarApariencia que nos permitirá elegir el icono de la bomba y del tablero, también podemos escogerlo aleatoriamente.





-Ayuda/Chivato: se crea un nuevo objeto DialogoChivato que nos muestra la posición de las minas.


Posibles mejoras

- Hacer que las colecciones de las puntuaciones permitan claves (tiempo de la partida) repetidas.
- Optimizar la gestión de las imágenes creando una bandera.png con transparencias en lugar de tener 2 con los 2 fondos de las casillas.
- Poder cambiar de dificultad sin tener que cerrar y abrir el juego.
- Cambiar los métodos: pulsar() y pulsarAlrededor() por uno solo usando recursividad.


Proyecto Buscaminas (el código esta comentado y explicado)

Ejecutable Buscaminas (bájalo y juega al buscamias)

No hay comentarios :

Publicar un comentario