Kodlama aslında o kadar da zor değil . Zor kısmı mantıklı, okunabilir ve anlaşılır bir kod yazmaktır. Bu yüzden daha iyi bir geliştirici edinmek ve sağlam bir mimari oluşturmak istiyorum.
Bu yüzden bir video oyununda NPC'ler için bir mimari oluşturmak istiyorum . Starcraft, Age of Empires, Command & Conquers, vb. Bir NPC birçok yetenekleri bunlardan (yöntemleri) için birine sahip olabilir: Build()
, Farm()
ve Attack()
.
Örnekler:
İşçi olabilir Build()
ve Farm()
savaşçı can Attack()
Bristol olabilir Build()
, Farm()
ve Attack()
balıkçı olabilir Farm()
veAttack()
Umarım şimdiye kadar her şey açıktır.
Şimdi NPC Tiplerim ve yeteneklerim var. Ama teknik / programsal yöne gelelim.
Farklı NPC'lerim için iyi bir programatik mimari ne olurdu?
Tamam bir temel sınıf alabilirdim. Aslında bunun KURU ilkesine bağlı kalmanın iyi bir yolu olduğunu düşünüyorum . Böylece, WalkTo(x,y)
her NPC hareket edebileceğinden, temel sınıfımdaki gibi yöntemlere sahip olabilirim . Ama şimdi asıl soruna gelelim. Yeteneklerimi nerede uygularım? (: hatırlamak Build()
, Farm()
ve Attack()
)
Yetenekler aynı mantıktan oluşacağından, her NPC için (Çalışan, Savaşçı, ..) uygulamak DRY prensibini can sıkıcı / kırıcı olacaktır.
Tamam ben olabilir temel sınıf içinde yeteneklerini uygulamak. Bu NPC yetenek X'i kullanabilirsiniz eğer doğrular Bu mantıkla çeşit gerektirecektir IsBuilder
, CanBuild
, .. ben ben ifade etmek istediğini net olduğunu düşünüyorum.
Ama bu fikirle pek iyi hissetmiyorum. Bu, çok fazla işlevselliğe sahip şişirilmiş bir taban sınıfına benziyor .
Programlama dili olarak C # kullanıyorum. Yani çoklu kalıtım burada bir seçenek değil. Araçlar: Gibi ekstra temel sınıflara sahip olmak Fisherman : Farmer, Attacker
işe yaramaz.