importar hashlib
importar numpy como np
importar matplotlib.pyplot como plt
importar aleatorio

def generar_minas(filas, columnas, num_minas, hash_str):
    # Convertir la cadena de hash en un valor hash hexadecimal
    hash_hex = hashlib.sha256(hash_str.encode()).hexdigest()
    
    # Convertir el hash en un número largo
    hash_int = int(hash_hex, 16)
    
    # Inicializar el tablero y la lista de minas
    minas = np.zeros((filas, columnas))
    ubicaciones_minas = []

    # Convertir el hash en una secuencia de números pseudoaleatorios
    semilla aleatoria(hash_int)

    # Asegurar que cada columna tenga al menos una mina
    para col en rango(cols):
        mientras sea verdadero:
            fila = random.randint(0, filas - 1)
            si minas[fila, col] == 0:
                minas[fila, columna] = 1
                ubicaciones_minas.append((fila, col))
                romper

    minas_restantes = num_minas - cols
    mientras minas_restantes > 0:
        pos = random.randint(0, filas * columnas - 1)
        fila, col = divmod(pos, cols)
        if minas[fila, col] == 0: # Colocar mina si no hay una ya
            minas[fila, columna] = 1
            ubicaciones_minas.append((fila, col))
            minas_restantes -= 1

    devolver minas, ubicaciones_minas

# Ajustar parámetros del juego
filas = 4 # Número de filas
cols = 9 # Número de columnas
num_minas = 9 # Número exacto de minas
hash_str = "Ronda" # Hash proporcionado

# Generar minas para la siguiente ronda usando el hash proporcionado
minas_siguiente_ronda, ubicaciones_minas_siguiente_ronda = generar_minas(filas, cols, num_minas, hash_str)

# Imprimir las ubicaciones de las minas para la siguiente ronda
print("Ubicaciones de las minas para la siguiente ronda:")
para mina en ubicaciones_minas_siguiente_ronda:
    imprimir(mina)

# Visualizar el tablero de la siguiente ronda
fig, ax = plt.subplots(figsize=(8, 4))

# Trazar la siguiente ronda
ax.imshow(minas_siguiente_ronda, cmap='gray_r', interpolación='none')
para i en rango(filas):
    para j en rango(cols):
        texto = 'X' si minas_siguiente_ronda[i, j] == 1 más ''
        ax.text(j, i, texto, ha='centro', va='centro', color='rojo' if minas_siguiente_ronda[i, j] == 1 else 'negro', tamaño de fuente=12, peso de fuente='negrita')
ax.set_xticks(np.arange(columnas))
ax.set_yticks(np.arange(filas))
ax.set_xticklabels(np.arange(1, columnas+1))
ax.set_yticklabels(np.arange(1, filas+1))
ax.set_xlabel('Columnas')
ax.set_ylabel('Filas')
ax.set_title('Bot de minas reales')
ax.grid(que='ambos', color='negro', estilo de línea='-', ancho de línea=2)

plt.diseño ajustado()
plt.mostrar()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: