Está en la página 1de 3

Arquitecturas Avanzadas de

Computadores
Grado en Ingeniería Informática
Se debe entregar una memoria explicativa de la simulación en formato PDF junto a los
códigos correspondientes para el siguiente ejercicio.
Se desea replicar el mundo de futuro apocalíptico introducido por las películas de
Terminator, en donde una Inteligencia Artificial llamada Skynet controla robots con altas
capacidades militares. Para ello se desea realizar una simulación basada en hilos
formada por dos bandos: el equipo de Terminators cuyo líder es el propio Skynet, y el
equipo de la Resistencia cuyo líder es John Connor.
Se deben seguir las siguientes instrucciones:
1) Se debe realizar una correcta abstracción del entorno mediante la programación
orientada a objetos. Se deben considerar las casillas del entorno, el propio
entorno, los individuos (robots, personas y líderes) y la simulación propiamente
dicha. Además, se deben incluir mecanismos de herencia para los distintos robots
ya presentan algunas funcionalidades similares. No se permiten variables
globales en ninguna circunstancia.

2) Para llevar a cabo la simulación de los diferentes individuos (robots y personas)


se deben crear hilos en lenguaje Python que lleven a cabo las tareas apropiadas
durante su ciclo de vida.

3) El entorno debe ser una matriz por defecto de 75x75 donde deben moverse los
individuos. No obstante, este tamaño debe ser configurable al inicio de la
simulación.

4) Hay dos tipos de robots: los T-800 con resistencia baja a las armas rivales y los T-1000
de metal líquido, con alta resistencia a las armas. Los primeros necesitan ser alcanzados
por al menos cinco disparos, mientras que los segundos necesitan veinte disparos para
ser terminados.

5) Las personas de la resistencia solo resisten un disparo por parte de los robots, ya que
son mucho más débiles que éstos.
6) La proporción de personas y robots será 15 a 1 por defecto. Es decir habrá 15 personas
de la resistencia por cada robot enviado por Skynet. No obstante, esta opción debe ser
configurable al inicio de la simulación. Eso sí, al menos la simulación debe tener a John
Connor, y un robot de cada tipo. El número total es aleatorio o configurable, pero
siempre cumpliendo estas reglas.

7) Skynet es un líder global presente en todo la simulación. Solo puede ser desconectado
si todos los robots han sido terminados por la resistencia. Sin embargo, John Connor es
un miembro más de la resistencia. Esto implica que si él cae, la resistencia se acaba y
pierde.

8) Los individuos se desplazan a velocidades diferentes, siendo los T-1000 los más
rápidos, luego las personas de la resistencia y por último los T-800. Esto debe
ser configurado mediante comandos sleep en los hilos correspondientes.

9) Los robots opcionalmente deben tener la posibilidad de teletransportarse. Esto


es desplazarse a cualquier casilla del tablero de simulación que esté disponible
(no ocupada por un individuo). Esto puede hacerse de manera aleatoria o si se
desea utilizando algún algoritmo inteligente de aproximación a John Connor. No
obstante, tanto robots como las personas se desplazan de manera normal a
alguna de las casillas adyacentes (las 8 posibilidades como máximo).

10) Las operaciones de los robots y las personas serán siempre primero disparar al
rival si es posible (una casilla de distancia), y luego desplazarse. Por lo tanto, la
prioridad siempre será acabar con un rival. Solo se produce un disparo cada vez,
y una vez elegido el rival, éste siempre es alcanzado.

11) No pueden estar en la misma casilla ningún individuo, sea robot o persona, es
decir no se pueden superponer entre ellos.

12) Cuando un individuo termina o mata a un rival, sea robot o persona, éste debe
avanzar obligatoriamente a la casilla ocupada por el rival eliminado.

13) Cuando un robot es terminado, Skynet tardará cinco segundos en enviar un


nuevo robot. Este nuevo robot aparecerá en el mismo lugar donde el original
fue terminado. Si no hubiese ningún robot en el tablero de entorno, la
resistencia gana ya que no tendría oposición para desconectar a Skynet. Utilizar
comandos sleep para contar ese tiempo.

14) Si un miembro de la resistencia muere, John Connor reclutará a un nuevo


miembro. Este nuevo miembro aparecerá en la simulación lo más cercano posible
a él. Este reclutamiento tardará un segundo. Utilizar comandos sleep para contar
ese tiempo.
15) Hay que mostrar por pantalla todos los movimientos que se llevan a cabo, pero
por simplicidad será suficiente mostrar las posiciones iniciales de los individuos
y los robots, e indicar cuando se produce una muerte o terminación diciendo la
posición e identificando al individuo muerto o terminado. No es necesario
mostrar el entorno completo y su evolución pero si es altamente
recomendable.

16) Los movimientos, las terminaciones y las muertes deben realizarse en exclusión
mutua.

17) La finalización de la simulación debe llevarse a cabo en exclusión mutua. Esta


finalización debe producirse mediante un atributo de la clase simulación que
debe ser accesible para todos los individuos y por Skynet. Una vez modificado
el atributo, la simulación notificará el resultado de esta.

18) Como idea, mira los siguientes enlaces web donde se explica las librerías
multithreading de Python.
https://www.tutorialspoint.com/python/python_multithreading.htm

HASTA LA VISTA BABY

También podría gustarte