Buscaminas en C++ con programación orientada a objetos - Tablero con minas y celdas

Buscaminas en C++ con Programación orientada a objetos (POO)

En este post vamos a programar el juego de Buscaminas (Minesweeper) en C++ o CPP usando el paradigma de la programación orientada a objetos o POO.

Anteriormente ya había mostrado este mismo juego pero en C, y aunque el código de C es compatible con C++ en este caso lo hice de nuevo y orientado a objetos en C++.

Clase celda

El juego de buscaminas se compone de un tablero y celdas. La celda puede tener o no tener una mina dentro, y puede estar descubierta o no.

En caso de que la celda esté descubierta se debe mostrar la cantidad de celdas contiguas que pueden tener una mina.

También tiene la opción de imprimir el estado de la celda, el constructor y algunos getters y setters.

Esos métodos nos permitirán saber si la celda está descubierta, tiene mina y para colocar una mina o establecerla como descubierta.

Los getters, setters y constructores son algo esencial de la programación orientada a objetos.

Tablero de juego de Buscaminas en C++

Ahora veamos la clase Tablero que tendrá las celdas. En este caso estoy ocupando un vector de vectores compuesto de celdas (de la clase Celda).

El tablero de buscaminas tiene varios métodos, vamos a ir explicándolos. Tenemos la función de obtener la representación de una mina, que devuelve el carácter que debe mostrarse.

Si la mina está descubierta se hace otra verificación. En caso de que la celda tenga una mina, se muestra un asterisco. Si no, se muestra la cantidad de celdas con minas cercanas.

En caso de que la celda no esté descubierta o el modo programador esté desactivado entonces se muestra un punto.

Minas cercanas

Necesitamos una función que nos diga cuántas minas cercanas hay en una celda. Para ello recorremos y contamos todas las celdas contiguas, evitando los límites obviamente.

Fíjate que en la línea 44 estamos usando los métodos de la celda y la programación orientada a objetos por ejemplo la función tieneMina está definida en la clase Celda.

Descubrir una mina

Tenemos la función que descubre una celda e indica si ahí había una mina o no:

En la línea 6 establecemos la celda como descubierta sin importar si tiene una mina o no. Luego comparamos si tiene mina para devolver un booleano indicando si había una mina.

Llenado del tablero

En el constructor de la clase Tablero hacemos el llenado del vector:

Recuerda que con push_back colocamos un elemento al final de un vector y que este elemento puede ser de cualquier tipo. Tampoco olvides que estamos trabajando con un vector de vectores o una matriz.

Contar celdas sin minas y sin descubrir

Para saber si el jugador gana vamos a necesitar contar las celdas que no tienen minas y que no han sido descubiertas.

Si el conteo es 0 es porque el jugador terminó de descubrir las celdas seguras y por lo tanto puede ganar el juego:

En este caso el algoritmo es simplemente recorrer el tablero, comprobar si la celda no está descubierta y no tiene mina para aumentar la variable de conteo.

Cuando acabamos de recorrer el tablero regresamos el conteo.

Clase juego

Veamos la última clase que compone a este juego de Buscaminas en C++ o CPP y es la del juego, que se encarga de conectar el tablero con lo que el usuario ingresa.

En esta clase es en donde se solicita la fila y columna al usuario, se imprime el tablero, etcétera.

También aquí es en donde se colocan las minas aleatoriamente dentro de las celdas, obteniendo las coordenadas como números aleatorios.

Nota: recuerda que si el usuario descubre una celda con mina, automáticamente pierde.

En esta clase es en donde todos los elementos interactúan, se comprueba si el jugador gana, etcétera. Y podemos crear varias instancias de esta clase, lo cual es algo bonito de la programación orientada a objetos.

Poniendo todo junto

Buscaminas en C++ con programación orientada a objetos - Tablero con minas y celdas
Buscaminas en C++ con programación orientada a objetos – Tablero con minas y celdas

Ahora que tenemos nuestras clases del juego buscaminas programado en C++ podemos instanciarla desde el main y comenzar a jugar:

Simplemente construimos nuestro objeto de la clase Juego pasándole un tablero y la cantidad de minas que debe colocar.

Al tablero le indicamos las filas, columnas y si estamos en modo programador. En este caso para la salida de la imagen utilicé 6 filas, 6 columnas y 4 minas.

Código fuente

El código fuente completo con todos los archivos te lo dejo en GitHub.

Basta con compilar main.cpp. Si tienes g++ entonces ejecuta g++ main.cpp -o main.exe y luego ejecuta ./main.exe. G++ es compatible con Windows, Mac y Linux. Incluso en Android.

Para terminar te dejo con más proyectos de C++ en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario