En este juego, varios personajes cobrarán vida en la Tierra Media.
Existen diferentes tipos de personajes provenientes de distintas especies.
Los magos, también conocidos como Istari, tienen el dominio de la magia, que provee capacidades de ataque y de defensa. La magia es innata a ellos, aunque pueden adquirir más mediante el estudio de la asignatura, y mediante elementos que la potencian —por ejemplo, un bastón mágico—.
Los elfos son criaturas supernaturales que también poseen características mágicas, y en general son conocidos por ayudar a los demás.
Los enanos son seres temperamentales, muy buenos en combate con las armas, físicamente fuertes, con mucha resistencia y leales a sus amigos.
Los personajes necesitan de ciertos elementos para poder combatir con sus enemigos. Estos elementos pueden ser ropaje —túnica, por ejemplo—, armas —como un hacha o una espada—, entre otros.
Existe un elemento particularmente interesante, llamado libro de hechizos. El libro de hechizos es tan poderoso como hechizos tenga en él, y representa el conocimiento de un mago.
Cada equipo deberá crear un repo para el desarrollo de este juego. Todos los miembros del equipo deberán tener acceso al repo.
En equipo, modelen las clases y las colaboraciones que son necesarias para representar los elementos del juego mencionados; pueden comenzar usando tarjetas CRC o directamente haciendo el diagrama de clases UML.
Important
Recuerden que los personajes deben poder tener items. Por ejemplo, los magos pueden tener un bastón mágico, un libro de hechizos —con hechizos—, etc.
Deberán crear y subir al repositorio el modelo, en forma de diagrama de clases, usando Mermaid. Hay un ejemplo con un punto de partida ya hecho en el archivo DIAGRAM.md.
Cada equipo deberá crear las clases representadas en el modelo anterior. Cada integrante deberá crear, al menos:
- Un personaje 🧙♂️
- Dos elementos ⚔️ 🛡
Important
Recuerden crear el libro de hechizos y sus hechizos —existe un solo tipo de hechizo por ahora—.
Los personajes tienen, además de sus items, un nombre y una cantidad de vida limitada.
Sus items pueden además quitarse o cambiarse por otros similares —por ejemplo, darle a un mago un bastón mágico nuevo, o simplemente quitarle el que tiene—.
Los elementos tienen un valor de ataque y un valor de defensa. Es posible que en algunos casos alguno de estos valores sea 0. Por ejemplo, un elemento "Armadura" puede tener valor de ataque 0.
Tip
Fuente de inspiración.
Agregar al proyecto el siguiente comportamiento:
- Obtener el valor total de ataque de un personaje. ⚔️
- Obtener el valor total de defensa de un personaje. 🛡
- Atacar a un personaje (disminuir su vida en cierta cantidad) 🗡
- Curar a un personaje (recuperar su vida inicial) 🚑
Justificar con comentarios en el código las decisiones que tomaron para resolver esta parte del desafío, incluyendo si utilizaron algún patrón o principio.
Deberán escribir casos de test para probar su programa. Como equipo tendrán que
evaluar qué casos de test son necesarios, y deberán reflejar qué hace el test
usando la convención de MethodName_StateUnderTest_ExpectedBehavior y
opcionalmente un comentario que explique qué es lo que prueba el test.
Todos los integrantes del equipo deben participar de la escritura de tests —contribuyendo al menos uno de los casos—.
Puedes usar GitHub Copilot en este repositorio. Si no tienes una suscripción a Copilot, puedes aplicar a una como estudiante de la Universidad Católica del Uruguay aquí.
El repositorio está configurado para usar Copilot en Visual Studio Code. Verifica la instalación siguiendo Set up Copilot in Visual Studio Code.
En este repositorio las sugerencias de código en líneas están inhabilitadas, para promover que escribas tu propio código. Revisa Setting up Copilot for learning to code.
En este repositorio, Copilot está configurado para actuar como tutor y no para reemplazarte como programador: no deberías pedirle directamente el código que resuelva el problema —el agente no debería responder esas peticiones—.
¿Qué cosas puedes pedirle a Copilot?
-
Explicaciones de fragmentos de código, por ejemplo, qué hace una línea de código, un método, o una clase que te damos o que programó otro de los miembros de tu equipo.
-
Preguntas de práctica de los conceptos relacionados con el ejercicio. Copilot también puede corregir tus respuestas.
-
Ejercicios para practicar los conceptos relacionados con el ejercicio. Incluso puedes pedir ejercicios simples primero, y luego, otros más complejos. Copilot puede también corregir tus soluciones.
-
Ejemplos de los conceptos relacionados con el ejercicio.
-
Qué pasos tendrías que dar para resolver problemas sin código.
-
Ayuda para depurar; mira Learning to debug with GitHub Copilot.
-
Pseudocódigo o algoritmos en lenguaje natural en vez de código ejecutable.
-
Retroalimentación sobre el código que tú escribas.
-
Detección de casos de prueba de escenarios o condiciones que no hayas contemplado todavía; revisa Testing code with Copilot Chat.
-
Búsqueda en las API de las clases y métodos que puedes usar para resolver un problema.
En definitiva, puedes pedir muchas cosas, incluso que te dé un problema resuelto; pero si le pides que resuelva un problema por ti, no vas a aprender nada.
Tip
Revisa Best practices for using GitHub Copilot para conocer formas de usar Copilot.
Warning
Ten en cuenta que las respuestas de Copilot pueden ser incorrectas y que tú eres siempre responsable del código que entregas.
Tip
Cuando comiences un chat con Copilot, dile que eres un estudiante, por ejemplo, "soy un estudiante que ..."; esto puede mejorar la ayuda que te da Copilot.