Ich arbeite an einem Rollenspiel zum Spaß und um Designmuster zu üben. Ich möchte, dass Spieler sich in verschiedene Tiere verwandeln können. Zum Beispiel könnte ein Druide in der Lage sein, sich in einen Gepard zu verwandeln. Im Moment plane ich, das Dekoratormuster zu benutzen, aber meine Frage ist - wie kann ich es so machen, dass, wenn ein Druide in der Gepardenform ist, er nur auf Fähigkeiten für den Gepard zugreifen kann? Mit anderen Worten, sie sollten nicht in der Lage sein, auf ihre normalen Druidenfähigkeiten zuzugreifen.Überlegungen zum Design für die vorübergehende Umwandlung eines Spielers in ein Tier in einem Rollenspiel
Mit dem Dekorator-Muster erscheint es, dass sogar in der Cheetah-Form mein Druide in der Lage ist, auf ihre normalen Druidenfähigkeiten zuzugreifen.
class Druid : Character
{
// many cool druid skills and spells
void LightHeal(Character target) { }
}
abstract class CharacterDecorator : Character
{
Character DecoratedCharacter;
}
class CheetahForm : CharacterDecorator
{
Character DecoratedCharacter;
public CheetahForm(Character decoratedCharacter)
{
DecoratedCharacter= decoratedCharacter;
}
// many cool cheetah related skills
void CheetahRun()
{
// let player move very fast
}
}
mit jetzt den Klassen
Druid myDruid = new Druid();
myDruid.LightHeal(myDruid); // casting light heal here is fine
myDruid = new CheetahForm(myDruid);
myDruid.LightHeal(myDruid); // casting here should not be allowed
Hmmmm ... jetzt, wo ich darüber nachdenke, wird myDruid die Druid
Klasse Zauber/Fähigkeiten, um uns nicht in der Lage sein, es sei denn, die Klasse nach unten gegossen wird? Aber selbst wenn das der Fall ist, gibt es eine bessere Art und Weise, dass myDruid
an dieser Stelle um sicherzustellen, dass von allen Druid
bezogenen Zaubern gesperrt/Fähigkeiten, bis er zu gießt ein Druid
zurück (da zur Zeit ist es in CheetahForm
)
Ich mag diese Idee sehr. Ich habe das für ein Spiel gemacht, als ich in der Universität war, und es funktioniert gut. Die Benutzeroberfläche wurde dynamisch ausgefüllt, wenn sich ein Skill-Set änderte. – Codesleuth
"Sie können nicht" oder "Sie sollten nicht"? –
@ mark.withers - LOL fairer Punkt Ich werde meinen Beitrag aktualisieren :) – willcodejavaforfood