Skip to content

robeertosv/ProgramacionAvanzada

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProgramacionAvanzada

PL de Programación Avanzada

Descripción del ejercicio

- Existen 3 zonas
    - Refugio
    - Riesgo
        - Tiene 4 áreas inseguras
    - Tunel (hay 4, con capacidad para 1 persona)
        - Si hay 2 personas una a cada lado, tiene prioridad la que quiere entrar

Humanos

Los Humanos deben ser hilos, se spawnean de manera escalonada (0.5-2s) en el refugio

Hay 10.000 humanos, cada uno con un ID del estilo HXXXX

Comportamieto

Accederán a la ZONA COMÚN, donde se prepararán, junto a sus compañeros, para
adentrarse en el mundo exterior. Permanecerán en esa zona un tiempo aleatorio entre 1 y
2 segundos.

Desde la ZONA COMÚN, seleccionarán un TÚNEL para salir al exterior (a la zona de
riesgo) y esperarán hasta formar un grupo de 3 humanos que quieran acceder a ese TÚNEL
concreto. 

Una vez formado el grupo, accederán al TÚNEL seleccionado y lo atravesarán
(de uno en uno) accediendo a la zona exterior en búsqueda de comida. El tiempo estimado
para atravesar el túnel es de 1 segundo. El grupo de paso es exclusivamente de 3 humanos
(aunque luego se atraviese de uno en uno); si llegara simultáneamente un 4º humano, éste
deberá esperar hasta formar otro grupo de 3 humanos.


En la zona exterior estarán un tiempo aleatorio entre 3 y 5 segundos y cada uno recolectará
2 piezas de comida. Cuando un humano recoge la comida, y en el caso de que no sea
atacado por un zombi, regresará al túnel para acceder al refugio sin esperar a sus
compañeros.

Si un humano es atacado por un zombi, intentará defenderse durante todo el ataque. La
duración del ataque la marcará el zombi, por lo que el humano no podrá reanudar su
marcha hasta que el ataque no finalice. Las probabilidades que el humano se defienda del
ataque recibido son de 2/3. Si la defensa es exitosa, el humano quedará marcado y
regresará inmediatamente al túnel al finalizar el ataque, sin recolectar la comida. En caso
de no tener éxito en la defensa, el humano morirá y renacerá como zombi en la misma área
donde fue atacado.

El zombi que renace mantiene el mismo id numérico que tenía como humano. Por
ejemplo, si muere el humano “H0001”, renace como “Z0001”.

Una vez de vuelta en el refugio, depositarán automáticamente la comida recolectada y
acudirán directamente a la ZONA DE DESCANSO, donde estarán un tiempo aleatorio
entre 2 y 4 segundos.

Tras el descanso, accede al COMEDOR. Intentará tomar una pieza de comida y se la
comerá, tardando un tiempo aleatorio entre 3 y 5 segundos. Si no hay comida disponible,
esperará de forma ordenada a que alguno de los exploradores retorne con comida.


Después de comer, y en el caso de haber sido marcado por un zombi, necesitará reponerse
de sus heridas, por lo que volverá a la ZONA DE DESCANSO para poder recuperarse del
todo, tardando un tiempo de entre 3 y 5 segundos en recuperarse del todo. Al salir, no
necesita volver a comer.

Finalizadas estas actividades, regresa a la ZONA COMÚN para repetir el ciclo

Zombies

Se empieza con 1 zombie, que tiene que tener un ID del estilo ZXXXX, siendo X int

Los zombis están en las áreas inseguras en busca de comida, pasando de una a
otra de forma aleatoria. 

Una vez acceden a una zona, comprobarán si hay algún humano a quien atacar.

Si existen varios humanos, se seleccionará un objetivo aleatoriamente e intentará atacarle.

En caso de que el ataque consiga herir al objetivo, se incrementará su contador de muertes.

El ataque durará un tiempo aleatorio de entre 0,5 y 1,5 segundos. 

Si no encuentra a nadie a quien atacar, o si ya ha atacado a alguien en esa área insegura, 
permanecerá durante un tiempo aleatorio entre 2 y 3 segundos en esa área antes de cambiar 
a otra área. 

El comportamiento se repite infinitamente

Consideraciones adicionales

Todo el comportamiento del sistema se mostrará gráficamente por pantalla mediante una
interfaz de usuario de Java. Además, se deberá incluir un botón para pausar/reanudar el
sistema, de forma que sea sencillo hacer el seguimiento de la ejecución del programa. Un
posible ejemplo de interfaz del sistema se muestra más abajo.

El funcionamiento de todos los humanos y los zombis no finaliza nunca.

Todo el comportamiento del sistema se guardará en un fichero log (un fichero de texto
llamado “apocalipsis.txt”), de forma que sea sencillo analizar lo sucedido. El log guardará
los eventos que van teniendo lugar, por ejemplo: “El zombi Z0002 ataca al humano H1234
(número de muertes: 2)”, “El humano H4567 ha muerto”, “El humano H0001 accede a la
zona de descanso”, etc. En cada línea de dicho log deberá constar la marca de tiempo (fecha
y hora, incluyendo el segundo determinado en el que tuvo lugar el evento) y el evento en
sí. El sistema de log deberá implementarse como un recurso compartido a utilizar por todo
el sistema concurrente y deberá protegerse adecuadamente.

Parte 2. Programación Distribuida

Se debe crear un nuevo módulo de acceso remoto implementado mediante Sockets o RMI que hará lo siguiente:

- Número de humanos dentro del refugio
- Número de humanos en cada uno de los tuneles
- Número de humanos en cada área insegura
- Número de zombies en cada área insegura
- Ranking de los 3 zombies más letales
- Botón para pausar/reanudar la ejecución del programa principal

La consulta de datos debe ser en tiempo real y debe mostrarse de forma automática Para actualizar la información el usuario no tiene que interactuar con la UI, se hace solo. Básicamente como los webSockets de js.

Hay que hacer una interfaz donde se muestren los nuevos datos

About

PL de Programación Avanzada

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages