Saltar a contenido

Trabajo Práctico Final: Defensa botánica#

Nota

Es posible proponer otro proyecto como trabajo final. En ese caso, se debe escribir una consigna de estilo similar a esta y presentarla a los docentes de la práctica. Ellos determinarán si la propuesta es o no viable. Procuren decidir esto a la brevedad, para maximizar el tiempo disponible para el desarrollo del trabajo.

Introducción#

Todo comenzó con un experimento fallido en el laboratorio de Química del edificio de la Innovación. Un intento ambicioso por desarrollar un nuevo compuesto bioactivo terminó liberando una sustancia altamente inestable que, al entrar en contacto con humanos, provocó una rápida mutación celular. En cuestión de horas, gran parte del personal y estudiantes se transformaron en zombis.

En un intento desesperado por contener el brote, un grupo de científicos logró modificar genéticamente las plantas del edificio. Estas plantas, diseñadas originalmente para decoración, adquirieron capacidades defensivas extraordinarias.

Ahora, con el campus bajo amenaza y el caos extendiéndose por los pasillos, vos quedás a cargo de la defensa. Como estratega principal, deberás organizar el frente de batalla vegetal para proteger la Universidad de San Andrés del avance zombi. Las plantas están listas. ¿Y vos?

Plantas vs Zombies en UdeSA

Imagen generada con ChatGPT y Sora

Desarrollo#

Se debe implementar un juego en Python utilizando la librería PyGame. El objetivo es crear una versión jugable y simplificada del juego Plants vs Zombies, en el que el usuario debe elegir estratégicamente qué plantas colocar y dónde ubicarlas en una grilla, para frenar el avance de los zombis.

Mapa#

El escenario de juego consiste en una grilla de tamaño fijo (5 filas por 9 columnas), donde el jugador puede colocar diversas plantas y por la cual los zombis avanzan de derecha a izquierda.

Jugabilidad#

Durante el juego:

  • Los soles nos permiten plantar nuevas plantas. El jugador comienza con 50 soles.
  • Cada 5 segundos, cae un sol del cielo a una posición aleatoria de la grilla.
  • El jugador puede hacer clic en el sol para recogerlo y sumar a su total una cantidad de 25 soles.
  • Las plantas tienen diferentes precios y comportamientos.
  • Los zombis aparecen desde la derecha y avanzan una casilla cada tantos segundos (dependiendo del zombi).
  • Si un zombi alcanza la casa (lado izquierdo de la grilla), el jugador pierde una vida. También se puede optar por eliminar todos los zombis de esa fila pero la siguiente vez que un zombi llegue a la casa por esa fila, el jugador perderá el juego. Esta última opción es la utilizada en el juego original.

Para tener una mejor idea de cómo se juega, pueden ver el siguiente video: Plants vs Zombies Gameplay.

Plantas#

El juego debe incluir, al menos, las siguientes plantas:

  • Girasoles: generan 25 soles cada 8 segundos. Resisten 6 ataques de zombis.
  • Lanzaguisantes: disparan proyectiles cada 2 segundos a zombis que estén en la misma fila. Resisten 6 ataques de zombis.
  • Nuez: Resisten 60 ataques de zombies pero no hacen daño.

Opcionalmente, se pueden incluir más plantas con diferentes efectos.

Zombis#

Los zombis se mueven constantemente hacia la izquierda. El juego debe incluir al menos los siguientes tipos de zombis:

  • Zombi normal: avanza a una velocidad de 1 celda cada 6 segundos. Si tiene un plata en frente, la ataca 1 vez por segundo. Resiste 10 ataques de plantas.
  • Zombi con cono: Igual que el zombi normal, pero resiste 20 ataques de plantas.
  • Zombi con balde: Igual que el zombi normal, pero resiste 30 ataques de plantas.

Opcionalmente, se pueden incluir más zombis con diferentes efectos.

Interfaz#

La interfaz debe estar implementada con PyGame. Debe mostrar claramente la grilla, los elementos ubicados en ella (plantas, zombis, proyectiles), el sol disponible y permitir al jugador seleccionar y colocar plantas en la grilla (puede ser con el mouse o con el teclado). Además, se debe entender la cantidad de vidas restantes y tiempos de enfríamiento de cada planta implementada. También se deben agregar sonidos y música al juego.

Un ejemplo MUY básico de cómo podría verse el juego es el siguiente:

En este caso no se ve el mouse pero está clickeando todos los soles. La casilla de la grilla seleccionada se cambia con las flechas del teclado y se puede colocar una planta con el enter. Las plantas seleccionadas se cambian con la tecla tab.

Estos son algunos recursos que pueden ser útiles para el desarrollo de la interfaz:

Personalización

Son libres de personalizar el juego como deseen. Por ejemplo, podría no ser una batalla entre plantas y zombis, sino entre animales y robots. Lo importante es que el juego tenga una jugabilidad similar a la de Plants vs Zombies y que cumpla con los requisitos mínimos de la consigna.

Entrega#

El trabajo se realizará en grupos de tres estudiantes. El desarrollo del trabajo se realizará en un repositorio privado de Github que debe ser compartido a los docentes de la materia (pueden encontrar los usuarios de los docentes aquí).

Además cada grupo debe realizar un video de no más de 5 minutos mostrando el funcionamiento del programa. En el video deben mostrarse todas las funciones del programa y cómo se juega una partida. Debe quedar claro que están mostrando, de ser necesario pueden agregar alguna voz narrando lo que se está mostrando. El video debe ser subido a YouTube como “no listado”. La calidad del video va a tener un muy leve impacto en la nota final, sirve para que los docentes puedan ver rápidamente el funcionamiento completo del programa.

La entrega del trabajo se realizará subiendo el link del repositorio y del video de YouTube a la tarea correspondiente en el campus del curso. La fecha de entrega se encuentra en la misma tarea y en el calendario del curso.

Se recuerda a los estudiantes que las entregas deben ser un producto original de cada estudiante, por lo que se les pide revisar la sección 6 del programa de la materia y el Código de Honor y Ética.

Evaluación#

A diferencia de los trabajos prácticos anteriores, este trabajo práctico tiene una nota numérica individual asociada. La misma será definida por los docentes de la materia y se basará en la calidad del trabajo entregado y la defensa oral del mismo.

Para aprobar, es fundamental que el código se ejecute correctamente sin lanzar excepciones; cumpliendo con los requerimientos de la consigna. Además, se evaluará la calidad del código y la calidad de los comentarios y documentación. Cualquier detalle adicional que agreguen será tenido en cuenta para la nota final.

La defensa oral se realizará en la semana de finales de la materia. En la misma, se les pedirá a los estudiantes que presenten su trabajo y respondan preguntas sobre el mismo. No es necesario que se arme una presentación, pero es recomendable que traigan alguna computadora con el codigo para poder verlo junto al docente en el momento. La defensa oral es obligatoria y es un requisito para aprobar la materia.