จุดสำคัญแรกที่ต้องทำคือไม่มีคำตอบที่ 'ดี' สำหรับคำถามนี้
สิ่งที่ใกล้เคียงที่สุดกับคำตอบที่ถูกต้องน่าจะเป็น: มันขึ้นอยู่กับประเภทของเกมแพลตฟอร์มเป้าหมายข้อ จำกัด (เวลา) เป็นต้น
ที่กล่าวว่ามีบางบทความที่ดีจริงๆออกมีที่จะแสดงให้คุณเห็นว่าคนอื่นได้พยายามที่จะตอบปัญหานี้ (เพราะฉันได้พยายามหาข้อมูลเกี่ยวกับเรื่องนี้ในอดีต)
เมื่อเป็ดคอมมิวนิสต์พูดถึงบทความเกี่ยวกับความชำนาญในการพัฒนาเกมช่วยให้ฉันเข้าใจบางส่วนของสถาปัตยกรรมเกม
การออกแบบปัจจุบันของฉันคือลูกผสมของ Quake3 / Doom3และห้องสมุดระดับ. NET เล็กน้อย :)
ฉันมีสองห้องสมุด (คงที่หรือแบบไดนามิกขึ้นอยู่กับว่าคุณต้องการสร้าง / ส่ง) และFramework
Library
ห้องสมุดมีคลาสผู้ช่วยทั้งหมดซึ่งมีไว้เพื่อช่วยในการผลิตซอฟต์แวร์เกม แต่ไม่ จำกัด เฉพาะผลิตภัณฑ์ประเภทนี้ เช่นมันมีการใช้งานของรายการที่เชื่อมโยงซึ่งเหมาะสำหรับรหัสเกม แต่สามารถนำมาใช้โดยอะไรก็ได้ที่ต้องการบริการของรายการที่เชื่อมโยง
Framework เป็นความกล้าของ 'engine' ถ้าคุณต้องการเรียกมันว่า สิ่งเหล่านี้มากมายตามปรัชญาการออกแบบของ Quake3 (ในทิศทางที่เป็นวัตถุมากขึ้น) มันมีCLIการจัดการเวลารหัสเฉพาะระบบปฏิบัติการและในที่สุดเครือข่ายเลเยอร์อื่น ๆ
ทั้งสองนี้เชื่อมโยงกับแอพที่เกิดขึ้นจริง Game
ถ้าคุณชอบซึ่งมีรหัสเฉพาะเกม ในทำนองเดียวกัน Quake3 จะโหลด DLL ขึ้นอยู่กับว่า 'mod' กำลังเล่นอยู่
หากต้องการให้แนวคิดเกี่ยวกับโครงสร้างที่นี่คุณสามารถแบ่งโฟลเดอร์และเนื้อหาอย่างรวดเร็วสำหรับแต่ละ lib:
- กรอบ
- IO (คลาสการจัดการไฟล์ผู้เชี่ยวชาญ, คลาสการพิมพ์ข้อความ (เช่น CLI) และการบันทึกเป็นต้น)
- เครือข่าย
- ลูกค้า (คลาสที่แสดงถึงสิ่งที่ Framework พิจารณาว่าเป็น 'ผู้เล่น / เชื่อมต่อกับเกม')
- เซิร์ฟเวอร์ (คลาสเพื่อจัดการการเชื่อมต่อเข้าสู่กรอบงานและจัดการโปรแกรมเล่น)
- แพลตฟอร์ม (คีย์บอร์ด / เมาส์ / ตัวควบคุมคลาสที่จัดการรูทีน OS เฉพาะเช่น getTime ())
- ระบบ (คลาสที่มีระดับต่ำมากเช่นคลาสข้อผิดพลาดเพื่อช่วยในการพิมพ์ข้อความแสดงข้อผิดพลาดคลาสของการกำหนดเวลาและ CLI เอง)
- Renderer (อธิบายตนเอง)
- เป็นต้น
- ห้องสมุด
- คอลเลกชัน (คลาสที่แสดงคอลเลกชันของข้อมูลรายการที่เชื่อมโยง / แฮชเทเบิ้ล ฯลฯ )
- คณิตศาสตร์ (คลาสตัวช่วยคณิตศาสตร์พื้นฐานเช่นเวกเตอร์และเมทริกซ์)
- เป็นต้น
HTH! ควรให้คำแนะนำคุณ ...