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
Implemente en C++ una versión gráfica del juego Trivia utilizando la biblioteca Qt, la cual permitirá a un jugador practicar en su propia máquina, o retarse contra otros jugadores a través de la red.
Su programa debe cargar polimórficamente las preguntas desde un archivo Trivia.xml en notación XML, y almacenarlas en un contenedor de acceso aleatorio, como un arreglo dinámico QVector (o si lo prefiere un QList). Si el archivo no existe o está corrupto, su programa lo informa con un mensaje de error y termina su ejecución.
Una instancia de su programa sólo permitirá interactuar a un único jugador. Al iniciar su ejecución, el programa intenta crear una nueva sesión de juego preguntando por el apodo (nickname) del jugador y el modo de juego: local (singleplayer) o en red (multiplayer). Si el jugador escoje el modo local, el juego inicia inmediatamente.
Si el jugador escoge la modalidad en red, tendrá la opción de crear una nueva sesión de juego o unirse a una existente. En el primer caso creará un servidor en algún puerto TCP de su máquina, y quedará a la espera del otro jugador. En caso de unirse a una sesión existente, se le preguntará la dirección de la máquina servidor y el puerto en que está esperando. Una vez conectados, el juego iniciará simultáneamente para ambos jugadores. Asuma que su implementación permitirá a lo sumo dos jugadores y que éstos tienen exactamente la misma copia del archivo de preguntas Trivia.xml.
Una vez iniciada la sesión de juego, el programa (el servidor) lanza preguntas escogidas aleatoriamente del contenedor en memoria. Si el juego es en red, ambos jugadores verán exactamente la misma pregunta en sus pantallas. El jugador tendrá una cantidad máxima de segundos para responder, la cual se muestra con un contador decreciente que debe actualizarse cada segundo (QTimer). Al vencerse este contador, el programa muestra la respuesta correcta por 2 segundos y pasa a la siguiente pregunta.
Cada pregunta conoce su duración sugerida, la cual está escrita en el archivo Trivia.xml. Si antes de vencer este tiempo el jugador responde la pregunta correctamente, se le marca como correcta, resaltando la respuesta en verde, y se le reproduce un sonido (QSound) de felicitación. Si la respuesta es incorrecta se resalta en rojo, y en verde aquella correcta, con el fin de que el jugador pueda aprender. Además se le reproduce un sonido para advertir el fallo.
En modo de red, si un jugador A responde antes de vencerse el contador, la instancia de su programa avisa al servidor. El servidor avisa al otro jugador B y la instancia de su programa congela la pregunta, indicando que el otro jugador respondió primero, más la respuesta de dicho jugador y la respuesta correcta en caso de ser diferente.
Tras cada pregunta se actualiza el marcador de cada jugador. El juego continúa indefinidamente, hasta que uno de los jugadores (o el único en modalidad local), decide abandonar el juego.
Las preguntas del juego son de tres tipos: preguntas de selección única (single_choice), preguntas de respuesta numérica (numeric) y preguntas de respuesta textual (textual). Su programa mostrará controles adecuados a cada tipo de pregunta, además de los controles para capturar las respuestas y presentar el estado del juego (marcador, tiempo restante, marcador del otro jugador, etc.).
La modalidad de entrega del proyecto será en parejas. La fecha de entrega límite es el 13-diciembre-2012, en la plataforma educativa (Moodle) de la ECCI.