Kodowanie nie jest trudne w rzeczywistości . Trudność polega na pisaniu kodu, który ma sens, jest czytelny i zrozumiały. Chcę więc uzyskać lepszego programistę i stworzyć solidną architekturę.
Więc chcę zrobić stworzyć architekturę NPC w grze wideo. Jest to gra strategiczna w czasie rzeczywistym, taka jak Starcraft, Age of Empires, Command & Conquers, itp. Itd. Więc będę mieć różnego rodzaju NPC. NPC może mieć jeden do wielu możliwości (metody) tych: Build()
, Farm()
i Attack()
.
Przykłady:
Pracownik może Build()
i Farm()
Wojownik może Attack()
Obywatel może Build()
, Farm()
a Attack()
rybak może Farm()
iAttack()
Mam nadzieję, że do tej pory wszystko jest jasne.
Teraz mam swoje typy NPC i ich umiejętności. Ale przejdźmy do aspektu technicznego / programowego.
Jaka byłaby dobra architektura programowa dla moich różnych postaci niezależnych?
Okej, mógłbym mieć klasę podstawową. Właściwie uważam, że jest to dobry sposób na przestrzeganie zasady OSUSZANIA . Mogę mieć metody jak WalkTo(x,y)
w mojej klasie podstawowej, ponieważ każdy NPC będzie mógł się poruszać. Ale teraz przejdźmy do prawdziwego problemu. Gdzie wdrażam swoje umiejętności? (pamiętaj: Build()
, Farm()
i Attack()
)
Ponieważ umiejętności będą się składały z tej samej logiki, irytująca / łamająca zasadę SUCHEGO zastosowania będzie wdrażana dla każdego NPC (Robotnika, Wojownika, ...).
Okej, mógłbym wdrożyć umiejętności w klasie podstawowej. Wymagałoby to pewnego rodzaju logiką, który sprawdza, czy NPC może używać zdolności X. IsBuilder
, CanBuild
.. Myślę, że to jest jasne, co chcę wyrazić.
Ale nie czuję się dobrze z tym pomysłem. To brzmi jak rozdęta klasa podstawowa o zbyt dużej funkcjonalności.
Używam C # jako języka programowania. Zatem wielokrotne dziedziczenie nie jest tutaj opcją. Oznacza: Posiadanie dodatkowych klas podstawowych takich jak Fisherman : Farmer, Attacker
nie będzie działać.