Poin penting pertama yang harus dibuat adalah bahwa tidak ada jawaban 'baik' untuk pertanyaan ini.
Hal yang paling dekat dengan jawaban yang benar akan menjadi sesuatu seperti: Itu sangat tergantung pada jenis permainan, platform target, kendala (waktu) dll.
Yang mengatakan ada beberapa artikel yang sangat bagus di luar sana yang akan menunjukkan kepada Anda bagaimana orang lain telah mencoba untuk menjawab masalah ini (karena saya telah mencoba mencari info tentang ini di masa lalu).
Seperti bebek komunis menyebutkan Enginuity artikel tentang permainan dev membantu saya memahami beberapa bagian arsitektur permainan.
Desain saya saat ini adalah hibrida dari Quake3 / Doom3 dan sedikit perpustakaan kelas .NET :)
Saya memiliki dua perpustakaan (statis atau dinamis tergantung pada bagaimana Anda ingin membangun / mengirim) Framework
danLibrary
.
Perpustakaan berisi semua kelas pembantu yang ada untuk membantu produksi perangkat lunak game tetapi tidak terbatas pada produk jenis ini. yaitu ia memiliki implementasi daftar tertaut yang dioptimalkan untuk kode game tetapi dapat digunakan oleh apa pun yang membutuhkan layanan dari daftar tertaut.
Kerangka kerja adalah nyali dari 'mesin' jika Anda ingin menyebutnya begitu. Banyak dari ini mengikuti filosofi desain Quake3 (hanya dengan cara yang lebih berorientasi objek). Ini berisi CLI , manajemen waktu, kode spesifik OS, dan akhirnya lapisan jaringan dll.
Keduanya kemudian dikaitkan dengan aplikasi aktual yang sedang diproduksi. ItuGame
jika Anda suka, yang berisi kode permainan tertentu. Dengan cara yang hampir sama, Quake3 memuat DLL tergantung pada 'mod' yang dimainkan.
Untuk memberi Anda gambaran tentang struktur di sini adalah uraian singkat folder dan konten untuk setiap lib:
- Kerangka
- IO (kelas manajemen file spesialis, kelas Pencetakan Teks (misalnya ke CLI), dan pencatatan dll)
- Jaringan
- Klien (kelas yang mewakili apa yang Kerangka anggap sebagai 'orang yang bermain / terhubung ke game')
- Server (kelas untuk mengelola koneksi ke dalam kerangka kerja dan mengelola pemain)
- Peron (Keyboard / mouse / pengontrol yang menangani kelas, rutinitas spesifik OS seperti getTime ())
- Sistem (kelas tingkat sangat rendah seperti kelas kesalahan untuk membantu pencetakan pesan kesalahan, kelas waktu, dan CLI itu sendiri.)
- Perender (cukup jelas)
- dll.
- Perpustakaan
- Koleksi (kelas yang mewakili koleksi data, daftar / hashtables yang ditautkan, dll.)
- Matematika (kelas pembantu matematika dasar seperti Vektor dan matriks)
- dll.
HTH! Harus memberi Anda beberapa petunjuk ...