Trabajo para Microprocesadores 04/05
JUEGO DE MEZCLA DE LETRAS
Realizar un programa que permita jugar entre dos usuarios de la siguiente manera: Uno de ellos pensará una palabra de 7 letras y la introducirá por teclado. El programa entonces alterará el orden de las letras y mostrará la palabra desordenada en pantalla para que el segundo jugador trate de adivinarla, para lo que dispondrá de un número de intentos variables en función del nivel de dificultad. Funcionalidades adicionales: 1) Nada más arrancar, el programa pedirá el nivel de dificultad al usuario (1-3). 2) Tras introducir un nivel de dificultad correcto el programa solicitará entonces la palabra de siete letras a modificar. 3) Tras mostrar la palabra alterada, el segundo jugador introducirá nuevas palabras de 7 letras mostrándose un mensaje de error o acierto según el caso. 4) Pasados los turnos correspondientes al nivel de dificultad sin acierto, el programa ofrecerá la opción de comenzar un nuevo juego, alterar el juego actual generando un nuevo orden de letras con la misma palabra o salir. 5) El algoritmo que desordena la palabra introducida por el primer jugador debe ser diferente en cada ejecución. Información adicional: 1- Se presentará en pantalla el jugador victorioso (1 o 2) al terminar el juego 2- El número de turnos por nivel de dificultad serán: • Nivel 1 (dificultad mínima): 10 turnos • Nivel 2 (dificultad media): 7 turnos • Nivel 3 (dificultad alta): 5 turnos
INDICACIONES PARA ABORDAR EL DESARROLLO DEL TRABAJO
Para una realización adecuada del programa se recomiendan los siguientes puntos: 1) Es necesario establecer desde el principio las estructuras de datos que se utilizarán, su tamaño, dónde se almacenarán y su nombre; de ese modo será posible establecer los parámetros de entrada y los resultados de las distintas subrutinas que realicen cada etapa, posibilitando el trabajo en paralelo y el reparto de tareas. 2) Descomponer las tareas en subrutinas cada vez más sencillas hasta lograr que en el último nivel de descomposición las subrutinas consten de unas pocas decenas de instrucciones o menos. 3) No mezclar funcionalidad en las subrutinas: cada subrutina tiene que hacer una sola cosa, perfectamente determinada y de la manera más independiente posible de las demás. 4) No reinventar la rueda: siempre que exista una función del programa monitor del entrenador adecuada a nuestros fines, utilizarla.
Trabajo para Microprocesadores 04/05 5) Programar de forma modular, es decir, dividir el programa entre varios ficheros fuente, si necesario, agrupando en cada módulo las funciones más relacionadas entre sí. 6) No dejar la comprobación del sistema para el final. Intentar comprobar el correcto funcionamiento del sistema completo puede ser una tarea casi imposible. Comprobar el funcionamiento de cada una de las subrutinas antes de integrarlas al sistema completo, a la larga, lleva mucho menos trabajo, es mucho más sencillo, más eficaz y más rápido (el 80% del tiempo del ciclo vital de un programa se dedica a depuración y mantenimiento). 7) Programar de “arriba” hacia “abajo”. Mientras se desarrollan las subrutinas de los niveles inferiores utilizar “muletillas” (placeholder), es decir, subrutinas que acepten los mismos parámetros que las subrutinas definitivas y devuelvan resultados coherentes, pero que realmente no hagan nada. Finalmente estas subrutinas se sustituirán por sus versiones operativas, una vez que se haya comprobado que están libres de errores. Esta forma de proceder evita acabar en “callejones sin salida” y tener que retroceder cuando el desarrollo del programa esté muy avanzado. 8) Usar comentarios a discreción, nunca son demasiados. 9) Seguir una tabulación estricta del código fuente que facilite su lectura. 10) Delante de cada subrutina, incluida en el código fuente como comentarios, debe incluirse la documentación de cada subrutina: nombre, funcionalidad, parámetros de entrada y forma en que se pasan estos parámetros, resultados que devuelve y forma en que se devuelven, variables globales modificadas y cómo se modifican, y, por último, registros destruidos por la subrutina. 11) Antes de realizar cualquier cambio importante en el código, guardar siempre una copia de la versión antigua.