PropuestaTarea1

Anuncio
CC3001 - Algoritmos y Estructuras de Datos
Tarea 4: Árboles de Expresión
Profesores: Patricio Poblete (Sección 1) - Nelson Baloian (Sección 2)
Fecha de entrega: 2 de Abril, a las 23:59
El juego “Barredor de minas” o mines sweeper consiste en ubicar la posición de las minas en un
campo minado sin hacer explotar ninguna. El campo minado se representa por una matriz de M×N
posiciones en los que puede haber o no una mina. En el computador se muestra una ventana con un
cuadriculado que representa el campo minado (ver figura) donde al principio todas las posiciones están
ocultas. El usuario puede abrir una posición haciendo click con el mouse sobre ésta. Si en el lugar que el
usuario destapa había una bomba, el programa termina el juego ahí. Si no, entonces abre el lugar y cuenta el
número de bombas que hay en las posiciones vecinas (8). Si este número no es cero entonces el programa
pone este número en la posición y espera la siguiente jugada del usuario. Si es cero, no pone nada pero para
cada posición vecina se cuentan las vecinas y se procede recursivamente.
Fig. 1: Juego de Mines Sweeper (barredor de minas)
Este juego, como casi todos, se puede ganar o perder. El jugador gana cuando ha destapado todas
las posiciones que no contienen una bomba, y pierde cuando destapa una bomba. En ambos casos el juego
se detiene, indicando el resultado.
Una funcionalidad muy útil que tiene este juego es que permite marcar posiciones sin destaparlas si
el usuario estima que ahí se encuentra una bomba. Para eso, el usuario debe clickear sobre la posición con
el botón derecho del mouse. Si el usuario cambia de opinión (piensa que no hay una bomba en esa posición)
puede clickear de nuevo con el botón derecho sobre la celda y la marca se borra.
En esta tarea usted debe implementar la lógica de este juego de modo que un usuario pueda jugarlo. Para
ello usted puede usar una clase llamada Campo que cuenta con las siguientes funciones:
Campo(int x, int y): constructor de la clase, inicializa un objeto con x (ancho) por y (alto)
elementos y lo muestra en una ventana.
actualizar(int[][]): recibe una matriz que debe tener las mismas dimensiones con las cuales
fue creado el objeto y muestra el campo según las siguientes reglas:
Si en un elemento de la matriz que se pasa como parámetro hay un -1, entonces muestra la
posición respectiva del campo como “oculta”, es decir, la celda correspondiente aparece de
color gris claro.
Si en un elemento de la matriz que se pasa como parámetro hay un 0, entonces muestra la
posición respectiva del campo como “despejada”, es decir, la celda correspondiente aparece
de color blanco.
-
-
Si en un elemento de la matriz que se pasa como parámetro hay un número entre 1 y 8,
entonces muestra la posición respectiva del campo como “despejada”, es decir, la celda
correspondiente aparece de color blanco pero se muestra el número, el cual corresponde a
las bombas que hay en las celdas vecinas.
Si en un elemento de la matriz que se pasa como parámetro hay un número 9 entonces
muestra la posición respectiva del campo como “oculta”, es decir, la celda correspondiente
aparece de color gris claro pero con una bandera sobre ella.
Una vez que se crea un objeto de la clase Campo, el programa espera que el usuario haga un click
sobre una de las celdas de la ventana, ya sea con el botón derecho o izquierdo del mouse. Cada vez que esto
suceda se llamará a un método public static void oprimido(int x, int y, int z) de la
clase Tarea1. Los dos primeros parámetros son respectivamente las coordenadas x e y de la celda sobre la
cual se ha hecho click, enumerando desde 0 (desde la esquina superior izquierda). El tercer parámetro indica
el botón del mouse con el que el usuario hizo click (1 es el botón izquierdo, 2 es el central, y 3 el derecho). Es
en este método donde usted debe programar la lógica del juego. Como base, se incluye una versión del
archivo Tarea1.java que usted debe modificar, agregando la lógica del juego. No necesita modificar el
archivo Campo.java.
Su programa debe empezar por preguntar las dimensiones que debe tener el campo minado, y
luego por la cantidad de minas que el programa se encargará de repartir aleatoriamente entre las posiciones
del campo (en java la función Math.random() genera un número aleatorio entre 0 al 0.99999). Su programa
debe asegurar que hay exactamente la cantidad de minas que introdujo el usuario.
Nota: para que las clases Tarea1 y Campo funcionen correctamente debe ponerlas en el mismo
directorio junto con el archivo flag.png.
Descargar