Ich arbeite am Inventarsystem für mein Spiel und bin daran interessiert, wie ich zusätzliche Waffen- und Rüstungseigenschaften implementiere, die nicht nur Schaden oder Rüstung sind.
Wenn ich nur Schaden und Rüstung habe, ist die Gleichung einfach: Schaden = Waffenschaden - Rüstung;
Aber ich suche nach einer interessanteren Benutzererfahrung - nämlich nach Gegenständen mit 2-3 Eigenschaften, die verschiedene Spielmechaniken modifizieren.
Zum Beispiel kann ich eine Reihe von Flags verwenden und eine große if / else-Anweisung in meine Angriffsmethode schreiben und an geeigneten Stellen nach all diesen suchen:
if (Waffe ist vampirisch) {Angreifer für x heilen}
if (Waffe ist heilig) {Verteidiger-Typ prüfen, zusätzlichen Schaden hinzufügen}
if (Rüstung absorbiert den ersten x Schaden) {Reduziert den Schaden des Verteidigers um x}
Ein anderer Weg, den ich für besser hielt, ist das Designmuster des Dekorateurs, bei dem die Ausgabe einer Waffenkreation schrittweise in eine andere eingepackt wird:
public class Main {
public static final void main(String[] args) {
Weapon w = new MeleeWeapon();
w = new Holy(w);
w = new Vampiric;
w = new Enchanted(w,1);
Damage damage = w.damage();
}
}
Es scheint mir, dass der Dekorateur es mir ermöglichen würde, flexibleren Code zu schreiben und später weitere Typen hinzuzufügen, aber ich bin mir nicht sicher, ob er nur die if / else-Anweisungen in die Methode für besondere Eigenschaften von Waffen verschiebt.