Saya ingin membuat game multiplayer real-time client-server sederhana sebagai proyek untuk kelas jaringan saya.
Saya telah membaca banyak tentang model jaringan multipemain waktu-nyata dan saya memahami hubungan antara klien dan server serta teknik kompensasi-lag.
Apa yang ingin saya lakukan adalah sesuatu yang mirip dengan model jaringan Quake 3: pada dasarnya, server menyimpan snapshot dari keseluruhan kondisi permainan; setelah menerima input dari klien, server membuat snapshot baru yang mencerminkan perubahan. Kemudian, ia menghitung perbedaan antara snapshot baru dan yang terakhir dan mengirimkannya ke klien, sehingga mereka bisa sinkron.
Pendekatan ini tampaknya sangat solid bagi saya - jika klien dan server memiliki koneksi yang stabil, hanya jumlah data minimum yang diperlukan yang akan dikirim untuk menjaga mereka tetap sinkron. Jika klien tidak sinkron, snapshot penuh juga dapat diminta.
Namun, saya tidak dapat menemukan cara yang baik untuk menerapkan sistem snapshot. Saya merasa sangat sulit untuk menjauh dari arsitektur pemrograman pemain tunggal dan berpikir tentang bagaimana saya bisa menyimpan status permainan sedemikian rupa sehingga:
- Semua data dipisahkan dari logika
- Perbedaan dapat dihitung antara snapshot dari status game
- Entitas game masih dapat dengan mudah dimanipulasi melalui kode
Bagaimana kelas snapshot diterapkan? Bagaimana entitas dan datanya disimpan? Apakah setiap entitas klien memiliki ID yang cocok dengan ID di server?
Bagaimana perbedaan snapshot dihitung?
Secara umum: bagaimana sistem snapshot keadaan-game diimplementasikan?