Sunteți pe pagina 1din 5

Escuela Superior Politécnica del Litoral

Fundamentos de Programación
Proyecto Primer Parcial
Paralelo 29 y 33
Objetivos:

El objetivo del proyecto es darle a usted más experiencia en el manejo de estructuras de control,
listas y el manejo de la librería Numpy.

Descripción:

Unos fanáticos de Super Smash Bro


s le ha pedido a usted que realice un simulador del juego Super Smash Bros con el propósito
de analizar el rendimiento de los personajes del juego. En su juego usted debe simular las
batallas de los personajes basados en las estadísticas de cada uno.

Las personas que lo contratan a usted le dan un archivo llamado personajes_info.txt que tienen
la información de los personajes del juego. Cada línea del archivo contiene información de un
personaje, con los campos en la línea separados por comas (,). Los campos en una línea son:

name,counter,sprintSpeed,reflector,fallSpeed,walkSpeed,airSpeed,projectile,weight ,attack_power,image

dónde:

name Es el nombre del personaje


counter true / false -> Si es true, el personaje puede bloquear un ataque y
devolverlo 1.5 veces más fuerte
sprintSpeed La velocidad
reflector true / false -> Es true si el personaje tiene un escudo que activar.
fallSpeed La velocidad con la que el personaje cae del aire
walkSpeed La velocidad con el que el personaje se mueve sobre tierra
airSpeed La velocidad con la que el personaje se mueve en el aire
projectile true / false. Es true si el personaje lanza proyectiles
weight El peso del personaje
attack_power El poder de ataque de cada personaje
image El nombre del archivo que contiene la imagen del personaje

Ejemplo de una línea:

Bowser, false, 14, false, 33, 44, 28, true, 120, 20, bowser.png

A usted se le proporciona un Proyecto dónde se encuentra el archivo base de datos de


personajes (personajes_info.txt) y el archivo del proyecto llamado proyecto1.py. En el archivo
del proyecto se le proporciona el código que lee la información de la base de datos a una lista
de Strings llamada personajes. Cada elemento de la lista personajes una línea del archivo.

Ejemplo del contenido de la lista personajes:


