skalamon

🦁 Pokémon clone developed in Scala.

View the Project on GitHub elvisperlika/skalamon

Analisi del sistema

Requisiti di business

Il committente richiede la progettazione di un videogame ispirato dai combattimenti tra Pokémon.

Gli obiettivi principali del seguente progetto sono:

Requisiti funzionali

Di sistema

Battaglia

Turni

Priorità

Quando tutti i giocatori hanno scelto un’azione, viene seguita la seguente logica per determinare chi agisce per primo:

  1. Tutte le azioni scelte vengono raggruppate in base al loro livello di priorità (da -7 a +6)
  2. All’interno di ogni gruppo, il Pokémon con la statistica Velocità (Speed) più alta agisce per primo. Se hanno la stessa velocità, l’ordine viene deciso casualmente.

Switch

Durante un combattimento è possibile usare una Mossa oppure Scambiare il Pokémon in campo con uno non-KO del proprio team. L’azione di Scambio ha priorità +6 di default e rientra nella operazione di ordinamento delle azioni proprio come le Mosse.

Pokémon

Un Pokémon è formato dalle seguenti caratteristiche:

Status

Durante la battaglia i Pokémon possono subire effetti di Status di diverso tipo (ricevuti o auto-inflitti). Questi effetti di dividono in 3 macro categorie:

Mosse

Le mosse, caratterizzate da

Efficacia dei tipi

Come detto nelle precedenti sezioni, una mossa ha 1 tipo mentre un Pokémon può averne più di 1.

Un tipo può essere verso un altro tipo:

Le relazioni di efficacia trai i vari tipi sono espressi nella seguente matrice:

Efficacia dei tipi

Danno

Il danno viene calcolato ogni volta che una mossa colpisce l’avversario, si segue la seguente formula:

Damage = BaseDamage * Multipliers

dove:

BaseDamage = MovePower * SourceStat / TargetStat / 25 + 3

La formula è variata dalla originale poiché in questo progetto non si sviluppa la crescita in livelli dei Pokémon, perciò è stato rimosso il fattore Livello dal calcolo del danno e sono stati ridimensionati altri fattori per controbilanciare.

I fattori della formula sono i seguenti:

Campo di battaglia

Il campo di battaglia è formato da tante sotto porzioni quanti sono i Trainer in campo (detti Side), ogni Side può essere affetto da condizioni che si ripercuotono sul Pokémon proprietario di quel Side, ad esempio:

È possibile avere più condizioni su uno Stesso Side e sono temporali.

Il campo di battaglia può essere caratterizzato da un Weather, un Terrain ed un Room. Questi effetti influenzano tutti i Pokémon in campo, sono temporanei e può esistere un solo effetto per tipo alla volta — se è già presente un effetto questo può essere sovrascritto.

Abilità

Le abilità sono effetti passivi che possono venire attivate in diverse fasi del combattimento:

Team builder

Prima dell’inizio della battaglia, i team partecipanti in essa vengono costruiti da uno strumento interattivo.

Utente

Petri

Esempio di battaglia

  1. Turno 1
    1. Pikachu usa Thunderwave per paralizzare Metagross
    2. Metagross usa Earthquake, superefficace su Pikachu
  2. Turno 2
    1. Metagross è paralizzato e dunque la sua velocità è ridotta, ma utilizza Bullet Punch che è una mossa di priorità 1, finendo per attaccare ugualmente prima di Pikachu, qualunque mossa lui abbia scelto.
    2. Pikachu va KO e Gyarados viene mandato in campo al suo posto. Avendo attaccato prima, Metagross non ha ricevuto danno.
    3. Gyarados ha l’abilità Intimidate che, quando mandato in campo, riduce l’attacco dell’avversario di uno stage. Metagross ha tuttavia l’abilità Clear Body che impedisce che le sue statistiche vengano abbassate, dunque annichilendo Intimidate.
  3. Turno 3
    1. Gyarados usa Dragon Dance, che aumenta le sue statistiche di attacco e velocità di 1.5x.
    2. Metagross usa Psychic.
  4. Turno 4
    1. Gyarados usa ancora Dragon Dance, portando le sue statistiche di attacco e velocità a 2x.
    2. Metagross usa Zen Headbutt.
  5. Turno 5
    1. Gyarados usa Grass Knot, mossa particolarmente efficace contro target pesanti come Metagross.
    2. Metagross usa Zen Headbutt.
  6. Turno 6
    1. Gyarados usa un’altra volta Dragon Dance, portando attacco e velocità a 2.5x.
    2. Metagross viene sostituito per Tyranitar, che grazie alla sua abilità Sand Stream provoca un sandstorm.
  7. Turni 7-8
    1. Gyarados usa Grass Knot, che grazie all’efficacia 4x su Tyranitar (Erba vs Roccia/Terra), il suo elevato peso, ed il moltiplicatore di attacco di Gyarados a 2.5x, manda l’avversario KO.
    2. Metagross entra in campo.
  8. Turni 9-10
    1. Gyarados usa Earthquake, superefficace sul tipo acciaio di Metagross, mandandolo KO.
    2. Bob non ha più Pokémon disponibili ed Alice vince la battaglia.

Caratteristiche aggiuntive

Requisiti non funzionali

Requisiti di implementazione

Modello di dominio

Sulla base dei requisiti precedentemente spiegati emergono i seguenti diagrammi di analisi:

Pokémon:

Analisi: Pokémon


Battaglia:

Analisi: Battaglia


Azioni:

Analisi: Azioni