Buscaminas en Free Pascal
Buenos días. Soy una estudiante del ciclo básico de ingeniería y para salvar el curso de programación tenemos que realizar un buscaminas en Pascal.
Para realizar el siguiente procedimiento tenemos que usar listas de pendientes y la verdad es que no se me ocurre cómo ir poniendo el puntero en el siguiente campo dentro de una matriz. Cualquier ayuda será bienvenida.
# Descubrir una celda. Esta acción se realiza sobre una celda oculta. El resultado depende del contenido de la celda:
* Si la celda contiene una mina el juego se pierde.
* Si la celda está libre pero hay minas en las celdas circundantes, aparece un número (entre 1 y 8) que indica la cantidad de celdas circundantes que contienen una mina.
* Si la celda está libre y no hay minas en ninguna de las celdas circundantes, la celda se descubre y también se descubren automáticamente todas las casillas circundantes, aplicando el mismo procedimiento para cada una de ellas. Este procedimiento deja al descubierto toda un área de casillas libres adyacentes.
Guía para descubrir celda
El procedimiento Descubrir tiene algunas complejidades algorítmicas que requieren pensarlo con cuidado. En este apéndice damos algunas sugerencias para su implementación.
Si la celda a descubir contiene una bomba el juego termina. Si la celda a descubrir no contiene bomba y la cantidad de circundantes con bomba es mayor que cero, se descubre sólo esta celda y continúa el juego.
La situación más compleja surge cuando la celda no contiene bomba y la cantidad de circundantes con bomba es igual a 0. Para este caso sugerimos un algoritmo que permite explorar exhaustivamente el área circundante a descubrir.
Se utiliza una lista de posiciones de celdas que llamaremos la lista de pendientes. En esta estructura guardamos un conjunto de posiciones de celdas que aún nos resta procesar en el proceso de descubrir toda el área circundante. La implementación de esta estructura la dejamos a consideración del estudiante.
El algoritmo es el siguiente:
* Poner el estado de la celda inicial como descubierta
* Guardar posición de esta celda en lista de pendientes.
* Repetir mientras la lista de pendientes no sea vacía
1. Elegir una celda cualquiera de la lista de pendientes. Quitarla de la lista
2. Para cada una de sus celdas circundantes aún no descubiertas (pueden ser hasta 8) hacer lo siguiente:
1. Poner el estado en descubierta
2. Si el número de circundantes con bomba es 0, agregar la posición de esta celda a la lista de pendientes
Muchísimas gracias.
|