PRACTICA 2

Buscaminas

En esta práctica hay que diseñar y construir un programa que permita al usuario jugar al juego del Buscaminas. Inicialmente se le solicita al usuario el tamaño del tablero de juego que es una cuadrícula de modo que tiene que introducir el número de filas y el número de columnas. A continuación se le pide el número de minas que el programa debe colocar de forma automática y aleatoria en dicho tablero (se debe realizar el control de errores correspondiente). La posición de cada mina viene dada por el número de línea y de columna donde está colocada. El usuario del programa, es decir el jugador, no sabe donde están colocadas las minas y su tarea para completar el juego es averiguar dónde están situadas realizando el menor número de interacciones y sin hacerlas explotar.

 

Las posibles acciones del jugador son:

 

 

 

 

El jugador debe realizar ciertos sondeos que comportan el riesgo de provocar la explosión de una mina como, por ejemplo, el primero en el que no tiene ningún tipo de información que guíe su búsqueda. Sin embargo, si el jugador ya sabe que no hay ninguna mina en la vecindad de una posición dada, puede realizar el sondeo de todas las posiciones adyacentes sin correr ningún riesgo de explosión. Esta estrategia se puede aplicar a todas las posiciones en las que no exista ninguna mina en su vecindad. Para que el jugador pueda realizar sus conjeturas más fácilmente después de cada interacción el programa muestra el tablero con toda la información de la que dispone el usuario en ese momento.

 

Finalmente cuando el programa termina (por explosión de una mina, por elección del jugador o por haber encontrado todas las minas), el programa muestra el tablero con las minas encontradas y las no encontradas si las hubiera. Además del tablero se debe mostrar un mensaje que indique la razón de dicha finalización (p.e. indicando al usuario si ha ganado o no, si ha explotado una mina, etc.) y el número de interacciones realizadas por el usuario.

Parte opcional

Expansión automática. Cuando el usuario realiza un sondeo en una posición y obtiene como resultado que no hay ninguna mina en la vecindad puede realizar el sondeo de todas las posiciones adyacentes sin correr ningún riesgo de explosión. Como esta estrategia no requiere la intervención del jugador, el programa la realizará automáticamente. Como consecuencia si el jugador realiza un sondeo en una posición en la que no hay una mina y en cuya vecindad no hay ninguna mina, el programa mostrará el número de minas en la vecindad de cada una de las posiciones que se pueden explorar sin riesgo.

Memoria de la práctica

Se entregará el código correctamente comentado y formateado, así como la documentación generada automáticamente mediante javadoc siguiendo las pautas explicadas en clase.

No hay que entregar el disquete con el código (aunque el profesor puede comprobar el correcto funcionamiento de la práctica en el ordenador). Cada grupo entregará la memoria exclusivamente en el laboratorio y en el turno correspondiente. La fecha límite de entrega de la memoria es la semana del 24 de Enero.

 

Ejemplo:

Supongamos que el usuario ha proporcionado los datos de 8 filas, 8 columnas y 10 minas que el programa ha colocado en las posiciones indicadas por un asterisco en el siguiente tablero.

 

T 1 2 3 4 5 6 7 8
1 *              
2 *         * *  
3   *     *      
4                
5     *   *      
6         *      
7                
8           *    

 

Si las dos primeras interacciones del jugador son sondear las posiciones (2, 2) y (5, 6), el programa mostrará el siguiente tablero después de dichos sondeos:

 

T 1 2 3 4 5 6 7 8
1                
2   3            
3                
4                
5           2    
6                
7                
8                

 

Si el jugador sondea ahora la posición (5, 8) el programa mostrara el siguiente tablero, a partir del cual el usuario sabe que es seguro explorar las posiciones vecinas a esta última. Si a continuación el jugador supone que en la posicion (2, 6) hay una mina, el programa mostrara el siguiente tablero.

 

T 1 2 3 4 5 6 7 8
1                
2   3       +    
3                
4                
5           2   0
6                
7                
8                

 

Finalmente, si el jugador sondea la posición (5, 5), la mina que se encuentra en esta posición explota y el juego termina. Naturalmente, si el jugador la hubiera marcado como posición con mina podría haber continuado jugando. El último tablero de juego mostrado por el programa será el siguiente.

 

T 1 2 3 4 5 6 7 8
1 *              
2 *         + *  
3   *     *      
4                
5     *   *      
6         *      
7                
8           *