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, Attackernie będzie działać.