En esta ocasión les traigo un proyecto que consiste en el desarrollo e implementación del famoso juego de Buscaminas. El lenguaje de programación que se utilizó para realizar este proyecto fue C++.
Antes de ir con la descripción de las funciones que se implementaron para realizar el proyecto vamos a ver algunos conceptos de este famoso juego.
Como ya es conocido el juego del Buscaminas fue inventado por Robert Donner en el año de 1989. El objetivo en el juego es despejar un campo con minas sin detonar ninguna de ellas.
El juego se hizo popular debido a las versiones que vinieron y vienen con el sistema operativo Microsoft Windows desde su versión 3.1.
A continuación las reglas del juego:
- La idea del juego es despejar todas aquellas casillas de una ventana que no oculten una mina.
- Ciertas casillas tienen asignadas un número, este número indica las minas que se encuentran adyacentes a esta casilla. Por ejemplo si una casilla tiene el número 2, entonces de las ocho casillas adyacentes a esta (si no es en una esquina o borde) hay 2 con minas y 6 sin minas. Si se descubre una casilla y esta se encuentra vacía, esto indica que las casillas vecinas no tiene mina y estas se descubren automáticamente.
- Al descubrir una casilla con una mina se pierde el juego.
- Se gana el juego cuando se logra destapar todo el campo sin detonar una casilla con una mina.
- void nombrePrograma(): Esta función nos permite mostrar el nombre del programa en la ventana de ejecución.
- void limpiarMatriz(int Matriz[][30],int N): Esta función realiza un recorrido de una matriz de enteros para almacenar en ella ceros, en términos informáticos se está realizando una limpieza de dicha matriz para no tener problemas más adelante al momento de ejecutar nuestro juego.
- void generarMarcoBuscaminas(int N): Esta función como su nombre lo dice nos permite generar y colocar el marco que rodeará a todas las casillas o celdas del juego Buscaminas.
- void colocarDigitoHorizontal(int N): Esta función se implementó para colocar el número que le corresponde a una determinada columna en la ventana de ejecución.
- void colocarDigitoVertical(int N): Esta función al igual que la anterior se implementó para colocar el número que le corresponde a una fila en la ventana de ejecución.
- int validarDimensionBuscaminas(): Esta función permite validar que el tamaño del juego Buscaminas sea mayor o igual que nueve y menor o igual que veinte, a su vez ayuda a validar que el número de filas sea igual al numero de columnas (una matriz cuadrada). Retorna un valor entero el cual será el valor tanto de las filas como de las columnas.
- int validarNumeroMinas(int N): Con esta función se valida que el número de minas no sea menor que veinte ni mayor que el número de casillas/2. Retorna un valor entero el cual representa el número de minas que van a existir en el campo de juego.
- void generarBuscaminas(char A[][30],int N,int m): Esta función nos permite generar las minas que son representadas por un "*" y colocarlas en el campo de juego.
- void contarMinasBuscamicas(char A[][30],int N): La finalidad de esta función es contar las cantidad de minas existentes en las casillas adyacentes a una determinada casilla y colocar el valor de la cantidad dentro de esta.
- void leerColocarDigitoBuscaminas(char A[][30],int i,int j,int n): Esta función es usada en la función contarMinasBuscaminar() para colocar el valor de la cantidad de minas existentes en las casillas adyacentes a la casilla analizada.
- void reportarBuscaminasSinSolucion(char A[][30],int N): Esta función nos permite mostrar las casillas iniciales del juego Buscaminas todas cubiertas dentro del marco generado.
- void matrizBanderaAuxiliar(int B[][30],char A[][30],int N): Con esta función se almacenan los valores de cada casilla en una matriz auxiliar la cual servirá para ir mostrando los valores o mina de las casillas destapadas.
- void reportarBuscaminasCasillaDestapada(int N,int X, int Y,int B[][30],char A[][30]): Esta función nos permite reportar el campo del juego Buscaminas con las respectivas casillas destapadas luego de seleccionar una posición para ver el valor de dicha casilla.
- int verificarCasillaDestapada(char[][30],int X,int Y,int M): Esta función permite verificar una jugada, si la casilla descubierta no contiene mina se puede seguir jugando caso contrario termina el juego. Retorna 1 si la casilla no contiene mina y retorna -1 si la casilla contiene una mina.
- void mostrarContenidoCasillaDestapada(int B[][30],char A[][30],int N): Esta función nos permite mostrar el contenido de cada casilla o casillas al momento de realizar una jugada.
- void verificarAdyacente(int B[][30],int i, int j): Esta función nos ayuda a verificar las casillas adyacentes a una casilla vacía para ser destapadas en el caso de que sigan vacías o no contengas una mina. Una casilla vacía en el en el juego esta representada por un "0".
- int ContarMinasSinDestapar(int N,int B[][30]): Función que ayuda a verificar si el jugador a ganado, esto se realiza contando las casillas sin destapar. Si el número de casillas sin destapar es igual al número de minas el jugador a ganado.

Imagen 1

Imagen 2

Imagen 3

Imagen 4

Imagen 5

Imagen 6
Finalmente adjunto les dejo el código fuente para que prueben el juego y si desean lo mejoren. A las personas que han decidido mejorar el proyecto se les agradece si envían la nueva versión a mi correo vehac69@gmail.com.