Pràctica UF4. POO Plague Game

Sumari

  1. Pràctica: Plague
  2. PlagueGame
  3. UML
  4. Projecte Git
  5. Etapes
    1. Fase 1 - Moviment
      1. Estructura
      2. Interfícies
      3. Mostra el jugador
      4. Moure el jugador
      5. Més Vehicles
      6. Recollir items
    2. Fase 2 - Colonies
      1. Estrucutra
      2. Extermini
      3. Reproduïr
      4. Expand
    3. Fase 3
  6. ConsoleMain & WorldUI
  7. World & Territory
    1. Output versió consola World(5,3)
  8. Player
  9. Exterminar plagues - estris de desinfecció (weapon)
  10. Moure el personatge - vehicles
  11. Final de ronda - next turn
    1. Generar noves colònies:
    2. Generar nous ítems:
    3. Reproducció:
    4. Expansió:
  12. Icones
  13. Canvis en el joc
  14. Metodologia d'entrega

Pràctica: Plague

La pràctica consisteix en desenvolupar un joc anomenat Plague.
En aquest document hi trobaràs:

PlagueGame

Un científic especialitzat en contenció de plagues ha de controlar l'expansió d'unes plagues mortals que estan arrasant el món. Hauràs de viatjar pels diferents territoris, buscant recursos i erradicant les plagues sense sortir-ne il·lès.

És un joc en el què es tracta de mantenir el món sense plagues.
És un joc per torns en el que es van succeïnt les fases o accions següents:

El jugador perd una vida cada cop que es produeix una expansió. El joc finalitza quan s'acaben les 15 vides del jugador.
L'objectiu és sobreviure tant temps com sigui possible. S'obté un punt per cada torn finalitzat

UML


-Les classes amb la capçalera gris ja estan implementades

Consulteu l'UML a draw.io

** Aquest uml és un disseny previ, per tant no s'han especificat tots els mètodes o atributs

Projecte Git

En el projecte clonat hi trobareu les interfícies d'usuari.

Etapes

En el següent apartat detallem les etapes que has d'anar seguit per desenvolupar el projecte

Fase 1 - Moviment

En la fase 1 no usarem les classes pintades en blau del diagrama.Farem que el nostre jugador es pugui moure.

Estructura

Primer de tot començarem creant l'estructura de classes. Crea totes les classes (excepte les pintades amb blau) amb les seves relacions segons el diagrama

Interfícies

Un cop fet, fes que les diferents classes implementin les interficies definides per a poder usar la interfície gràfica (World: IWorld, Item: Iconizable, etc).Deixa el cos dels mètodes buits o, en el cas de funcions que retornin un valor, retorna'n un per defecte (per exemple fes que el mètode canMove de World retorni sempre true).Executa el main de la interfície gràfica. S'hauria de mostrar un taulell buit.

Mostra el jugador

Dona una posició al jugador. Hauràs d'afegir-lo a un territori, i posar-li la posició correcta.

Per fer-ho recorda que pots usar definit init{} que s'executa després del constructor al crear una instància d'una classe.

Moure el jugador

Implementa el mètode moveTo i canMove de world per a que el jugaodor es pugui moure. Tingues en compte que el mètode canMove usarà el mètode canMove del Vehiclce.

Més Vehicles

Crea la classe Bicycle i Helicopter. Implementa la funció generateNewItems() de World i nextTurn() per a que apareguin nous vehicles.

Recollir items

Implementa les funcions takableItem() i takeItem(). Ja hauries de poder moure't per la pantalla, agafar vehicles, i usar-los. Recorda que els vehicles tenen un nombre d'usos determinats.

Fase 2 - Colonies

En aquesta segona fase afegirem les colònies al joc.

Estrucutra

Crea les classes Colony, Ant i Dragon, i el mètode generateNewColonies de world. S'haurien de crear noves colònies.

Extermini

Implementa el mètode World::exterminate per a que el jugador pugui eliminar colònies. Crea també nous Weapons i que apareguin al territori.

Reproduïr

Implementa el mètode world:reproduce per a que les colònies es reprodueixin

Expand

Implementa el mètode word:expand per a que les colònies s'expandèixin

Fase 3

Amplia el joc. Pots afegir noves espècies, armes, etc.

ConsoleMain & WorldUI

Aquestes classes ja estan implementades i no s'han de tocar!

ConsoleMain: Conté el main que inicia el joc.

WorldUI: És la classe s'encarrega de la interfície gràfica i dirigeix la dinàmica del joc, que consisteix en gestionar les diferents rondes, mostrar el taulell, organitzar les accions del jugador, fer créixer les colònies.

