Codierung ist eigentlich nicht so schwer . Der schwierige Teil besteht darin, Code zu schreiben, der Sinn macht, lesbar und verständlich ist. Ich möchte also einen besseren Entwickler finden und eine solide Architektur erstellen.
Also möchte ich eine Architektur für NPCs in einem Videospiel erstellen . Es ist ein Echtzeit-Strategiespiel wie Starcraft, Age of Empires, Command & Conquers usw. usw. Also werde ich verschiedene Arten von NPCs haben. Ein NPC kann viele Fähigkeiten (Methoden) von ihnen haben ein zu: Build()
, Farm()
und Attack()
.
Beispiele:
Arbeiter können Build()
und Farm()
Krieger können Attack()
Citizen kann Build()
, Farm()
und Attack()
Fischer können Farm()
undAttack()
Ich hoffe alles ist soweit klar.
Jetzt habe ich meine NPC-Typen und ihre Fähigkeiten. Kommen wir aber zum technischen / programmatischen Aspekt.
Was wäre eine gute programmatische Architektur für meine verschiedenen Arten von NPCs?
Okay, ich könnte eine Basisklasse haben. Eigentlich denke ich, dass dies ein guter Weg ist, um am DRY- Prinzip festzuhalten . So kann ich Methoden wie WalkTo(x,y)
in meiner Basisklasse haben, da jeder NPC sich bewegen kann. Aber jetzt kommen wir zum eigentlichen Problem. Wo setze ich meine Fähigkeiten um? (Denken Sie daran : Build()
, Farm()
und Attack()
)
Da die Fähigkeiten aus der gleichen Logik bestehen, wäre es ärgerlich / DRY-Prinzip zu brechen, sie für jeden NPC (Arbeiter, Krieger, ..) zu implementieren.
Okay, ich könnte die Fähigkeiten innerhalb der Basisklasse implementieren. Dies würde eine Art von Logik erfordern , dass überprüft , wenn ein NPC Fähigkeit X verwenden kann IsBuilder
, CanBuild
.. Ich denke , es ist klar , was ich ausdrücken will.
Aber ich fühle mich mit dieser Idee nicht sehr wohl. Das klingt nach einer aufgeblähten Basisklasse mit zu viel Funktionalität.
Ich benutze C # als Programmiersprache. Mehrfachvererbung ist hier also keine Option. Mittel: Zusätzliche Basisklassen wie Fisherman : Farmer, Attacker
funktionieren nicht.