<-- Back to list of examples
import random
# Creamos una rejilla con "." que representarán espacios vacíos.
def crear_rejilla():
rejilla = []
for fila in range(15):
rejilla.append([])
for columna in range(50):
rejilla[fila].append(".")
return rejilla
# Imprimos en pantalla la rejilla.
def imprimir_rejilla(rejilla):
for fila in range(len(rejilla)):
for columna in range(len(rejilla[fila])):
print(rejilla[fila][columna], end = "")
print()
# Intentará colocar la palabra. Devuelve True si salió bien,
# False si fallamos, por lo que tenemos que intentarlo otra vez.
def intenta_colocar_palabra(rejilla, palabra):
# Determina la dirección del resultado-
# Cambia el 8 por un 7 si no quieres palabras
# al revés.
direccion = random.randrange(0,8)
if( direccion == 0 ):
cambio_x = -1
cambio_y = -1
if( direccion == 1 ):
cambio_x = 0
cambio_y = 1
if( direccion == 2 ):
cambio_x = 1
cambio_y = -1
if( direccion == 3 ):
cambio_x = 1
cambio_y = 0
if( direccion == 4 ):
cambio_x = 1
cambio_y = 1
if( direccion == 5 ):
cambio_x = 0
cambio_y = 1
if( direccion == 6 ):
cambio_x = -1
cambio_y = 1
if( direccion == 7 ):
cambio_x = -1
cambio_y = 0
# Encuentra el largo y alto de la rejilla
alto=len(rejilla)
largo=len(rejilla[0])
# Creamos un punto aleatorio de inicio.
columna=random.randrange(largo)
fila=random.randrange(alto)
# Comprueba que la palabra no vaya a sobrepasar el borde la rejilla.
# Si lo hace, devuelve False. Hemos fallado.
if(cambio_x < 0 and columna < len(palabra)):
return False
if(cambio_x > 0 and columna > largo-len(palabra)):
return False
if(cambio_y < 0 and fila < len(palabra)):
return False
if(cambio_y > 0 and fila > alto-len(palabra)):
return False
# Ahora comprobamos que no haya otra letra en tu camino.
columna_actual = columna
fila_actual = fila
for letra in palabra:
# Asegúrate de que esté vacía o que ya tenga la letra correcta.
if rejilla[fila_actual][columna_actual] == letra or rejilla[fila_actual][columna_actual] == '.':
fila_actual += cambio_y
columna_actual += cambio_x
else:
# Oh! Una letra diferente ya está aquí. Fallo.
return False
# Hasta aquí todo va bien, colocamos las letras.
columna_actual = columna
fila_actual = fila
for letra in palabra:
rejilla[fila_actual][columna_actual] = letra
fila_actual += cambio_y
columna_actual += cambio_x
return True
# Esto llama a intenta_colocar_palabra hasta que acabemos. Podría repetirse eternamente si
# no es posible colocar palabra.
def colocar_palabra(rejilla, palabra):
exito = False
while not(exito):
exito = intenta_colocar_palabra(rejilla, palabra)
# Creamos una rejilla
rejilla = crear_rejilla()
# Colocamos algunas palabras
colocar_palabra(rejilla,"osopanda")
colocar_palabra(rejilla,"pez")
colocar_palabra(rejilla,"serpiente")
colocar_palabra(rejilla,"puercoespín")
colocar_palabra(rejilla,"perro")
colocar_palabra(rejilla,"gato")
colocar_palabra(rejilla,"tigre")
colocar_palabra(rejilla,"pájaro")
colocar_palabra(rejilla,"caimán")
colocar_palabra(rejilla,"hormiga")
colocar_palabra(rejilla,"camello")
colocar_palabra(rejilla,"delfín")
# Imprimimos todo
imprimir_rejilla(rejilla)