Diciamo che sto progettando un gioco di tipo RPG, e questo gioco ha un sistema di combattimento a turni. Ci sono alcune cose che i personaggi del personaggio / non giocatore possono fare all'interno e all'esterno del combattimento. Ad esempio, mentre non sono in combattimento, possono spostarsi in tutto il mondo, usare oggetti, parlare con altri np e il giocatore (non il loro personaggio) può aprire determinati menu di gioco. Mentre i personaggi sono in combattimento, possono anche usare gli oggetti, e usare certe abilità di combattimento, ma non possono muoversi nel mondo di gioco o parlare con altri np.
Questa domanda è intesa per essere indipendente dalla lingua, ma il codice degli esempi sarà in Java.
Una prima implementazione di questo potrebbe essere qualcosa di simile
public class Character {
public void use(Item item) { /* ... */ }
public void talkTo(Npc npc) {
if (inCombat) {
throw new IllegalStateException("Unable to talk to npcs while in combat");
}
/* ... */
}
public void useAbility(Ability ability) {
if (!inCombat) {
throw new IllegalStateException("Unable to use ability while not in combat");
}
/* ... */
}
}
La mia domanda è indirizzata al metodo useAbility
e talkTo
. Questi metodi dovrebbero essere callable per tutto il tempo, o dovrei limitarlo in qualche modo, forse qualcosa come OverworldContext
o CombatContext
o un adattatore / proxy di qualche tipo per separare le cose che possono essere fatto? Forse qualcosa come
public class OverworldCharacter extends Character {
private Character character;
public OverworldCharacter(Character character) {
this.character = character;
}
public void talkTo(Npc npc) {
// do some stuff
}
// proxy character methods to field
}
E
public class InCombatCharacter {
// Same as other class
public void useAbility(Ability ability) {
// do some more stuff
}
}
Questo gioco ha lo scopo di consentire la creazione di plugin / mod da parte di terzi, quindi è un'altra cosa da considerare in questo progetto.