Cómo hacer Buscaminas en Python con Interfaz Gráfica (Simple)

Paso 1: Instalación de librerías externas

Para este proyecto, necesitaremos instalar la librería `tkinter` para crear la interfaz gráfica. Si no está instalada, puedes hacerlo con el siguiente comando:

pip install tk

Paso 2: Desglose del código completo

A continuación, desglosaremos el código completo para crear el juego de Buscaminas con interfaz gráfica en Python:

import tkinter as tk
import random

# Configuración del juego
NUM_FILAS = 5
NUM_COLUMNAS = 5
NUM_MINAS = 3

class Buscaminas:
    def __init__(self, root):
        self.root = root
        self.root.title("Buscaminas")
        self.tablero = [[None] * NUM_COLUMNAS for _ in range(NUM_FILAS)]
        self.generar_tablero()
        
    def generar_tablero(self):
        for fila in range(NUM_FILAS):
            for columna in range(NUM_COLUMNAS):
                boton = tk.Button(self.root, text="", height=2, width=5, command=lambda f=fila, c=columna: self.abrir_casilla(f, c))
                boton.grid(row=fila, column=columna)
                self.tablero[fila][columna] = boton

        self.colocar_minas()

    def colocar_minas(self):
        minas_colocadas = 0
        while minas_colocadas < NUM_MINAS:
            fila = random.randint(0, NUM_FILAS - 1)
            columna = random.randint(0, NUM_COLUMNAS - 1)
            if self.tablero[fila][columna]["text"] != "M":
                self.tablero[fila][columna]["text"] = "M"
                minas_colocadas += 1

    def abrir_casilla(self, fila, columna):
        if self.tablero[fila][columna]["text"] == "M":
            self.tablero[fila][columna]["text"] = "X"
        else:
            self.tablero[fila][columna]["text"] = " "

def main():
    root = tk.Tk()
    buscaminas = Buscaminas(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Explicación:

– Importamos la librería `tkinter` y `random` para la interfaz gráfica y la generación de números aleatorios, respectivamente.

– Configuramos el tamaño del tablero y el número de minas.

– Creamos la clase `Buscaminas` que representa el juego.

– En el método `generar_tablero`, creamos una cuadrícula de botones utilizando `Button` de `tkinter` y los almacenamos en la matriz `tablero`.

– El método `colocar_minas` coloca las minas en posiciones aleatorias dentro del tablero.

– El método `abrir_casilla` maneja la acción de hacer clic en una casilla.

– En el método `main`, creamos la ventana raíz y una instancia de la clase `Buscaminas`.

Paso 3: Consejos y más posibilidades

Una vez que tengas el juego básico de Buscaminas, aquí hay algunas ideas para mejorarlo y expandir su funcionalidad:

  • Implementar la lógica del juego para contar las minas adyacentes y revelar casillas vacías.
  • Agregar un menú de opciones para reiniciar el juego y ajustar la dificultad.
  • Mejorar la apariencia de la interfaz gráfica con estilos y colores.
  • Guardar y mostrar puntuaciones más altas.

Paso 4: Código para copiar y pegar

A continuación, encontrarás el código completo que puedes copiar y pegar en tu editor:

import tkinter as tk
import random

# Configuración del juego
NUM_FILAS = 5
NUM_COLUMNAS = 5
NUM_MINAS = 3

class Buscaminas:
    def __init__(self, root):
        self.root = root
        self.root.title("Buscaminas")
        self.tablero = [[None] * NUM_COLUMNAS for _ in range(NUM_FILAS)]
        self.generar_tablero()
        
    def generar_tablero(self):
        for fila in range(NUM_FILAS):
            for columna in range(NUM_COLUMNAS):
                boton = tk.Button(self.root, text="", height=2, width=5, command=lambda f=fila, c=columna: self.abrir_casilla(f, c))
                boton.grid(row=fila, column=columna)
                self.tablero[fila][columna] = boton

        self.colocar_minas()

    def colocar_minas(self):
        minas_colocadas = 0
        while minas_colocadas < NUM_MINAS:
            fila = random.randint(0, NUM_FILAS - 1)
            columna = random.randint(0, NUM_COLUMNAS - 1)
            if self.tablero[fila][columna]["text"] != "M":
                self.tablero[fila][columna]["text"] = "M"
                minas_colocadas += 1

    def abrir_casilla(self, fila, columna):
        if self.tablero[fila][columna]["text"] == "M":
            self.tablero[fila][columna]["text"] = "X"
        else:
            self.tablero[fila][columna]["text"] = " "

def main():
    root = tk.Tk()
    buscaminas = Buscaminas(root)
    root.mainloop()

if __name__ == '__main__':
    main()

Paso 5: Conclusiones

En este tutorial, has aprendido cómo crear un juego de Buscaminas simple en Python utilizando la librería `tkinter` para la interfaz gráfica. Has explorado cómo generar un tablero de botones y colocar minas aleatoriamente en el tablero. Aunque este es un juego básico, te brinda una introducción a la creación de interfaces gráficas interactivas en Python.

¡Ahora puedes aplicar estos conceptos para crear otras aplicaciones con interfaces gráficas y mejorar tus habilidades de programación en Python!