['Bowser, false, 14, false, 33, 44, 28, true, 120, 20, bowser.png', 'Dedede, false, 42,
false, 2, 34, 48, true, 112.0, 15, dedede.png', 'Sonic, false, 1, false, 30, 7, 9, true, 95,
14, sonic.png', 'Greninja, true, 6, false, 3, 4, 5, true, 27, 14, greninja.png',..]

Lo primero que usted debe hacer es procesar la información en la lista personajes y a partir de
esa información crear las siguientes listas:

nombres El nombre de cado una de los personajes.


velocidades_aire Es igual al promedio de airspeed más fallSpeed, de cada personaje.
velocidades_tierra Es igual al promedio de sprintSpeed más walkSpeed,de cada personaje.
proyectiles Si el personaje tiene o no proyectil.
contraataques Si el personaje puede bloquear un ataque y devolverlo 1.5 veces más
fuerte.
pesos El peso de cada uno de los personajes.
poder_ataques El poder de ataque del personaje
imagenes El nombre del archivo con la imagen del personaje.

Ejemplo del contenido de las listas creadas:

nombres -> ['Bowser', 'Dedede', 'Sonic', 'Greninja',..]


velocidades_aire -> [30.5, 25.0, 19.5, 4.0,,..]
velocidades_tierra -> [29.0, 38.0, 4.0, 5.0,,..]
proyectiles -> ['true', 'true', 'true', 'true',..]
contraataques -> ['false', 'false', 'false', 'true',..]
pesos -> [120.0, 112.0, 95.0, 27.0,…]
poder_ataques -> [20,15,14,14,...]
imagenes -> ['bowser.png', 'dedede.png', 'sonic.png', 'greninja.png',..]

Para el resto del programa debe trabajar con las listas creadas (nombres, velocidades,
proyectiles, contrataque, pesos, imágenes) y no con la lista de personajes
Después de crear las listas, el programa debe mostrar un menú numérico con las siguientes
opciones:
1. Ingresar nuevo personaje
2. Editar información de personaje
3. Consultar Información de personajes
4. Simular Batalla
5. Salir

El menú debe ejecutarse de forma continua. El usuario ingresa una opción, se realiza la
opción y se regresa al menú principal.
A continuación, la descripción de que hace cada opción:

1. Ingresar Nuevo personaje


Esta opción le permite al usuario ingresar la información de un nuevo personaje. Se debe
pedir al usuario el nombre del personaje, su velocidad en tierra, su velocidad en aire, si
tiene o no proyectil, si tiene o no contraataque, el peso, el poder de ataque y el nombre del
archivo de imagen del mismo. El programa debe validar que no exista otro personaje con
el mismo nombre y que las velocidades, el peso y el poder de ataque sean mayores que 0.
Una vez todos los datos has sido ingresados y validados estos deben ser añadidos a las listas
respectivas al final de cada una.

Ingrese nombre de personaje: Mario


Personaje ya existe. Ingrese nombre de personaje: Thanos
Ingrese Velocidad Aire: 50
Ingrese Velocidad Tierra: 75
Tiene Proyectil (s/n): s
Tiene Contraataque (s/n): s
Ingrese Peso: -12
El peso debe ser mayor a 0. Ingrese peso:12
Ingrese poder de ataque: 30
Imagen: mama.png

2. Editar información de personaje


Esta opción le permite al usuario editar una o varias características de un personaje. El
usuario debe ingresar el nombre de personaje a editar. Si el personaje existe se le pide al
usuario que ingrese el nombre del campo a editar y el nuevo valor separados por comas. El
programa debe validar que los nuevos valores ingresados sean válidos y que el nombre del
campo a editar en verdad exista.
Los nombres de los campos a editar son

nombre Si quiere editar el nombre del personaje


velocidad_tierra Si quiere editar la velocidad terrestre del personaje
velocidad_aire Si quiere editar la velocidad en aire del personaje
proyectil Si quiere editar la propiedad proyectil del personaje
contraataque Si quiere editar la propiedad contrataque del personaje
peso Si quiere editar la propiedad peso del personaje
ataque Si quiere editar la propiedad de poder de ataque del personaje
imagen Si quiere edita la propiedad imagen del personaje

Ejemplo de ejecución de la opción:

Ingrese nombre personaje: Thanos


Ingrese propiedad,valor: gemas,5
La propiedad gemas no existe
Ingrese propiedad,valor: peso,130

El nuevo peso para el personaje Thanos sería 130


3. Consultar Información de personajes
Esta opción permite realizar consulta de los personajes basados en sus estadísticas. El
usuario puede filtrar basado en la velocidad en aire, velocidad en tierra, poder de ataque y
si tiene o no tiene proyectil. Si deja en blanco uno de los filtros no se filtrará por ese
personaje. Se debe mostrar los datos en orden descendente por poder de ataque.

Consultar Personajes
Velocidad en aire (inicio - fin):
Velocidad en tierra (inicio - fin):
Poder de ataque (inicio - fin): 15.00 – 30.00
Proyectil (s/n): s

Nombre Velocidad Aire Velocidad tierra Poder de Ataque Proyectil


Thanos 50.00 75.00 30.00 true
Bowser 30.50 29.00 28.00 true
Wario 10.00 39.50 19.00 true
Mega Man 10.50 33.50 19.00 true
Dr. Mario 17.00 40.00 19.00 true
Ness 34.50 39.50 18.00 true
……

En el caso anterior se obtienen los personajes que tienen poder de ataque entre 15 y 30 y que
tienen proyectil. Como no se ingresó nada en los filtros de Velocidad en aire y Velocidad en
tierra, no se filtra por esos valores.

4. Simular Batalla
En esta opción el usuario debe ingresar dos nombres de personajes del juego y el tipo de
escenario en la que se quiere pelear y a continuación el programa le debe mostrar los puntos
de juego de cada personaje basado en las estadísticas del juego.

Los puntos de juego de cada personaje se calculan de la siguiente forma:

Puntos de Juego = (Puntos de Pelea + Puntos de Mobilidad)/2

Punto de Pelea: Puntos de ataque de un personaje más 10 puntos extras si el personaje tiene
proyectil más 10 puntos si el personaje tiene contraataque.

Puntos de Movilidad: (0.5 por Velocidad en aire + Velocidad en tierra + Velocidad en aire
* Porcentaje de plataformas en el escenario) / 2.

Los tipos de escenarios son:


 Terrestres, no hay plataformas en ese escenario
 Plataformas 25 %, el 25% del área de batalla es en plataformas aéreas
 Plataformas 50 %, el 50% del área de batalla es en plataformas aéreas
 En movimiento, el escenario se encuentra en movimiento.

Debe mostrar los Puntos de Pelea, Puntos de Movilidad y Puntos de Juego de cada
personaje. Gana el personaje que tenga más puntos de juego.
Rúbrica
El proyecto corresponde la 20% de su nota teórica del primer parcial.
Parte 1 – 15 puntos
Parte 2 – 5 puntos (PRONTO)

Fecha de entrega
Parte 1 – martes 19 de junio, 23:55 pm
Parte 2 – domingo 24 de junio, 23:55 pm

Consideraciones Generales
 El proyecto debe ser realizado en grupo de 2 estudiantes. Si se detecta copia parcial o total
del código del proyecto todos los grupos involucrados tendrán 0.
 Si el programa se cae tendrá 1 punto menos por cada caída hasta un máximo de 3 puntos
 Si el programa no está correctamente comentado tendrá hasta 2 puntos menos. Correctamente
comentado no significa poner un comentario en cada línea de código, pero si en secciones
nuevas de código o parte de código que necesita explicación. Use su criterio.
 Todas las opciones del menú deben tener la opción de regresar al menú anterior.
 Se valorará la presentación del proyecto y su interacción. Revisar
https://docs.python.org/3/library/string.html#formatstrings