import random
def crear_tablero(filas, columnas, minas):
tablero = [['-' for _ in range(columnas)] for _ in range(filas)]
minas_colocadas = 0
while minas_colocadas < minas:
fila_aleatoria = random.randint(0, filas - 1)
columna_aleatoria = random.randint(0, columnas - 1)
if tablero[fila_aleatoria][columna_aleatoria] != '*':
tablero[fila_aleatoria][columna_aleatoria] = '*'
minas_colocadas += 1
return tablero
def calcular_minas_adyacentes(tablero, fila, columna):
minas_cerca = 0
filas = len(tablero)
columnas = len(tablero[0])
for i in range(max(0, fila - 1), min(filas, fila + 2)):
for j in range(max(0, columna - 1), min(columnas, columna + 2)):
if tablero[i][j] == '*':
minas_cerca += 1
return minas_cerca
def revelar_casilla(tablero_oculto, tablero_minas, fila, columna):
filas = len(tablero_minas)
columnas = len(tablero_minas[0])
if not (0 <= fila < filas and 0 <= columna < columnas) or tablero_oculto[fila][columna] != '-':
return False
if tablero_minas[fila][columna] == '*':
tablero_oculto[fila][columna] = '*'
return True
else:
minas_adyacentes = calcular_minas_adyacentes(tablero_minas, fila, columna)
tablero_oculto[fila][columna] = str(minas_adyacentes)
if minas_adyacentes == 0:
for i in range(max(0, fila - 1), min(filas, fila + 2)):
for j in range(max(0, columna - 1), min(columnas, columna + 2)):
revelar_casilla(tablero_oculto, tablero_minas, i, j)
return False
def mostrar_tablero_oculto(tablero):
for fila in tablero:
print(' '.join(fila))
def jugar_buscaminas():
filas = 10
columnas = 10
minas = 15
tablero_minas = crear_tablero(filas, columnas, minas)
tablero_oculto = [['-' for _ in range(columnas)] for _ in range(filas)]
juego_terminado = False
print("¡Bienvenido al Buscaminas Textual!")
print(f"Tablero: {filas}x{columnas}, Minas: {minas}")
mostrar_tablero_oculto(tablero_oculto)
while not juego_terminado:
try:
fila_seleccionada = int(input("Introduce la fila (0-{}): ".format(filas - 1)))
columna_seleccionada = int(input("Introduce la columna (0-{}): ".format(columnas - 1)))
if not (0 <= fila_seleccionada < filas and 0 <= columna_seleccionada < columnas):
print("¡Coordenadas fuera de rango!")
continue
if tablero_oculto[fila_seleccionada][columna_seleccionada] != '-':
print("¡Casilla ya revelada!")
continue
if revelar_casilla(tablero_oculto, tablero_minas, fila_seleccionada, columna_seleccionada):
print("¡BOOM! ¡Has pisado una mina! ¡Fin del juego!")
juego_terminado = True
else:
mostrar_tablero_oculto(tablero_oculto)
minas_restantes = minas
casillas_sin_mina = 0
for r in range(filas):
for c in range(columnas):
if tablero_oculto[r][c] == '-':
casillas_sin_mina += 1
if casillas_sin_mina == 0:
print("¡Felicidades! ¡Has despejado todas las casillas sin minas!")
juego_terminado = True
except ValueError:
print("¡Entrada inválida! Introduce números enteros para fila y columna.")
except IndexError:
print("¡Coordenadas fuera de rango!")
print("\nTablero con minas:")
mostrar_tablero_oculto(tablero_minas)
if __name__ == "__main__":
jugar_buscaminas()