การเข้ารหัสไม่ว่าหนักจริง ส่วนที่ยากคือการเขียนโค้ดที่อ่านเข้าใจง่าย ดังนั้นฉันต้องการได้นักพัฒนาที่ดีขึ้นและสร้างสถาปัตยกรรมที่มั่นคง
ดังนั้นฉันต้องการสร้างสถาปัตยกรรมสำหรับNPCในวิดีโอเกม มันเป็นเกม Realtime Strategy เช่น Starcraft, Age of Empires, Command & Conquers ฯลฯ ดังนั้นฉันจะมี NPC หลายแบบ NPC สามารถมีความสามารถจำนวนมาก (วิธีการ) ของเหล่านี้: Build()
, และFarm()
Attack()
ตัวอย่าง:
คนทำงานสามารถBuild()
และFarm()
นักรบสามารถAttack()
CitizenสามารถBuild()
, Farm()
และAttack()
ชาวประมงสามารถFarm()
และAttack()
ฉันหวังว่าทุกอย่างจะชัดเจน
ดังนั้นตอนนี้ฉันมีประเภท NPC และความสามารถของพวกเขา แต่ลองมาที่ด้านเทคนิค / โปรแกรมด้านเทคนิค
สถาปัตยกรรมการเขียนโปรแกรมที่ดีสำหรับ NPC ชนิดต่าง ๆ ของฉันจะเป็นอย่างไร
โอเคฉันสามารถมีคลาสพื้นฐานได้ จริงๆแล้วฉันคิดว่านี่เป็นวิธีที่ดีในการยึดมั่นในหลักการของDRY ดังนั้นฉันสามารถมีวิธีการเหมือนWalkTo(x,y)
ในคลาสพื้นฐานของฉันเนื่องจาก NPC ทุกคนจะสามารถเคลื่อนไหวได้ แต่ตอนนี้มาถึงปัญหาที่แท้จริง ฉันจะใช้ความสามารถของฉันได้ที่ไหน (จำ: Build()
, Farm()
และAttack()
)
เนื่องจากความสามารถจะประกอบไปด้วยตรรกะเดียวกันมันจะน่ารำคาญ / ทำลายหลักการ DRY เพื่อนำไปใช้กับ NPC แต่ละคน (Worker, Warrior, .. )
โอเคฉันสามารถใช้ความสามารถภายในคลาสพื้นฐานได้ เรื่องนี้จะต้องชนิดของตรรกะบางอย่างที่จะตรวจสอบถ้า NPC สามารถใช้ความสามารถในการเอ็กซ์IsBuilder
, CanBuild
.. ผมคิดว่ามันเป็นที่ชัดเจนสิ่งที่ฉันต้องการที่จะแสดง
แต่ฉันไม่รู้สึกดีกับความคิดนี้ ดูเหมือนว่าจะเป็นคลาสพื้นฐานป่องที่มีฟังก์ชั่นมากเกินไป
ฉันใช้ภาษา C # เป็นภาษาโปรแกรม ดังนั้นการสืบทอดหลายอย่างไม่ใช่ตัวเลือกที่นี่ หมายความว่า: การมีคลาสพื้นฐานพิเศษอย่างFisherman : Farmer, Attacker
จะไม่ทำงาน