Subido por Jorge Leal

Apocalipsis 2023 v2

Anuncio
Prácticas de la asignatura de
Programación Orientada a Objetos.
Grado en Ingeniería Informática
_______________________________
Curso 2023/2024
Práctica grupal de la convocatoria ordinaria.
A-POO-Calipsis zombi
Pues ya está, ha ocurrido. El apocalipsis zombi ha empezado en el campus de
Móstoles de la URJC. Los estudiantes inundan las redes con mensajes sobre lo que está
pasando.
"Sabía que los exámenes finales eran mortales, ¡pero esto es ridículo!"
"Bueno, al menos ahora sé cómo se siente tener que escapar de un bucle infinito
en la vida real."
"No sé si prefiero los zombis o POO, pero al menos en el apocalipsis zombi, no
tengo que preocuparme por herencias ni polimorfismo."
“Cuando empezó el apocalipsis zombi estaba a punto de entrar en clase de POO,
así que ni tan mal”.
“Me viene fatal. Quisiera ver si estos zombis seguirían con ganas de ir
correteando por ahí si tuvieran que prepararse 3 parciales y 4 entregas de prácticas
en las próximas semanas.”
“¿Que cómo mordieron al profesor? Se quedó en el aula llena de zombis diciendo
algo sobre lo contento que estaba de que hoy le estuvieran prestando tanta atención”
En este trabajo se pide diseñar e implementar las clases necesarias para hacer
funcionar un sencillo juego de supervivencia en un apocalipsis zombi.
En este juego se tienen que modelar varios conceptos y entidades, algunos de los
cuales tiene que deducirlos el alumno y otros se comentan a continuación(*).
NOTA (*): Es posible que el alumno tenga que añadir información a las entidades aquí
identificadas si lo considera relevante en su diseño.
El Superviviente
Los supervivientes tienen las siguientes características:
- Un nombre que identifica al personaje.
- Un estado que es un valor que puede variar entre VIVO y ELIMINADO.
- Un valor entero que representa el número máximo de acciones que puede
ejecutar. En la práctica serán 3 acciones.
- Un conjunto de hasta 5 instancias de Equipo (ver más adelante).
- Tiene la posibilidad de tener hasta dos Armas activas (una en cada mano).
- Un entero con la cuenta del número de zombis eliminados.
- Un entero con la cuenta de las heridas recibidas. El Superviviente es eliminado
con dos heridas.
El Zombi
Los zombis no son todos iguales, pues se han identificado 3 tipos de zombi distintos
según reaccionan a los ataques. Dentro de cada tipo de zombi, hay más tipos distintos
según su aguante y velocidad.
Lo que tienen todos los zombis en común es:
-
-
-
El aguante: sería un valor que expresa la vulnerabilidad del zombi ante los
ataques que se realizan con un Arma determinada (más adelante se ven las
armas). Si el zombi tuviera aguante 3, sería imposible de eliminar por armas de
potencia 1 ó 2 por muchos ataques que recibiera de ese arma. El arma tendría
que tener potencia 3 para eliminar a un zombi de aguante 3.
Número de activaciones: Los zombis se activan después del turno de los
supervivientes. Algunos zombis tendrán 1 activación y los más rápidos tendrán
2 activaciones. En cada activación los zombis hacen lo mismo: si están en la
misma casilla que un Superviviente, lo muerden. Si no, moverán una casilla
hasta el Superviviente más cercano.
Todos los zombis tienen que poder reaccionar ante un ataque, pero no lo
hacen igual. Las reacciones ante ataques de todos los zombis necesitan recibir
al superviviente atacante y el arma que está usando.
El primer tipo de zombi es el Caminante Normal. Este zombi tiene aguante = 1 y el
número de activaciones es 1. Su reacción ante un ataque es que encuentra la muerte
definitiva si el arma con el que le atacan tiene una potencia igual a su aguante (1) y el
ataque no falla.
El segundo tipo de zombi es el Caminante Berserker. Este zombi tiene el mismo
aguante y el mismo número de activaciones que el Caminante Normal (todos los que
son caminantes tienen ambas características iguales). Su reacción ante un ataque
tiene la peculiaridad de la inmunidad a los ataques con armas a distancia. Estos
zombis han desarrollado unas placas protectoras que les protegen de balas, flechas y
de cualquier ataque a distancia. Con armas de cuerpo a cuerpo reaccionan
exactamente igual que los Caminantes Normales.
El tercer tipo de zombi es el Caminante Tóxico. Este zombi tiene el mismo aguante y
número de activaciones que los otros dos Caminantes. Su reacción ante los ataques
implica que el Superviviente que le ataca sufre también una herida si está en la misma
casilla que el Zombi Tóxico. Estos zombis tienen sangre tóxica y al salpicar hieren al
Superviviente que les atacó (sólo si está en la misma casilla, la sangre tóxica no tiene
mucho alcance).
También hay que modelar al Corredor Normal. Este zombi tiene aguante = 1 pero el
número de activaciones es 2. Su reacción ante ataques es la misma que la de un
Caminante Normal.
De la misma manera, hay que modelar al Corredor Berserker y al Corredor Tóxico.
Estos zombis tienen las mismas características que el Corredor Normal (aguante = 1 y
número de activaciones = 2) pero el Corredor Berserker tiene la misma reacción ante
ataques que el Caminante Berserker y el Corredor Tóxico tiene la misma reacción ante
ataques que el Caminante Tóxico.
Por último, están los zombis Abominación Normal, la Abominación Berserker y la
Abominación Tóxica. Todas las Abominaciones tienen aguante = 3 y su número de
activaciones es 1. El comportamiento ante ataques de la Abominación Normal es la
misma que la del Caminante Normal. El comportamiento ante ataques de la
Abominación Berserker es la misma que la del Caminante Berserker. El
comportamiento ante ataques de la Abominación Tóxica es la misma que el del
Caminante Tóxico.
Activables
El Superviviente y el Zombi son dos entidades que no son lo mismo, pero tienen
algunas cosas en común: son dos entidades activables.
Un entidad activable puede activarse, moverse o atacar. Activarse y moverse serían
dos comportamientos de entidades Activables que requieren información sobre un
Juego (ver más adelante). Mientras que atacar sería un comportamiento de una
entidad activable que actuaría sobre otra entidad activable.
Además, las entidades activables también tendrían que tener el comportamiento de
devolver una coordenada (la casilla en la que se encuentran).
Equipo.
El equipo son elementos que puede llevar un Superviviente. Hay dos tipos de Equipo:
Armas
Las armas pueden ser armas activas en un Superviviente. Tienen varias
características.
-
-
-
Nombre, que identifica el arma.
Potencia. El valor de daño que puede hacer un arma. Las armas de potencia 1
podrán eliminar a zombis de aguante 1, las armas de potencia 2 a los zombis
de aguante 2 y así sucesivamente.
AlcanceMáximo. Las armas de cuerpo a cuerpo tienen alcance 0 (se pueden
usar en la misma casilla en la que se encuentra el superviviente). Las armas a
distancia tendrán un valor mayor que cero que indicará a cuántas casillas de
distancia se puede atacar.
NúmeroDados. El número de dados que lanza el arma (ver más adelante cómo
funciona el ataque de los supervivientes).
ValorÉxito. El valor que tiene que igualar o superar cada dado para
considerarse un éxito. Cada éxito de un arma sirve para aplicar su potencia a
un zombi. Si se obtienen 3 éxitos con un arma de potencia 1, podrían
eliminarse 3 caminantes (por ejemplo).
Provisiones.
Las provisiones tienen otras características:
-
Nombre que identifica la provisión.
Valor energético. Un número real con las kCal que proporciona el alimento.
Caducidad. Una fecha.
Cuando un Superviviente hace una acción de buscar, no sabe si encontrará un arma o
provisiones. El alumno puede decidir la probabilidad de cada suceso.
Acciones de los Supervivientes.
Los supervivientes en su turno tienen 3 acciones. Cuando todos los supervivientes
hayan hecho sus acciones, es el turno de las activaciones de los zombis.
Las acciones posibles para el superviviente son:
-
-
-
-
-
Moverse. El superviviente puede gastar una acción para moverse de una
casilla a otra casilla contigua. Pero si hay zombis en la casilla en la que se
encuentra, gastará una acción extra por cada zombi. Es decir, si no hay zombis
en su casilla, gasta una acción para moverse a una casilla adyacente. Si hay
un zombi, gasta dos acciones para hacer el mismo movimiento. Si hay dos
zombis, gasta las 3 acciones en moverse. Si hay 4 zombis, no se puede mover,
está rodeado.
Buscar. El superviviente puede gastar una acción para buscar en su casilla una
instancia de Equipo. Obtiene aleatoriamente una instancia de Equipo. No se
puede buscar dos veces en la misma casilla.
Atacar. El superviviente puede gastar una acción para atacar a una casilla
usando un arma equipada. Los éxitos obtenidos se emplearán en eliminar
todos los zombis posibles de esa casilla.
Elegir arma. El superviviente puede gastar una acción en elegir un arma que
tenga en su inventario (puede tener hasta 5 instancias de equipo) para que sea
una de sus armas activas.
No hacer nada. El superviviente simplemente puede gastar su acción sin hacer
nada.
Ataque de los supervivientes
El ataque sigue estos pasos:
-
-
-
El superviviente elige una de las armas que tiene activas (si tiene más de una).
El superviviente elige la casilla objetivo.
Se obtienen tantos números aleatorios entre 1 y 6 como el número de dados
que tenga el arma (si el arma tiene NúmeroDados = 3, se generan 3 números
aleatorios entre 1 y 6).
Se cuenta la cantidad de números que igualan o superan su valor de éxito. (Si
el arma tenía un valor de éxito de 4 y los números generados han sido 3,4 y 6
entonces el número de éxitos es 2).
Se recoge el resultado de aplicar el ataque a todos los zombis de la casilla
hasta que se eliminen dos zombis o ya se haya comprobado con todos.
Ejemplo: Atacar con un arma a distancia de alcance = 1, potencia = 1, número de
dados = 3 y valorÉxito = 4. Se ataca a una casilla adyacente donde hay un
Caminante Berserker, una Abominación Normal y un Corredor Tóxico. Se obtiene
un 2, un 5 y un 6. Como hay dos éxitos, hasta que no se eliminen dos zombis o se
haya comprobado la reacción de todos los zombis de la casilla, se hará la
comprobación de la reacción de un zombi de la casilla ante el ataque. Se
comprueba la reacción del Caminante Berserker. El alcance del arma es 1, por lo
que es un arma a distancia y no afecta al Caminante Berserker. Se comprueba la
reacción de la Abominación Normal. Como tiene aguante = 3 y el arma tiene
potencia = 1, no afecta a la Abominación Normal. Se comprueba la reacción del
Corredor Tóxico. El Corredor Tóxico es eliminado (aguante = 1). No ocurre nada
más porque la sangre tóxica no salpica al Superviviente (el zombi está en la casilla
adyacente, el ataque era a distancia). Se ha eliminado 1 zombi (el Corredor
Tóxico). El otro éxito del ataque se pierde.
El juego
El juego contiene todos los supervivientes, zombis y equipo que se generen.
Además, el juego contiene una cuadrícula de coordenadas bidimensionales. Los
supervivientes y zombis se mueven por esa cuadrícula. El juego debe permitir que
los supervivientes hagan sus acciones y controlar las activaciones de los zombis.
La cuadrícula tendrá un tamaño de 7x7 casillas si hay 1 Superviviente. El tamaño
será de 8x8 casillas si hay 2 Supervivientes. Será de 9x9 casillas si hay 3
Supervivientes y 10x10 si hay 4 Supervivientes. No se permiten más
Supervivientes.
Tiene que haber una casilla objetivo. Los Supervivientes empiezan en una esquina
de la cuadrícula y el objetivo está en la esquina opuesta. Inicialmente aparecen
tres zombis aleatorios en casillas aleatorias por cada superviviente en la partida.
Cuando todos los supervivientes alcancen la casilla objetivo con al menos una
instancia de Provisiones por superviviente, el juego finaliza. Si todos los
supervivientes son devorados, el juego finaliza. También tiene que haber una
opción de finalizar el juego a voluntad.
El sistema de juego consiste en un turno para cada superviviente, que realizará
sus 3 acciones. Después se activarán todos los zombis (cada zombi puede tener
distinto número de activaciones) y aparecerá un zombi nuevo aleatorio en una
casilla aleatoria por cada superviviente en la partida. Se repite esto hasta el fin del
juego (turnos de jugadores, luego activaciones de zombis y luego aparición de
zombis).
Cuando se hace una aparición de zombis, los Caminantes tienen un 60% de
probabilidad de aparecer, los Corredores un 30% y las Abominaciones un 10%.
Dentro de estas categorías, las variantes Normal, Berserker o Tóxica son
equiprobables.
La probabilidad de que se descubra un arma de potencia 3 cuando un
superviviente busca, es de 5%.
NOTA: El main NO es el juego. El juego tiene entidad propia.
NOTA2: Separad la lógica de negocio de la interacción con el usuario. Esto es que
no hagáis métodos de la funcionalidad principal de las clases que requieran el uso
de System.out.println o de Scanner, porque si lo hacéis luego no podréis incluir la
la inferfaz gráfica con facilidad.
__________________________________________________________________
El alumno debe modelar el sistema propuesto y realizar una aplicación que cumpla
con los siguientes requisitos:
1. Crear Supervivientes, Zombis y Equipo. Se tiene que poder comprobar la
generación de todas estas entidades.
2. Poder visualizar supervivientes, zombis y equipo.
3. Poder visualizar todo lo que ocurre en una partida (resultados de dados, heridas
infligidas, resultados de ataques, provisiones con las que terminan los
supervivientes…).
4. Poder comprobar de manera aislada el ataque de un superviviente a un zombi
elegido a voluntad con un arma del juego (viendo todo lo que ocurre).
5. Poder comprobar de manera aislada el ataque de un zombi a un superviviente
(viendo todo lo que ocurre).
6. Comprobar de manera aislada que los supervivientes hagan las búsquedas de
Equipo.
7. Visualizar un registro de todos los zombis que ha eliminado un Superviviente
después de una partida.
8. Visualizar un registro después de la partida de los zombis que han mordido a
supervivientes.
9. El juego tiene que ser persistente. Eso quiere decir que podemos salir del
programa y cuando volvamos a entrar se debe poder continuar la partida.
10. Crear una interfaz gráfica de usuario (Nota: no realizar este apartado implicará
que la nota final de la práctica no podrá ser mayor de 7).
Entrega:
A lo largo del cuatrimestre habrá dos hitos evaluables a cumplir:
1. Diseño del sistema. Se entregará un documento donde se recoja un diagrama de
clases que represente todo el sistema. Dicho diagrama se debe justificar y explicar en
una memoria adjunta.
Fecha de entrega: 23 de octubre.
2. Entrega final. Sistema completamente funcional con todos los apartados
implementados. Los alumnos deberán entregar una memoria final que muestre el trabajo
realizado y su evolución (cómo ha evolucionado el diseño a lo largo del cuatrimestre).
Asimismo se debe hacer una entrega del código fuente necesario para compilar y
ejecutar el programa. Los alumnos tendrán que defender el trabajo ante el profesor (las
fechas de la defensa se concretarán después de la entrega).
Fecha de entrega: 22 de diciembre.
IMPORTANTE:
Es responsabilidad del alumno asegurarse de que el programa funciona en el
ordenador donde vaya a hacer la defensa (que puede ser uno de los laboratorios de la
URJC o un ordenador propio del alumno).
Descargar