I chiesto simile domanda stamattina, e per qualsiasi motivo, non ricevo una risposta completa alla mia domanda. Lo chiederò in un modo diverso.
Stavo cercando di capire la serie di blog di Eric Lippert Wizard and Warriors e vedi le difficoltà che possono capitare quando cerchi di usare il sistema di tipi per codificare le regole di un gioco.
Supponiamo che abbia una classe Weapon
e una classe Character
.
public abstract class Weapon
{
private String name;
private int damage;
public abstract void attack(Character character)
}
public abstract class Character
{
public final boolean tryCarry(Weapon weapon)
{
// code to try and add weapon to player inventory.
}
}
Nella mia domanda collegata ho chiesto di utilizzare un enum
o un insieme di enums
che sono attributi che descrivono un Weapon
, quindi ad esempio, un Sword
potrebbe avere LongBlade
e Destructable
come attributi e l'oggetto Character
può interrogare tale raccolta per determinare se il Weapon
può essere aggiunto all'inventario del giocatore, purché soddisfi determinati requisiti.
Quindi un'implementazione potrebbe essere simile a questa:
public final boolean tryCarry(Weapon weapon)
{
if !(weapon.containsAttribute(GameObjectAttribute.LongBlade))
{
// add weapon to inventory
}
}
Come suggeriscono le risposte, questo complica il problema.
Il blog suggerisce l'uso di una classe Rule
. La mia domanda collegata suggerisce un metodo tryCarry(Weapon weapon)
.
Forse non capisco appieno la serie di blog (e se non lo faccio, qualcuno può fornire maggiori dettagli?) ma non riesco a vederlo in nessun altro modo.
Per come la capisco, devi comunicare con la classe Rule
o Player
per determinare quale percentuale diWeapon
hai e se può essere aggiunto. come lo faresti? Per me comunque, un valore, se è un string
o enum
, deve essere memorizzato da qualche parte per indicare esattamente quale arma stai cercando di aggiungere.