A cada ronda o torn el jugador pot realitzar les accions següents:

Al final de cada ronda:

World & Territory

World: El món està representat per un taulell en forma de matriu on cada una de les caselles és un territory.
Implementa una interfície IWorld, on hi trobareu els mètodes que cal que implementeu i la seva documentació.

Territory :
Un territory té un contador(plagueSize) que indica la grandària de la colònia (Aquest valor es consulta l'atribut size de la classe Colony).
plagueSize també ens indica el número d'icones de colònia que mostrarem: el valor màxim serà 3
Té 1 personatge o bé un recurs (ítem).
Vegeu el disseny UML.
Cada territori només té un tipus de plaga, ja que una plaga invasora pot acabar amb una plaga existent, o bé una plaga existent pot evitar que arribi una plaga nova. Vegeu l'apartat expansió

Aquesta classe implementa una interfície ITerritory, en la que s'especifiquen els mètodes que cal que implementeu i la seva documentació.

Output versió consola World(5,3)

-------------------------
|    |    |    |    |    |
|    |    |    |    |    |
-------------------------
|    |    |    |    |    |
|    |    |    |    |    |
-------------------------
|    |    |    |    |    |
|    |    |    |    |    |
-------------------------

Tingues en compte que els mètodes de la User interface que mostren les dades són al projecte adjunt, per exemple WorldUI.draw() pinta el taulell.

Player

En el taulell hi col·locarem el jugador o personatge de l'usuari, la seva posició inicial serà al centre del taulell.
El jugador podrà tenir 1 arma de desinfecció i 1 vehicle. Vegeu el disseny UML.
Per defecte el jugador elimina les plagues amb la mà i es trasllada a peu.

Exterminar plagues - estris de desinfecció (weapon)

Quan un personatge arriba a un territori intentarà exterminar la plaga amb un recurs de desinfecció (o arma).

El territori decrementarà la seva població atacada.

Exterminar Plagues d'un territori:

Moure el personatge - vehicles

A l'inici de cada torn el personatge pot moure's, per defecte el personatge es desplaça a peu, això vol dir que, a cada moviment el personatge només és pot desplaçar als territoris contigus.
A la fase de generar nous ítems (next turn) poden apareixer vehicles al taulell, que el personatge podrà agafar, si es sitúa en el territori on s'ha generat, podrà escollir agafar-lo o no.

Aquest ítem apareix en un territori de manera aleatòria, i si ja hi havia un ítem desapareix i és reemplaçat pel nou ítem

Relació de moviments per vehicle

Vehicle Desplaçament
A peu A les caselles contigües
Bicicleta A una distància de 4 caselles
Helicopter A qualsevol lloc

Final de ronda - next turn

Al final de cada ronda es produeixen les fases següents:
Assegura't de que et funciona tot abans d'implementar cada una de les fases

Generar noves colònies:

Es genera 1 plaga en una casella aleatòria. La plaga serà d'un tipus o d'un altre escollit a l'atzar segons les probabilitats següents:

Tipus de plaga Probabilitat
Formiga 30%
Drac 10%

Només s'afegirà la nova colònia si el territori està sense colonitzar

Generar nous ítems:

Pot aparèixer 1 nou recurs al taulell, escollit a l'atzar segons les probabilitats següents:

Recurs o vehicle Probabilitat Ús durant
Bicicleta 25% 5 torns
Helicopter 10% 5 torns
Escombra 25%  
Espasa 10%  
Res 30%  

Reproducció:

Les colònies existents a cada territori es reprodueixen, és a dir incrementen.
Si hi havia 2 formigues -> Poden passar a ser 3 formigues

Plaga Factor de reproducció
Drac 5 torns
Formiga 30% possibilitats/ torn

Expansió:

Quan un territori sobpreassa la seva capacitat màxima de colònies (3), aquesta s'expandeix. Per exemple, un territori amb 3 dracs que s'ha reproduït, aquest quart drac s'expandeix a un nou territori.
El nou territori és colonitzat si està buit, o bé si la plaga es considera més forta, si no s'extingeix.
Funció d'expansió i ordre de les colònies segons fortaleza

Plaga S'expandeix a Colonització
Drac Qualsevol casella Sempre
Formiga A les caselles contigües (Torre) Només en territoris buits o de formigues

Icones

Canvis en el joc

Podeu modificar el funcionament del joc, així com crear noves plagues o estris i vehicles. Al fer-ho, heu de modificar també aquest document i el UML.

Metodologia d'entrega