Ver Mensaje Individual
  #21 (permalink)  
Antiguo 21/11/2015, 13:15
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 3 meses
Puntos: 204
Respuesta: problema con juego de palabras

Pues a ver, yo cambiaría varias cosas... algunas ya te las he comentado en mensajes anteriores:

precarga de todas las palabras antes de empezar el juego
La manipulación de datos en memoria es más rápido y más sencillo que leer constantemente desde ficheros.

almacenamiento de las palabras en una lista enlazada circular.

Una lista enlazada circular es una lista enlazada normal y corriente pero, al añadir el último elemento, haces que su sig apunte al primer elemento. De esta forma consigues que la lista "no tenga fín", lo que te permite recorrerla hacia delante sin miedo a acceder a punteros no válidos.

Para liberar la memoria coges un elemento cualquiera, digamos A y te quedas con su posición y con la del siguiente, B. Después haces A->sig=0. Finalmente, coges B y liberas la memoria como si de una lista enlazada normal se tratase.

Funciones más pequeñas

Sin tener en cuenta lo anterior, la función SearchNextWords se puede dividir sin problemas en dos funciones independientes... una que lea el fichero y otra que verifique si la palabra leída es válida. Funciones más pequeñas = código más sencillo de probar.

Elegir cuando liberar la memoria

Si en SearchNextWords liberas la memoria de Lista->Palabras... ¿qué sentido tiene hacer después un realloc o, dicho al revés... si vas a hacer un realloc... tiene sentido hacer un free??

Sugerencia:

Lo de usar listas enlazadas también podrías aplicarlo a otros conceptos.

Podrías, por ejemplo, hacer que la función que te saca el listado de palabras válidas cogiese la lista enlazada de palabras con n+1 letras y la palabra de n letras... entonces crea una nueva lista enlazada en la que se encuentra una copia de las palabras que encajen con los requisitos del juego... así puedes reutilizar la lista inicial de palabras entre juegos.

Si además haces que la lista de palabras válidas sea también circular... elegir una puede ser tan sencillo como elegir un número al azar y avanzar ese número de posiciones... total, no te vas a salir de la lista por mucho que avances.

No se, son algunas sugerencias... para darte más tendría que analizar el código a fondo y ahora mismo no tengo el tiempo necesario para ello.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.