Skip to content

Latest commit

 

History

History
216 lines (163 loc) · 9.41 KB

File metadata and controls

216 lines (163 loc) · 9.41 KB

Tarea 2: DCCivil War 🎒

  • Nombre: _______ _______
  • Sección: _
  • Usuario GitHub: _________

Consideraciones generales :octocat:

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.

Cosas implementadas y no implementadas ✅ ❌

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.

Ejecución 💻

  • 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.

Librerías 📚

Librerías externas utilizadas

Mi tarea está hecha principalmente con pyqt5 (debe instalarse).

La lista de librerías externas que utilicé fue la siguiente:

  1. pyqt5.QtCore -> pyqtSignal, Qt, QTimer, QObject, QMimeData, QThread y QMutex.
  2. PyQt5.QtWidgets -> QApplication , QLabel, QWidget, QLineEdit, QHBoxLayout, QVBoxLayout, QPushButton, QRadioButton y QProgressBar.
  3. PyQt5.QtGui -> QPixmap , QTransform, QPainter, QDrag y QImage.
  4. threading -> Event.
  5. sys
  6. os -> path.
  7. random -> randint.
  8. collections -> deque.
  9. time -> sleep.

Librerías propias

Por otro lado, los módulos que fueron creados fueron los siguientes:

  1. frontendmenu -> Contiene a Inicio (menú de inicio), Bando (menú de selección de bando) y Ranking (menú que muestra ranking y botón para comenzar partida).

  2. frontendjuego -> Contiene a MainGame.

  3. frontend_mapa -> Contiene a Mapa.

  4. backend -> Contiene a MenuInicio, Personaje, Base, Normal, Kamikaze y Coin.

  5. backend_2 -> Contiene a Francotirradora, Racimo y my_label.

  6. parametros -> Contiene a todos los parámetros utilizados en la creación del juego.

Supuestos y consideraciones adicionales 🤔

Los supuestos que realicé durante la tarea son los siguientes:

  1. 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 :(

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Referencias de código externo 📖

Para realizar mi tarea saqué código de:

  1. (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.

  2. (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.

  3. (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.

  4. (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.

  5. (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.

  6. (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.

Gracias por tomarte el tiempo de leer mi Readme y ojalá te guste mi juego