from PIL import Image, ImageDraw, ImageFont
# Palabras y pistas personalizadas
words = [
("Enero", "El mes en que nuestras vidas se cruzaron ❄️"),
("Higueruela", "Nuestro primer hogar compartido 🏡"),
("Merida", "Nuestro primer viaje inolvidable ✈️"),
("Bestialburger", "Donde comenzó nuestra historia con papas 🍔"),
("Instagram", "La red social que nos conectó por primera vez 📲"),
("Cucharita", "Nuestra forma favorita de dormir abrazados 🛌"),
("Mirada", "Lo que aún me pone nerviosa de ti 👀"),
("Destino", "Lo que nos juntó, aunque no lo planeamos ✨"),
("Fotos", "Tenemos muchas, pero siempre queremos más 📸"),
("Desayuno", "Lo que me haces con amor cada mañana 🥞"),
("2304", "El día que todo comenzó 💫"),
("Amor", "Lo que crece cada día entre nosotros ❤️")
]
# Crear cuadrícula base
grid_size = 20
grid = [['' for _ in range(grid_size)] for _ in range(grid_size)]
positions = list(range(1, len(words)*2, 2)) # Filas espaciadas
# Insertar palabras horizontalmente
for i, (word, _) in enumerate(words):
row = positions[i]
col = 1
for j, letter in enumerate(word.upper()):
grid[row][col + j] = letter
# Configurar imagen
cell_size = 40
img_size = grid_size * cell_size
img = Image.new("RGB", (img_size, img_size + 300), "white")
draw = ImageDraw.Draw(img)
# Fuente
try:
font = ImageFont.truetype("arial.ttf", 20)
except IOError:
font = ImageFont.load_default()
# Dibujar celdas y letras
for i in range(grid_size):
for j in range(grid_size):
x = j * cell_size
y = i * cell_size
draw.rectangle([x, y, x + cell_size, y + cell_size], outline="black", width=1)
if grid[i][j] != '':
letter = grid[i][j]
# Calcular tamaño del texto
bbox = draw.textbbox((0, 0), letter, font=font)
w = bbox[2] - bbox[0]
h = bbox[3] - bbox[1]
draw.text(
(x + (cell_size - w) / 2, y + (cell_size - h) / 2),
letter,
fill="black",
font=font
)
# Escribir las pistas debajo de la cuadrícula
y_offset = img_size + 20
for i, (word, clue) in enumerate(words, start=1):
draw.text((10, y_offset), f"{i}. {clue}", fill="black", font=font)
y_offset += 25
# Guardar imagen final
img.save("sopa_de_letras.png")
img.show()