Proyecto IETI Card Game

De Wiket
Salta a la navegació Salta a la cerca

Introducción

  • IETI Card Game es un juego de cartas fantástico basado en los juegos estilo POKEMON, HEARTHSTONE, etc... El juego permite leer cartas en formato XML, crear mazos y luchar. Las luchas son automáticas siguiendo unas reglas básicas explicadas en un apartado posterior.
  • Cuando inicias la aplicación se te ofrecen las siguientes opciones:
    • Cargar cartas (permite leer un XML con todas las cartas disponibles para crear un mazo)
    • Carga cartas Enemigo (permite leer un XML con todas las cartas disponibles para crear un mazo)
    • Crear mazo aleatorio (selecciona cartas aleatorias de las cartas disponibles hasta llegar a un máximo de 20 puntos de invocación y añade un nombre al mazo)
    • Crear mazo ofensivo (selecciona cartas hasta un máximo de 10 siendo las cartas con ataque más alto)
    • Crear mazo defensivo (selecciona cartas hasta un máximo de 10 siendo las cartas con defensa más alta)
    • Crear mazo equilibrado (Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima)
    • Crear mazo aleatorio Enemigo (selecciona cartas aleatorias de las cartas disponibles hasta llegar a un máximo de 10 cartas y añade un nombre al mazo)
    • Crear mazo ofensivo Enemigo (selecciona cartas hasta un máximo de 10 siendo las cartas con ataque más alto)
    • Crear mazo defensivo Enemigo (selecciona cartas hasta un máximo de 10 siendo las cartas con defensa más alta)
    • Crear mazo equilibrado Enemigo (Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima)
    • Luchar Jugador vs Jugador (si existe un mazo propio y un mazo enemigo se produce la lucha y se muestran los resultados)
    • Luchar Jugador vs Bot (si existe un mazo propio, se genera otro mazo aleatorio de la baraja cargada del jugador, se lucha y se muestran los resultados)
    • Luchar Jugador vs Bot (liga) (si existe un mazo propio, se crean 5 jugadores IA con 5 mazos basados en tu propia baraja y se crea una liga clasificatoria. Las luchas se ejecutarán en modo resumen y solo se verá el resultado del ganador)
  • En la fase 1 del proyecto toda la aplicación funciona a través de la consola, por lo tanto las opciones se pintan en la consola y se seleccionan introduciendo el número correspondiente a la opción, en el proyecto 2 se implementará un apartado visual que permitirá seleccionar estas opciones con botones.
  • M3:Crear una "liga"
    • Se crearan 5 jugadores y se guardarán los resultados de los enfrentamientos en un fichero ( mostrar resultados del jugador X en el menú)
    • Se creará un fichero jornadaX.txt por cada una de las jornadas posibles. En este fichero se guardarán los resultados de cada jornada en caso de haberse jugado.
    • Se creará un fichero con la clasificación ( mostrar clasificación en el menú), que se calculará a partir de los ficheros jornadaX.txt que ya se hayan jugado
    • Se podrán dejar los enfrentamientos a medias y se podrá recuperar el estado para continuar. Estos ficheros contendrán algún tipo de marca que nos indique si la partida ha finalizado o está a medias. En caso de estar a medias, la podremos continuar en el punto donde la hemos dejado. En caso de estar acabada, podremos reproducir la partida de nuevo.

Definiciones

Cartas

  • Una carta consta de los siguientes atributos:
    • Nombre: Nombre de la carta
    • Descripción: Información sobre el lore de la carta
    • Puntos de invocación: El número de puntos de invocación necesario para jugar esta carta (de 0 a 5)
    • Ataque: El poder de ataque de la carta (de 0 a 5)
    • Defensa:La defensa de la carta (0 a 5)
    • Tipo:El tipo de carta (Infantería, Caballería, Lanceros)

