- Nombre: _______ _______
- Sección: _
- Usuario GitHub: _________
Al momento de probar el juego, hay que tener en consideración que este parte en pausa y hay que poner empezar para comenzar el juego, y además como no pude implementar el ataque de enemigos ni torres, la única forma de pasar de ronda es utilizar el Cheat E + N + D.
Realice esta parte del ReadMe teniendo en consideración la división de puntaje entregada a los alumnos en el drive, disponible en el siguiente link: https://docs.google.com/spreadsheets/d/159gUI8D07CLwgZTcvpeo5UGx0z-sKvhOnqoa1tdHhsM/edit#gid=0
-
Parte Menú de inicio:
- Parte General: Hecha completa.
- Parte Menú de inicio: Hecha completa.
- Parte Ranking: Ventana hecha, pero no carga puntajes, porque no alcance a calcularlos.
-
Parte Menú de juego:
- Primera parte: Se muestra toda la información que indica el enunciado, es consistente y realizada con señales. Se pueden comprar torres con drag and drop y está habilitada la compra de mejoras con sus botones y costos, pero no es implementada. Los botones de empezar y cerrar sesión están hechos completos.
- Parte Ronda: Hecha completa.
- Parte Mapa: Hecha completa.
-
Parte Mejoras: No realizada.
-
Parte Entidades:
- Parte Torres: Implemente ambas torres, pero no su ataque.
- Parte Base: Implemente la base como entidad con HP que se refleja en la progressbar encima de esta, pero como no implemente ataque de enemigos nunca va a disminuir su HP en el juego.
- Parte Enemigos: Implemente todo lo pedido de enemigos, solo me faltó su ataque y muerte, debido a que las torres tampoco los atacan.
- Parte jugador: Hecha completa.
-
Parte Misceláneo:
- Parte Monedas: Realizadas correctamente, aparecen en posiciones aleatorias válidas y desaparecen, utilizando Threads y QTimer, pero como los enemigos no mueren, no pude hacer que aparezcan cuando mueren.
- Parte puntaje: No realizada.
- Parte Cheats: Cheat MON perfecto, Cheat END termina y pasa a la siguente ronda, actualizando el número de ronda y enemigos por venir y borra las monedas, pero no alcancé a hacer que borre a los enemigos.
- Parte Destrucción torre: No realizada.
-
Parte General:
- Parte Parámetros: Hecha completa.
- Parte consistencia: Hecha completa.
-
Bonus:
- Bonus música: No realizado.
- Bonus camino más corto: Hecho completo.
-
El módulo principal de la tarea a ejecutar es
main.py -
Adicionalmente se pueden abrir los siguientes archivos .py con el resto de la tarea:
parametros.py: Contiene todos los parámetros utilizados en la Tarea.frontendmenu.py: Contiene el frontend de los tres menús necesarios para iniciar sesión.frontendjuego.py: Contiene el frontend del juego y el frontend de otras clases necesarias para el juego.frontend_mapa.py: Contiene la clase mapa, que ayuda a crear el frontend del mapa de juego.backend.py: Contiene el backend del menu de inicio, el personaje, la base, enemigo normal, enemigo kamikaze y monedas.backend_2.py: Contiene a la torre francotirradora, la torre racimo y la clase my_label, que es utilizada para el drag and drop de ambas torres.
Mi tarea está hecha principalmente con pyqt5 (debe instalarse).
La lista de librerías externas que utilicé fue la siguiente:
pyqt5.QtCore->pyqtSignal,Qt,QTimer,QObject,QMimeData,QThreadyQMutex.PyQt5.QtWidgets->QApplication,QLabel,QWidget,QLineEdit,QHBoxLayout,QVBoxLayout,QPushButton,QRadioButtonyQProgressBar.PyQt5.QtGui->QPixmap,QTransform,QPainter,QDragyQImage.threading->Event.sysos->path.random->randint.collections->deque.time->sleep.
Por otro lado, los módulos que fueron creados fueron los siguientes:
-
frontendmenu-> Contiene aInicio(menú de inicio),Bando(menú de selección de bando) yRanking(menú que muestra ranking y botón para comenzar partida). -
frontendjuego-> Contiene aMainGame. -
frontend_mapa-> Contiene aMapa. -
backend-> Contiene aMenuInicio,Personaje,Base,Normal,KamikazeyCoin. -
backend_2-> Contiene aFrancotirradora,Racimoymy_label. -
parametros-> Contiene a todos los parámetros utilizados en la creación del juego.
Los supuestos que realicé durante la tarea son los siguientes:
-
Como en ninguna parte se pedía implementar ambos jugadores (femenino y masculino), implemente solo el femenino, porque encontré que se movía mejor y para utilizar tiempo valioso en otras partes de la tarea. Perdón si querías usar el masculino :(
-
Recalcar que el juego parte en pausa y para iniciarlo hay que apretar el botón empezar, antes de esto no aparecerán enemigos, monedas y tampoco podrás mover al personaje.
-
Para poder comprar torres al inicio del juego hice un parámetro llamado MONEDAS_INICIAL que se encuentra en el archivo parametros.py, que es la cantidad de monedas con que parte el personaje.
-
Al momento de utilizar mi juego hay que tener muy en consideración que como no implementé ataque de ningún tipo, la única forma de pasar de ronda es usando el cheat E + N + D.
-
La cantidad de enemigos que aparecerán en la siguiente ronda está mostrada por la imagen de un enemigo normal con un "X " seguido del número correspondiente. Este número representa la suma de enemigos kamikaze y normales que aparecerán en una proporción 3:1 como indica el enunciado, pero como no dice en ninguna parte que había que especificar cuántos de cada uno venían preferí dejarlo más simple y no saturar el menú de imágenes poniendo solo una imagen del enemigo normal con la cantidad total de enemigos.
-
Al momento de crear mi main en el archivo main.py me base en la solución de la AC07 de este semestre (mayor detalle en referencias de código externo), y luego de terminar mi tarea me di cuenta de que las líneas de la 15 a la 18 y la 30, no son necesarias, por lo que si es malo utilizar eso, por favor borrarlo del código porque es innecesario y lo copie de la solución que dieron, para usarlo como molde.
Gracias por la comprensión.
Para realizar mi tarea saqué código de:
-
(https://wiki.python.org/moin/PyQt/Extend%20Two%20QPixmap): Este código permite crear labels como imágenes y juntarlas para mostrarlas al mismo tiempo y está implementado en el archivo frontend_mapa.py en las líneas 31 a 157, donde se crea el mapa y el personaje.
-
(https://stackoverflow.com/questions/50232639/drag-and-drop-qlabels-with -pyqt5): Este código permite realizar drag and drop de labels y está implementado en el archivo backend_2.py en las líneas 11 a 100 y permite crear las clases francotiradora, racimo y my_label, para poder realizar drag and drop de ambas torres.
-
(https://github.com/IIC2233/syllabus-2018-2/blob/master/Ayudantias/S10%20 -%20Interfaces%20Gr%C3%A1ficas/Solucion/backend.py) y (https://github .com/IIC2233/syllabus-2018-2/blob/master/Ayudantias/S10%20-%20Interfaces%20Gr %C3%A1ficas/Solucion/frontend.py): Estos dos códigos permiten realizar movimientos de personajes, conectando el backend con el frontend, este código es de la ayudantía de interfaces del segundo semestre 2018 de IIC2233 y lo utilicé para crear al personaje, enemigos normales, enemigos kamikaze y monedas, por lo que no sabría detallar exactamente todas las líneas.
-
(https://github.com/IIC2233/syllabus/blob/master/Actividades/AC07/solucion /front_end.py) y (https://github .com/IIC2233/syllabus/blob/master/Actividades/AC07/solucion/back_end.py): Estos códigos, permiten crear el frontend y backend de un menú, los saque de la solución de la AC07 de este semestre y los utilicé para crear los menús iniciales, está implementado en los archivos frontendmenu.py desde la línea 8 a la 249, y en el archivo backend.py en las líneas 12 a 40.
-
(https://github.com/IIC2233/syllabus/blob/master/Actividades/AC07/solucion /main.py): Este código también es de la solución de la AC07 de este semestre y la ocupe para crear mi main en el archivo main.py de las líneas 15 a 31, y me di cuenta de que si se sacan las líneas de las 15 a la 18 y 30, aún funciona por lo que parece innecesario.
-
(https://github.com/IIC2233/contenidos/blob/master/semana-06/2-operaciones -b%C3%A1sicas-y-recorrido.ipynb): Este código hace BFS, lo saque de los contenidos de este semestre y lo modifique un poco, pero finalmente no lo utilice y se me olvidó sacarlo. Este está en el archivo frontend_mapa.py en las líneas 266 a 295.