En Python, crear un programa que genere tableros de ajedrez aleatorios:
Las 32 piezas se pueden representar mediante dos caracteres, así:
piezas = ["Kw", "Qw", "Rw", "Rw", "Bw", "Bw",
"Nw", "Nw", "Pw", "Pw", "Pw", "Pw",
"Pw", "Pw", "Pw", "Pw",
"Kb", "Qb", "Rb", "Rb", "Bb", "Bb",
"Nb", "Nb", "Pb", "Pb", "Pb", "Pb",
"Pb", "Pb", "Pb", "Pb"]
from random import randint, sample
# situamos los dos reyes los primeros
piezas = ["♚", "♔", "♛", "♜", "♜", "♝", "♝",
"♞", "♞", "♟", "♟", "♟", "♟",
"♟", "♟", "♟", "♟",
"♕", "♖", "♖", "♗", "♗",
"♘", "♘", "♙", "♙", "♙", "♙",
"♙", "♙", "♙", "♙"]
tablero = ["·" for _ in range(64)]
# Generar una seleccion de piezas al azar.
max = randint(0, len(piezas)-2) # restamos 2 ya que los reyes siempre estarán
seleccion = sample(piezas[2:], max) + [piezas[0]] + [piezas[1]] # con reyes
for pieza in seleccion:
# Tomamos una pieza
while True:
# Buscamos al azar una casilla vacia
indice = randint(0, len(tablero) - 1)
if tablero[indice] == "·":
# Encontramos una casilla vacia; poblarla y salir
tablero[indice] = pieza
break
# Impresion
for fila in range(8):
for columna in range(8):
print(tablero[fila * 8 + columna], end = " ")
print()
♝ · · ♔ · · ♝ · · ♖ · ♙ · · · · · · · · · · · · · · ♙ ♜ ♚ · ♟ ♞ · · · · ♞ · ♙ · ♟ ♖ · ♜ ♟ · · · ♙ · ♗ ♗ ♛ ♕ · · · ♙ ♟ ♙ ♟ · · ♘
import random
def generar_tablero():
piezas = ['Kw', 'Qw', 'Rw', 'Bw', 'Nw', 'Pw', 'Kb', 'Qb', 'Rb', 'Bb', 'Nb', 'Pb']
tablero = ['__'] * 64 # Inicializar un tablero vacío
for pieza in piezas:
if 'K' in pieza: # Hay exactamente un rey de cada color
num_piezas = 1
elif 'Q' in pieza: # Hay entre 0 y 1 reinas de cada color
num_piezas = random.randint(0, 1)
elif 'R' in pieza or 'B' in pieza or 'N' in pieza: # Hay entre 0 y 2 torres, alfiles o caballos de cada color
num_piezas = random.randint(0, 2)
elif 'P' in pieza: # Hay entre 0 y 8 peones de cada color
num_piezas = random.randint(0, 8)
for _ in range(num_piezas):
while True:
pos = random.randint(0, 63) # Elegir una posición aleatoria en el tablero
if tablero[pos] == '__': # Si la posición está vacía
tablero[pos] = pieza # Colocar la pieza en la posición
break
return tablero
def imprimir_tablero(tablero):
for i in range(8):
for j in range(8):
print(tablero[i*8 + j], end=' ')
print()
tablero = generar_tablero()
imprimir_tablero(tablero)
__ __ __ __ __ Pb __ __ __ __ Kb __ __ __ Pw __ __ Pb __ __ __ Kw __ __ __ __ Bw __ Pb __ __ Pw __ __ __ Pw Nw Pb __ __ Nw __ __ __ __ __ __ __ __ __ Pb Rw __ Pb __ __ Pb Pb __ __ __ __ __ __
from random import randint, choices
def crear_tablero():
tablero = [['__' for i in range(8)] for j in range(8)]
return tablero
def poblar_tablero(tablero):
reyes = ['Kw','Kb']
resto_piezas = ['Qw','Qb'] + ['Rw','Bw','Nw','Rb','Bb','Nb']*2 + ['Pw','Pb']*8
seleccion = reyes + choices(resto_piezas, k=randint(0,30))
for pieza in seleccion:
while True:
row, col = randint(0,7), randint(0,7)
if tablero[row][col] == '__':
tablero[row][col] = pieza
break
def imprimir_tablero(tablero):
for fila in tablero:
print(*fila)
if __name__ == "__main__":
tablero = crear_tablero()
poblar_tablero(tablero)
imprimir_tablero(tablero)
__ __ __ __ __ __ __ __ __ Kw Kb __ __ Pb __ __ __ __ __ __ __ Nb Pb __ __ __ Nb __ __ __ __ __ __ __ __ __ __ __ __ __ Pb __ Qw __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __