Plantas Vs. Ā Zombies!Ā”Siiii! Ā”Como no podĆan faltar Plants vs Zombies versión objetosa!Nuevamente los Zombies intentan atacarnos para comernos el cerebro (o-nom-nom-nom-nom!).
Nuestro jardĆn del frente tiene lugar suficiente para poner plantas que nos ayuden a eliminarlos.Nuevamente contamos con un conjunto de plantas:Todas las *Pea*, tienen una vida de 40.
Entonces tenemos dos tipos de terrenos Tierra y Agua; cada planta sólo puede crecer en un terreno. En el caso en el cual se quiera ubicar una planta en un terreno incompatible se debe lanzar un error correspondiente. Las lĆneas (o filas) que forman el jardĆn y son por las cuales se mueven los Zombies, tienen siempre el mismo tipo de terreno.Ā
Tener en cuenta tambiĆ©n que el jardĆn define la cantidad mĆ”xima de plantas que se pueden agregar por cada lĆnea (sĆ adivinaron, tambiĆ©n esperamos un error en este caso...).
.
Por supuesto que hay Zombies, todos hacen daƱo de 10, pero es posible que cambie porque puede incrementarse a medida que el virus que los transforma evoluciona. La vida que tienen es propia de cada zombie (lo cual es como una ironĆa, hablando de un zombie). Pueden usar distintos artĆculos para aumentar su resistencia:Cono: Da una protección inicial de 5 puntos. Cuando un zombie que tiene un cono protegiĆ©ndolo recibe un ataque, el ataque afecta al cono y no al zombie en sĆ. Al llegar a cero (o menos), el cono deja de proteger al zombie y este recibe los ataques en forma normal. Balde: En realidad estos zombies despistados llaman balde a un cono metĆ”lico, que no es mĆ”s que un cono que tiene un multiplicador de potencia y resistencia (el mismo para ambos) de acuerdo con la aleación de metal que hayan usado. Cuando un zombie que tiene un ābaldeā en la cabeza ataca, pega cabezazos que multiplican su potencia normal de acuerdo con el multiplicador. AdemĆ”s, su protección inicial es multiplicada de igual forma respecto de la de un cono comĆŗn. Short de Los Pumas: La presencia de al menos un zombie con un short de Los Pumas hace que la formación entera reduzca la distancia a las plantas en dos unidades por turno, en lugar de una, ya que aumenta el empuje. Atención: Puede ser muy Ćŗtil modelar el objeto que represente el āno-artĆculoā y ponerle comportamiento para poder trabajar en forma homogĆ©nea con todos los zombies, tengan o no un artĆculo. Asumir que los zombies que atacan por agua ya tienen sus correspondientes patitos salvavidas. No vamos a modelar esto.
Los Zombies se organizan en oleadas para atacar el jardĆn, y cada una tiene una formación de zombies por cada lĆnea de ataque de nuestro jardĆn.
Se pide:
- Agregar una planta a una lĆnea del jardĆn. Tener en cuenta que importa el orden y tambiĆ©n se debe controlar el tipo de terreno. Una planta de tierra debe plantarse sobre tierra o sobre un lillyPad en agua, por lo que para plantarlo en una lĆnea de agua debe haber un lillyPad disponible (vacĆo). Si se intenta plantar una planta indebida, lanzar un error. Lo mismo si se sobrepasa la cantidad mĆ”xima para ese jardĆn.
- Saber si un jardĆn tiene plantas en cualquiera de sus lĆneas.
Saber si una oleada tiene zombies en cualquiera de sus formaciones. - Saber el poder de ataque de una planta:
- Cada āpeaā disparado tiene un poder de 5.
- El poder de un Sea Shroom es de 3.
- El poder de un WallNut es de 0, porque no ataca. Lo mismo con el LillyPad.
- Modelar los ataques individuales:
Que una planta ataque a un zombie. Si el zombie muere, se deberÔ lanzar una excepción. - Que un zombie ataque a una planta. Si la planta muere, se deberÔ lanzar una excepción.
- Modelar las batallas entre zombies y plantas:
Hacer que una planta ataque a una formación de zombies. Siempre ataca al primer zombie de la formación y, si el zombie muere, debe quitarse de la formación. Hacer que una formación de zombies ataque a una planta, si puede. La formación de zombies puede atacar a la planta cuando redujo a cero su distancia. Hacer que la lĆnea de plantas entera batalle con la formación de zombies. Esto es hacer que cada planta de la lĆnea ataque a la formación y que la formación ataque a la Ćŗltima planta, si puede. Si una planta muere debe eliminarse de la lĆnea de plantas o del lillyPad que la sostiene (cuidado: no eliminar un LillyPad de la lĆnea porque muera la planta que Ć©ste sostiene, pero sacarle esa planta muerta). La distancia inicial deberĆ” haber sido indicada anteriormente. Hacer que el jardĆn batalle un turno con una oleada de zombies. En cada turno, cada formación de la oleada de zombies debe avanzar, reduciendo la distancia hasta las plantas segĆŗn lo indicado anteriormente. La distancia inicial de cada formación a la lĆnea de plantas se calcula como el tamaƱo del jardĆn menos la cantidad de plantas en la lĆnea. Nota: Para esto, pueden usar el mensaje with:do: que entienden las colecciones. Este recibe como primer parĆ”metro otra colección y como segundo un bloque de 2 argumentos que se evalĆŗa para cada par de elementos de la primera y la segunda colección respectivamente (el primero con el primero, segundo con el segundo, etc). Si el size de las 2 colecciones es distinto, arroja una excepción - Hacer que el jardĆn batalle contra una oleada de zombies, hasta que no haya mĆ”s plantas o no haya mĆ”s zombies.
Nota: Para esto pueden usar el mensaje whileTrue: que entienden los bloques y que recibe un bloque como argumento. Si el bloque receptor se evalĆŗa a true, entonces evalĆŗa el bloque argumento y vuelve a evaluar el bloque receptor. Esto se repite hasta que el bloque receptor se evalĆŗe a false.
Algunos tests que podemos pedir que supere el modelo::- No se pueden agregar 5 plantas en una misma lĆnea en un jardĆn que permite un mĆ”ximo de 4, lanzar un error.
- Una planta acuĆ”tica no se puede plantar en una lĆnea de tierra, lanza un error.
- Una planta terrestre sĆ se puede plantar en una lĆnea de tierra.
- Una planta terrestre no se puede plantar en una lĆnea de agua sin LillyPads disponibles, lanza un error.
- Una planta terrestre sĆ se puede plantar en una lĆnea de agua con LillyPads disponibles.
- A una lĆnea acuĆ”tica con 2 LillyPads disponibles (sin plantas) se le intentan plantar 3 PeaShooters y lanza un error en el tercero.
- Un zombie sin artĆculos y con 4 de vida es atacado por un PeaShooter y muere.
- Un LillyPad sin planta es atacado por un zombie y muere.
- Un LillyPad con un PeaShooter con 10 de vida es atacado por un zombie y se queda sin el PeaShooter.
|
|