Buscaminas en C – Juego

Hoy vamos a ver cómo implementar el juego buscaminas en C. Pasa que por diversión quise hacerlo y quedó muy bien a mi parecer.

Se trata del juego buscaminas en donde el usuario elige una casilla para descubrir lo que hay bajo la misma. Si hay una mina, el usuario pierde. En caso de que no, se le muestra al usuario el número de minas que hay cerca a esa casilla.

Lo que haremos será mostrar el tablero de juego, solicitar al usuario la casilla, ocultar las minas de manera aleatoria y saber si el usuario gana o pierde. Todo esto será modificable dentro del código fuente.

Características del juego

Buscaminas en C – Jugando en Ubuntu

Está escrito completamente en C estándar. Compila como un encanto en Windows y Linux (probado en Windows 10 y en Ubuntu, así como en mi Android usando Termux).

Permite personalizar el número de minas, número de filas y columnas

El modo debug permite mostrar las minas, de este modo, puedes ver la ubicación de las minas al realizar pruebas de software

Ahora sí veamos el código fuente y algoritmo.

Versión de C++

Ahora también existe la versión nativa para C++. El código es distinto, pues se usa la programación orientada a objetos pero es interesante de analizar.

Explicación del algoritmo

El algoritmo es realmente sencillo. El tablero de juego será una matriz de tipo char en donde se almacenará determinado carácter. Puede haber:

  • Espacio sin descubrir
  • Espacio descubierto (aquí se dibuja la cantidad de minas que hay cerca)
  • Mina

Para que sea fácil para el usuario, la columna se pide como número, y la fila como letra. Luego, esa letra se convierte a número en donde la A es un 0, la B es un 1, etcétera.

Al dibujar el escenario, se ocultan las minas al usuario. Es decir, no se dibuja el escenario original, sino uno dependiendo del estado del juego. Si se ha ganado o perdido, se muestran las minas.

Lo demás es simplemente el recorrido de la matriz, comprobación de cada char en determinadas coordenadas, etcétera.

Dibujar tablero

Para el tablero dibujamos el encabezado, un separador por cada fila y los datos en sí. También colocamos la letra de la fila en cada paso. Todas las funciones reciben el tablero:

Si en el código notas que hay funciones o constantes que no están definidas todavía, no te preocupes, al final dejaré el código completo. Lo que hace este código es dibujar el tablero, ocultar o mostrar las minas y dibujar las minas cercanas en caso de que el usuario haya descubierto una casilla.

Colocar minas de manera aleatoria

Las minas se colocan en el tablero de manera aleatoria. Podemos cambiar el número de las mismas y así agregar dificultar al juego. Lo que se hace es obtener obtener un número aleatorio tanto para la fila como para la columna.

Abrir casilla

Esta función es la que invoca el usuario al momento de jugar. Se trata de abrir una casilla y dependiendo de lo que haya en la misma, se devuelve un estado.

Por ejemplo, si hay una mina, se indica. Si la casilla ya estaba abierta también se indica. Estos estados son capturados para saber si el usuario ha perdido o si todo ha ido bien.

Esta función recibe las coordenadas tal y como el usuario las ingresa. Convierte la letra a mayúscula, y después la convierte a índice. A la columna le resta 1, pues el usuario final no sabe que los arreglos comienzan en 0.

Por cierto, también estoy usando assert para validar que la columna y la fila son correctos; es decir, que están dentro del rango válido.

Obtener minas cercanas

Para las minas cercanas se visitan las casillas que están junto a la casilla de la coordenada indicada. No importa si está en una esquina o en un borde, esto está validado:

Saber si el usuario gana

El usuario gana cuando ya no hay espacios por descubrir. Por lo tanto lo único que hay que hacer es comprobar que ya no haya ninguna casilla con esa característica, recorriendo el tablero.

Funcionamiento del juego

Para el juego hacemos un ciclo infinito que se romperá cuando el jugador pierda o gane. En el mismo solicitamos las coordenadas e indicamos el estado. También dibujamos el tablero.

Fíjate en que el fin del juego se controla con la variable deberiaMostrarMinas que se activa cuando el jugador pierde o gana, y que ocasiona que se muestren las minas del tablero además de romper el ciclo.

Constantes

Bien, ahora veamos las constantes. Aquí se pueden configurar varios aspectos del juego como el tamaño del tablero, el modo debug (que muestra las minas) o la cantidad de minas.

Poniendo todo junto

Creo que ya he explicado lo suficiente. He aquí el código completo:

Si quieres compilarlo instala gcc u otro compilador de C (debería funcionar también en el editor Dev C++). Luego compila con:

gcc main.c

Ejecuta el archivo de salida y listo. También puedes probarlo en línea.

Por cierto, en los comentarios he colocado algunos errores esperados.

Vídeo de YouTube

En caso de que no hayas entendido algo, aquí tengo un vídeo explicando el juego y su funcionamiento:

Conclusión

Nota: el código fuente actualizado está en mi GitHub. Si vas por ahí, déjale una estrella y sígueme, que nada te cuesta.

Oh, y si te lo preguntas, lo he escrito en C para que sea sencillo portarlo a otros lenguajes de programación.

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