Yapılması gereken ilk önemli nokta, bu sorunun cevabını 'iyi' bir cevabın olmamasıdır.
Doğru cevaba en yakın şey şöyle bir şey olabilir: Oyunun türüne, hedef platformuna, kısıtlamalarına (zaman) vb. Bağlıdır.
Burada, başkalarının bu sorunu nasıl cevaplamaya çalıştıklarını (geçmişte bu konuda bilgi bulmaya çalıştığım gibi) gösteren gerçekten iyi makaleler olduğunu söyledi.
Komünist ördek oyunun enginuity makalesinde bahsettiği gibi oyun mimarisinin bazı bölümlerini anlamama yardımcı oldu.
Mevcut tasarımım Quake3 / Doom3'ün bir melezi ve biraz da .NET sınıf kütüphanesinin bir parçası :)
İki kütüphanem var (statik veya dinamik nasıl oluşturmak / teslim etmek istediğinize bağlıdır) Framework
ve Library
.
Kütüphane, oyun yazılımı yapımında yardımcı olacak tüm yardımcı sınıfları içerir ancak bu tür ürünlerle sınırlı değildir. yani, oyun kodu için optimize edilmiş, ancak bağlantılı bir listenin hizmetine ihtiyaç duyan herhangi bir şey tarafından kullanılabilen bağlantılı bir listenin uygulanmasına sahiptir.
Çerçeve, onu çağırmak istersen, 'motorun bağırsaklarıdır. Bunların çoğu Quake3'ün tasarım felsefelerini izler (daha çok nesne yönelimli bir şekilde). İçerdiği CLI , zamanlama yönetimi, işletim sistemi özel kodu ve sonunda ağ katmanları vb
Bu ikisi daha sonra üretilen gerçek uygulamaya karşı bağlanır. Game
Eğer oyun özel kodu içeren, istersen. Quake3 de aynı şekilde hangi mod'un oynandığına bağlı olarak DLL yükler.
Size burada bir yapı hakkında fikir vermek için, her bir lib için klasörler ve içeriklerin hızlıca dağılması:
- iskelet
- GÇ (Uzman dosya yönetimi sınıfları, Metin Baskısı sınıfları (örneğin, CLI'ye) ve günlüğe kaydetme vb.)
- Ağ
- Müşteri (Çerçevenin “oyuna katılan / oyuna bağlı kişi” olarak gördüğü şeyi temsil eden sınıflar)
- Sunucu (çerçeve ile bağlantıyı yönetme ve yürütücüleri yönetme sınıfları)
- Platform (Klavye / fare / kontrolcü sınıfları kullanma, getTime () gibi işletim sistemine özgü rutinler)
- Sistem (hata mesajlarının yazdırılmasına yardımcı olmak için bir hata sınıfı gibi çok düşük seviye sınıfları, Zamanlama sınıfları ve CLI'nın kendisi.)
- Render (kendi kendini açıklayıcı)
- vb.
- Kütüphane
- Koleksiyonlar (veri koleksiyonlarını temsil eden sınıflar, bağlantılı listeler / karma tablolar vb.)
- Matematik (Vektörler ve matrisler gibi temel matematik yardımcı sınıfları)
- vb.
HTH! Size bazı işaretçiler vermeli ...