martes, 12 de mayo de 2009

Bichos


El algoritmo recursivo tenía un bicho. O sea un error de programación...
Lo que sucedía es que cuando una letra tenía a su alrededor dos veces la letra siguiente de la palabra, solo aceptaba la palabra si se podía construir desde la primera. Mejor, vean esta imágen:

En este caso, la palabra "LAMI" (si existiera...) sería tomada como válida, pero la palabra "LAMP" no, porque "LAMP" usa la segunda "M" alrededor de la "A". Para corregir el error, fue necesario modificar la función find_word para que quedara así:

def find_word(self,word, row, column, used):
matrix = [[-1, -1], [-1,0], [-1, 1],
[0, -1], [0,1],
[1, -1], [1, 0], [1,1] ]
if word == "":
return [] #fin de la palabra-cerrar recursion
letter = self.get_letter(word,0)
if letter == "Qu":
new_word = word[2:]
else:
new_word = word[1:]
for transform in matrix:
new_row = row + transform[0]
new_column = column + transform[1]
if new_row >= 0 and new_column >= 0 and \
new_row < 4 and new_column < 4 and \
used[new_row][new_column] != 1 and \
self.dice[self.facedie[new_row][new_column]][self.face[new_row][new_column]] == letter:
used_copy = used
used_copy[new_row][new_column] = 1
new = self.find_word(new_word, new_row, new_column, used_copy)
if new != [False]:
return [[new_row, new_column]] + new
return [False]

Ya he hecho un commit y un push a GIT, así que el archivo completo está aquí:
http://git.sugarlabs.org/projects/wordhunt/repos/mainline/blobs/raw/e70b6bb86d4abdb34532055e948a3b0560e303e3/wordhunt.py
Hasta ahora hemos usado python y pygtk, que son requerimientos para hacer una actividad para Sugar, pero aún no es una actividad exclusivamente de Sugar. Lo que llevamos puede correr sin problema en cuaquier sistema que tenga python y pygtk. A partir de la próxima entrada usaremos Sugar (finalmente!).
Imágen:
e3000: http://www.flickr.com/photos/e3000/2480983620/

1 comentario:

  1. me pueden mandar juegos en idioma python a mi gamil es:benjamincapomanya@gmail.com

    ResponderEliminar