Universidad de Costa Rica
Escuela de Ciencias de la Computación e Informática
CI-1201 Programación II - 2012b
Profesor Jeisson Hidalgo-Céspedes

Tarea 04

Implemente un juego trivia en línea de comandos, el cual permitirá hacer preguntas de conocimiento al jugador, de al menos 3 tipos diferentes, como se muestra en la siguiente interacción con el programa:

$ ./trivia
Pregunta 1. ¿A cuántos metros cuadrados equivale una hectárea?
Respuesta: 10000
Felicidades!
10 puntos. Continuar jugando [sn]? s

Pregunta 2. Después del Sol, la estrella más cercana a la Tierra está en la Constelación de:
Respuesta: centauro
Bien. La respuesta completa es: Alfa Centauro
15 puntos. Continuar jugando [sn]? s

Pregunta 3. La población de la India y China juntas representa
	1: tres cuartas partes de la población mundial
	2: la mitad de la población mundial
	3: un tercio de la población mundial
	4: un cuarto de la población mundial
Respuesta: 1
La respuesta correcta es: 3
15 puntos. Continuar jugando [sn]? s

Pregunta 4. ¿Cuál de los siguientes alimentos NO es un veneno para la babosa?
	1: Hojas putrefactas
	2: La cerveza
	3: La sal
	4: Compuestos de metaldehido
Respuesta: 1
Felicidades!
25 puntos. Continuar jugando [sn]? s

Pregunta 5. ¿Cuál de los siguientes campos NO es premiado con un Nobel?
	1: Física
	2: Química
	3: Biología
	4: Economía
Respuesta: 4
La respuesta correcta es: 3
25 puntos. Continuar jugando [sn]? n

5 preguntas aplicadas: 2 acertadas, 1 parciales, 2 fallidas.
$
Ejemplo de ejecución del del programa

Las preguntas se deben cargar de un archivo de texto cuya estructura se propone a continuación. Una pregunta se separa de otra por una línea vacía. La primera línea de la pregunta indica su tipo (numerica, textual, o seleccion_unica). La segunda línea siempre es el texto de la pregunta. La tercera línea contiene la respuesta. Si hay varias respuestas aceptables, se pueden separar por barras verticales (|). Asuma que todas las preguntas tienen un peso de 1o puntos (por lo cual no se almacena en el archivo). El resto de líneas dependen del tipo de la pregunta, como se esquematiza en el siguiente listado:

Por ejemplo:

Las preguntas numéricas esperan como respuesta un número. Cuando se aplica una de estas preguntas, el número ingresado por el jugador debe compararse contra la respuesta del archivo en forma numérica. Por ejemplo, si la respuesta es "500" y el usuario ingresa "00500", debe tomarse como válida.

Las preguntas textuales esperan como respuesta del usuario un texto, el cual será comparado contra la respuesta del archivo sin considerar mayúsculas ni minúsculas. Si el usuario contesta un texto distinto, de al menos la mitad de la longitud de la respuesta esperada, pero que forma parte ella, se le dará la mitad de los puntos de la pregunta.

Las preguntas de selección única presentan una lista enumerada de opciones. El jugador debe responder con el número de la opción, y si coincide con la respuesta del archivo, se le dará el puntaje de la pregunta. Note que su programa debe enumerar las opciones empezando en 1, y que el número de opciones puede variar de una pregunta a otra.

Su programa debe tener una clase Juego (o Trivia), la cual debe cargar todas las preguntas existentes en el archivo preguntas.txt en un arreglo dinámico privado de preguntas. Cuando se inicia el juego, su programa escoge preguntas aleatoriamente y las aplica al jugador. Aplicar una pregunta corresponde al hecho de imprimirla, esperar la respuesta del jugador y calificarla. Después de cada pregunta se imprimen estadísticas, como el puntaje acumulado por el jugador, la cantidad de preguntas acertadas, parcialmente acertadas y fallidas. Tras cada pregunta aplicada se le debe permitir al jugador escoger si quiere o no continuar jugando. Para poder alojar preguntas de diferente tipo en un mismo contenedor, sus preguntas deberán comportarse polimórficamente de acuerdo a la siguiente jerarquía:

Diagrama UML con los tipos de preguntas

Puede tomar como punto de partida los ejemplos vistos en clase. Deberá agregar el puntaje de cada pregunta a la jerarquía, e implementar el método aplicar() en las preguntas: numéricas, textuales y de selección única. Recuerde que cuando se aplica una pregunta, debe imprimirse su texto y opciones (si las tiene), esperar una respuesta del usuario; si acierta se le felicita, si falla se le revela la respuesta correcta; y finalmente se retorna el puntaje obtenido.

Evaluación

  1. [30%] Clase controladora Juego o Trivia. Carga preguntas correctamente desde el archivo. Elimina preguntas sin dejar fugas de memoria.
  2. [20%] Clase controladora Juego o Trivia: se mantiene en el juego hasta que el jugador decide abandonar. Muestra estadísticas sobre puntajes y preguntas aprobadas y fallidas.
  3. [10%] Clases Pregunta y PreguntaAbierta son correctas y abstractas.
  4. [10%] Clase PreguntaNumerica. Se aplican correctamente durante el juego.
  5. [15%] Clase PreguntaTextual. Se aplican correctamente durante el juego. Ignoran mayúsculas y minúsculas. Premian respuestas parciales.
  6. [15%] Clase PreguntaSeleccionUnica. Se aplican correctamente durante el juego. Impide respuestas fuera de rango.

Para presentar su solución, comprima los archivos fuente que utilizó y envíelos al asistente (sugerencia: con copia al profesor) antes del 22 de noviembre a las 23:55.