¿Como crear una carta?

  • Para crear una carta se tienen que seguir las siguientes indicaciones:
    • Asignar un nombre a la carta (no puede ser vacío, el nombre no puede tener más de 20 carácteres)
    • Crear una descripción para la carta (no puede ser vacío, la descripción no puede tener más de 60 carácteres)
    • Los puntos de invocación se calculan con la siguiente fórmula (puntos de invocación = (ataque + defensa)
    • Asignar un tipo a la carta (los tipos disponibles son: infanteria, caballeria, lanceros)

Reglas del juego

  • Cada jugador tiene 10 puntos de vida
  • La partida se desarrolla por turnos
  • En un turno hay 3 fases: fase de invocación, fase de destino, fase de confrontación
  • Cada jugador tiene 5 puntos de invocación por turno
    • Fase de invocación:
      • Se elige aleatoriamente una carta del mazo del jugador 1, si aun quedan puntos de invocación disponibles se selecciona aleatoriamente una carta del mazo con puntos de invocación disponible, así hasta que al jugador 1 no le queden puntos de invocación.
      • Se repite lo mismo para el jugador 2
    • Fase de destino:
      • Se elige de forma aleatoria que jugador atacará primero
    • Fase de confrontación:
      • El jugador que ataque primero selecciona la primera carta invocada y realiza un ataque a la primera carta invocada del jugador 2 (ataque - defensa) si el ataque supera la defensa la carta defensora es eliminada y los puntos de ataque sobrantes se restan a la vida del jugador, si la defensa supera al ataque no pasa nada. Después se realiza lo mismo con la siguiente carta del jugador que ataca hasta la última carta. Cuando ya se ha atacado con todas las cartas del primer jugador se hace lo mismo con el segundo jugador. Este ciclo se repite hasta que o bien a alguno de los jugadores no le queden cartas invocadas (en este caso volvemos a la fase de invocación y empieza el ciclo de nuevo) o el jugador pierda todos sus puntos de vida (en este caso se acaba la partida).
  • Los tipos de cartas sirven para aplicar modificadores al ataque. Infanteria > lanceros > cabelleria > Infanteria. De manera que si una carta tipo infanteria ataca a otra carta tipo lancero aplica un modificador x2 al ataque
  • El jugador que gana la partida obtiene 20 puntos.

Especificaciones

Especificaciones funcionales

  1. Se ha de crear un XML que cumpla con la especificación del DTD IETI_Card_Game.DTD facilitado por los profesores. El XML ha de validar contra el DTD y ha de tener un mínimo de 20 cartas que cumplan con las especificaciones de ¿Como crear una carta?
  2. Se ha de crear un menú que presente las opciones del juego (solo se tienen que presentar las opciones que esten disponibles, por ejemplo, al arrancar el programa las únicas opciones disponibles serían Cargar cartas y cargar cartas Enemigo, después de alguna de estas opciones se presentan además las opciones de crear mazos pero no las de luchar, etc...):
    1. Cargar cartas
    2. Carga cartas Enemigo
    3. Crear mazo aleatorio
    4. Crear mazo ofensivo
    5. Crear mazo defensivo
    6. Crear mazo equilibrado
    7. Crear mazo aleatorio Enemigo
    8. Crear mazo ofensivo Enemigo
    9. Crear mazo defensivo Enemigo
    10. Crear mazo equilibrado Enemigo
    11. Luchar Jugador vs Jugador
    12. Luchar Jugador vs Bot (arcade)
    13. Luchar Jugador vs Bot (liga)
  3. Cargar cartas/cargar cartas Enemigo: Se tiene que leer el fichero XML y guardar las cartas en memoria (esto lo llamaremos baraja). Al usuario se le tiene que indicar si la carga ha ido bien, si ha habido algún error, etc y volver a mostrar el menú. La baraja del jugador local se llamará SIEMPRE myBaraja.xml, la del Enemigo Enemigo.xml
  4. Crear mazo aleatorio/crear mazo aleatorio Enemigo: Selecciona 10 cartas aleatorias de la bajara de cartas cargadas (La selección de las cartas se ha de realizar en Xpath)
  5. Crear mazo ofensivo/crear mazo ofensivo Enemigo: Selecciona las 10 cartas con mayor ataque de la baraja de cartas cargada (La selección de las cartas se ha de realizar en Xpath)
  6. Crear mazo defensivo/crear mazo defensivo Enemigo: Selecciona las 10 cartas con mayor defensa de la baraja de cartas cargada (La selección de las cartas se ha de realizar en Xpath)
  7. Crear mazo equilibrado/crear mazo equilibrado Enemigo: Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima (La selección de las cartas se ha de realizar en Xpath)
  8. Luchar Jugador vs Jugador: Si existe una baraja local cargada y una baraja enemiga se podrá luchar jugador contra jugador. Se ejecuta el primer turno tal y como se define en las reglas del juego y se presenta el resultado (cartas invocadas, si han muerto o no y los puntos de daño recibidos por cada jugador, si uno de los jugadores muere en ese turno se indicará que es el fin de la partida, sino el jugador podrá indicar que se pase al siguiente turno.
  9. Luchar Jugador vs Bot: El funcionamiento es identico al de Luchar J vs J, solo que solo hace falta tener la baraja del jugador local cargada. El juego creará un mazo aleatorio de las cartas de la bajara local para luchar.
  10. Luchar Jugador vs Bot (liga):

Especificaciones no funcionales

  1. El proyecto se ha de realizar en PYTHON
  2. El proyecto ha de estar colgado en GITHUB y se trabajará con este gestor de código
  3. Se ha de comentar el código
  4. Se ha de crear un fichero con el nombre ieti_card_game.dtd con el siguiente contenido:
    <!ELEMENT PlayerConfig (playerLife, summonPointsPlayer, deck) >
    <!ELEMENT summonPointsPlayer (#PCDATA)>
    <!ELEMENT playerLife (#PCDATA)>
    <!ELEMENT deck (card)+>
    <!ELEMENT card (name, description, attack, defense)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT description (#PCDATA)>
    <!ELEMENT attack (#PCDATA)>
    <!ELEMENT defense (#PCDATA)>
    <!ATTLIST card summonPoints (0 | 1 | 2 | 3 | 4 | 5) #REQUIRED>
    <!ATTLIST card type (infantry | chivalry | lancer ) #REQUIRED>
    

Dedicación al proyecto

Horas disponibles

  • 2 horas de M04
                AMS1 Viernes, AWS1 Lunes, SIS1 Martes)
  • 4 horas de M03
                AMS1: Martes(08:00-10:00H) y Miércoles(10:15-12:10H) / Jueves (10:15-12:10H)
                AWS1: Martes(12:30-14:30H) y Miércoles(08:00-10:00H) / Viernes (12:30-14:30H)

Inicio del proyecto

12/2/2020

Final del proyecto

14/03/2020

Fechas de entrega

Entrega Fase 1

  AWS1: 20/02/2020     Total: 8H

12/02 Dimecres M3: 2H

17/02 Dilluns M5: 2H

18/02 Dimarts M3: 2H

19/02 Dimecres M3: 2H

  AMS1: 20/02/2020     Total: 8H

12/02 Dimecres M3: 2H

14/02 Divendres M5: 2H

18/02 Dimarts M3: 2H

19/02 Dimecres M3: 2H

Entrega Fase 2

   AWS1: 04/03/2020      Total: 8H

25/02 Dimarts M3: 2H

02/03 Dilluns M3: 2H

03/03 Dimarts M3: 2H

04/02 Dimecres M3: 2H

  AMS1: 03/03/2020       Total: 8H

21/02 Divendres M5: 2H

25/02 Dimarts M3: 2H

27/02 Dijous M3: 2H

03/03 Dimarts M3: 2H

Entrega Fase 3

  AWS1: 12/03/2020     TOTAL: 8H

06/03 Divendres M3: 2H

09/03 Dilluns M5: 2H

10/03 Dimarts M3: 2H

11/03 Dimecres M3: 2H

  AMS1: 12/03/2020     TOTAL: 8H

04/03 Dimecres M3: 2H

06/03 Divendres M5: 2H

10/03 Dimarts M3: 2H

11/03 Dimecres M3: 2H

Fases del proyecto (Sprints)

Fase 1

Funcionalidades a entregar:

  1. Se ha de crear un XML que cumpla con la especificación del DTD IETI_Card_Game.DTD facilitado por los profesores. El XML ha de validar contra el DTD y ha de tener un mínimo de 20 cartas que cumplan con las especificaciones de ¿Como crear una carta?
  2. Se ha de crear un menú que presente las opciones del juego (solo se tienen que presentar las opciones que esten disponibles, por ejemplo, al arrancar el programa las únicas opciones disponibles serían Cargar cartas y cargar cartas Enemigo, después de alguna de estas opciones se presentan además las opciones de crear mazos pero no las de luchar, etc...):
    1. Cargar cartas
    2. Carga cartas Enemigo
    3. Crear mazo aleatorio
    4. Crear mazo ofensivo
    5. Crear mazo defensivo
    6. Crear mazo equilibrado
    7. Crear mazo aleatorio Enemigo
    8. Crear mazo ofensivo Enemigo
    9. Crear mazo defensivo Enemigo
    10. Crear mazo equilibrado Enemigo
    11. Luchar Jugador vs Jugador
    12. Luchar Jugador vs Bot (arcade)
    13. Luchar Jugador vs Bot (liga)
  3. Cargar cartas/cargar cartas Enemigo: Se tiene que leer el fichero XML y guardar las cartas en memoria (esto lo llamaremos baraja). Al usuario se le tiene que indicar si la carga ha ido bien, si ha habido algún error, etc y volver a mostrar el menú. La baraja del jugador local se llamará SIEMPRE myBaraja.xml, la del Enemigo Enemigo.xml

Fase 2

Funcionalidades a entregar:

  1. Crear mazo aleatorio/crear mazo aleatorio Enemigo: Selecciona 10 cartas aleatorias de la bajara de cartas cargadas
  2. Crear mazo ofensivo/crear mazo ofensivo Enemigo: Selecciona las 10 cartas con mayor ataque de la baraja de cartas cargada
  3. Crear mazo defensivo/crear mazo defensivo Enemigo: Selecciona las 10 cartas con mayor defensa de la baraja de cartas cargada
  4. Crear mazo equilibrado/crear mazo equilibrado Enemigo: Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima

Fase 3

Funcionalidades a entregar para M3:

  1. Luchar Jugador vs Jugador: Si existe una baraja local cargada y una baraja enemiga se podrá luchar jugador contra jugador. Se ejecuta el primer turno tal y como se define en las reglas del juego y se presenta el resultado (cartas invocadas, si han muerto o no y los puntos de daño recibidos por cada jugador, si uno de los jugadores muere en ese turno se indicará que es el fin de la partida, sino el jugador podrá indicar que se pase al siguiente turno.
  2. Luchar Jugador vs Bot: El funcionamiento es identico al de Luchar J vs J, solo que solo hace falta tener la baraja del jugador local cargada. El juego creará un mazo aleatorio de las cartas de la bajara local para luchar.
  3. Luchar Jugador vs Bot (liga):