Diferència entre revisions de la pàgina «Proyecto IETI Card Game»
Salta a la navegació
Salta a la cerca
Línia 19: | Línia 19: | ||
=por definir= | =por definir= | ||
* crear una "liga" | * crear una "liga" | ||
− | ** Se crearan | + | ** Se crearan 4 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 con la clasificación ( mostrar clasificación 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 podrán dejar los enfrentamientos a medias y se podrá recuperar el estado para continuar. | + | ** 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= | =Definiciones= |
Revisió del 15:21, 5 feb 2020
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 20 puntos de invocación siendo las cartas con ataque más alto)
- Crear mazo defensivo (selecciona cartas hasta un máximo de 20 puntos de invocación siendo las cartas con defensa más alta)
- Crear mazo equilibrado (selecciona cartas hasta un máximo de 20 puntos de invocación siendo la mitad de los puntos las cartas de ataque más alto y la otra mitad las cartas de defensa más alta)
- Crear mazo aleatorio Enemigo (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 Enemigo (selecciona cartas hasta un máximo de 20 puntos de invocación siendo las cartas con ataque más alto)
- Crear mazo defensivo Enemigo (selecciona cartas hasta un máximo de 20 puntos de invocación siendo las cartas con defensa más alta)
- Crear mazo equilibrado Enemigo (selecciona cartas hasta un máximo de 20 puntos de invocación siendo la mitad de los puntos las cartas de ataque más alto y la otra mitad las cartas de defensa más alta)
- 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 7 jugadores IA con 7 mazos basados en tu propia baraja y se crea una liga eliminatoria. 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 la fase 2 se implementará un apartado visual que permitirá seleccionar estas opciones con botones
por definir
- crear una "liga"
- Se crearan 4 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).
- Fase de invocación:
- 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
- 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?
- 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...):
- Cargar cartas
- Carga cartas Enemigo
- Crear mazo aleatorio
- Crear mazo ofensivo
- Crear mazo defensivo
- Crear mazo equilibrado
- Crear mazo aleatorio Enemigo
- Crear mazo ofensivo Enemigo
- Crear mazo defensivo Enemigo
- Crear mazo equilibrado Enemigo
- Luchar Jugador vs Jugador
- Luchar Jugador vs Bot (arcade)
- Luchar Jugador vs Bot (liga)
- 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
- Crear mazo aleatorio/crear mazo aleatorio Enemigo: Selecciona 10 cartas aleatorias de la bajara de cartas cargadas
- Crear mazo ofensivo/crear mazo ofensivo Enemigo: Selecciona las 10 cartas con mayor ataque de la baraja de cartas cargada
- Crear mazo defensivo/crear mazo defensivo Enemigo: Selecciona las 10 cartas con mayor defensa de la baraja de cartas cargada
- Crear mazo equilibrado/crear mazo equilibrado Enemigo: Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima
- 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.
- 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.
- Luchar Jugador vs Bot (liga):
Especificaciones no funcionales
- El proyecto se ha de realizar en PYTHON
- El proyecto ha de estar colgado en GITHUB y se trabajará con este gestor de código
- Se ha de comentar el código
Dedicación al proyecto
Horas disponibles
- 2 horas de M04 ( AMS1 Viernes, AWS1 Lunes, SIS1 Martes)
- 5 horas de M03 (AMS1 ...., AWS1 ...., SIS1 ....)
Inicio del proyecto
12/2/2020
Final del proyecto
??/2/2020
Fechas de entrega
Entrega Fase 1
??/??/2020
Entrega Fase 2
??/??/2020
Entrega Fase 3
??/??/2020
Fases del proyecto (Sprints)
Fase 1
Funcionalidades a entregar:
- 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?
- 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...):
- Cargar cartas
- Carga cartas Enemigo
- Crear mazo aleatorio
- Crear mazo ofensivo
- Crear mazo defensivo
- Crear mazo equilibrado
- Crear mazo aleatorio Enemigo
- Crear mazo ofensivo Enemigo
- Crear mazo defensivo Enemigo
- Crear mazo equilibrado Enemigo
- Luchar Jugador vs Jugador
- Luchar Jugador vs Bot (arcade)
- Luchar Jugador vs Bot (liga)
- 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:
- Crear mazo aleatorio/crear mazo aleatorio Enemigo: Selecciona 10 cartas aleatorias de la bajara de cartas cargadas
- Crear mazo ofensivo/crear mazo ofensivo Enemigo: Selecciona las 10 cartas con mayor ataque de la baraja de cartas cargada
- Crear mazo defensivo/crear mazo defensivo Enemigo: Selecciona las 10 cartas con mayor defensa de la baraja de cartas cargada
- Crear mazo equilibrado/crear mazo equilibrado Enemigo: Selecciona las 10 cartas cuya diferencia entre ataque y defensa sea mínima
- 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.
Fase 3
Funcionalidades a entregar:
- 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.
- Luchar Jugador vs Bot (liga):