Implementasi Multiplayer, Dapatkah saya menerapkannya nanti jika saya mau?

15

Saya berencana menggunakan XNA untuk membangun proyek game. Saya tidak sepenuhnya yakin saat ini apakah saya ingin menambahkan fungsionalitas multi-pemain atau tidak, mengingat saya memiliki banyak masalah lain untuk dipecahkan yang masih baru bagi saya. Saya tidak ingin proyek itu keluar kendali.

Pertanyaan saya adalah, Jika saya menuju proyek saya tanpa rencana untuk menambahkan dukungan multi-pemain, apakah mudah untuk mundur (biasanya tidak) dan menambahkan kode yang diperlukan untuk menangkap game multi-pemain?

Bryan Harrington
sumber

Jawaban:

24

Berikut adalah saran suara yang diambil dari manual perpustakaan jaringan Zoidcom :

Jika proyek Anda dalam tahap perencanaan, disarankan untuk merancang proyek untuk jaringan sejak awal. Mengaitkan kode jaringan dalam keadaan terakhir dari proyek kemungkinan besar akan mengarah pada refactoring besar-besaran atau sejumlah besar peretasan, menghasilkan kode yang sulit dirawat dan dikuasai bug.

Cara terbersih adalah menerapkan seluruh game seolah-olah itu adalah game jaringan murni. Yaitu, mengimplementasikan kode untuk server khusus, dan mengimplementasikan kode ini hanya sebagai kode server. Terapkan kode klien game dengan cara yang serupa. Server dan klien dapat berjalan dalam proses yang sama dan bahkan tidak perlu menggunakan soket jaringan nyata, tetapi mereka harus entitas yang terpisah dan semua kode harus dirancang untuk bekerja seperti itu. Ketika pemain melompat, jangan mengubah vektor lompatan pemain secara langsung, tetapi kirim paket 'lompat-tekan-tombol' ke server dan biarkan server mengatasinya.

Ini berarti bahwa bahkan dalam permainan singleplayer, ada server tak terlihat yang berjalan di latar belakang. Versi multipemain dari gim yang sama hanya perlu terhubung ke server jarak jauh alih-alih yang lokal dan voila, multipemain dilakukan. Keuntungan dari ini adalah:

tidak ada kode terpisah untuk tunggal dan multipemain, kode jaringan diuji dan dikembangkan selama seluruh kode bersih proyek

Proyek yang menggunakan skema ini hampir semua permainan menggunakan mesin Quake, Civilization 4, Neverwinter Nights, dan banyak lagi.

Untuk menghubungkan klien dan server dalam proses yang sama dengan nol latensi, soket lokal dapat digunakan. Ini disediakan oleh Zoidcom dan mengirimkan paket langsung dari satu ZCom_Control ke yang lain, tanpa melalui soket level OS.

Leftium
sumber
Sepertinya ini adalah pengaturan untuk otoritas server murni yang saya benci. Jika ping Anda ke server rendah, itu berfungsi dengan baik. Tetapi ketika ping menjadi terlalu tinggi, tindakan pada layar Anda tertunda. Saya lebih suka metode yang menggunakan mesin sumber, klien menjalankan fisika dan hal-hal lokal dan tindakan segera muncul, tetapi server masih memeriksa untuk memastikan orang tidak meretas, dan jika ada ketidakkonsistenan dalam apa yang seharusnya terjadi , server mengirimkan status yang benar ke pemain dan mengabaikan simulasi klien dengan data baru.
AttackingHobo
8
@AttackingHobo: Anda baru saja menggambarkan prediksi klien. Anda dapat memiliki prediksi klien dan otoritas server secara bersamaan, dan itu tidak menghalangi arsitektur yang dijelaskan dalam manual Zoidcom sama sekali.
@AttackingHobo @Joe: Dan Zoidcom sebenarnya mendukung prediksi sisi klien ^^
Leftium
2

Saya setuju dengan saran yang dikutip dalam jawaban Leftium; desain untuk jaringan sejak awal, karena Anda tidak akan dapat menambahkannya nanti .

Pertama kali saya mencoba membuat game multiplayer (saya bahkan tidak mencoba membuat game pemain tunggal!), Saya pikir saya pertama-tama akan membuat game bekerja dan kemudian menambah jaringan. Ide buruk. Saya ditinggalkan dengan prototipe permainan pemain tunggal yang benar-benar membosankan dan tidak ada petunjuk bagaimana mengubahnya menjadi permainan multipemain. Saya menghapus seluruhnya dan mulai lagi, kali ini menulis kode jaringan multipemain sejak awal. Semuanya diklik.

Saya yakin bukan tidak mungkin untuk memulai dengan game satu pemain dan menambahkan fungsionalitas multi pemain. Jika Anda memikirkannya, rencanakan dengan benar dan pastikan Anda tahu strategi Anda, kemudian yakin, cobalah. Saya pikir itu akan menjadi teka-teki yang menarik untuk dikerjakan paling tidak. Tapi benar-benar pastikan Anda tahu rencana Anda tentang bagaimana Anda akan menambahkan jaringan.

Saya pikir ada jalan tengah (meskipun saya belum pernah mencobanya). Anda bisa menulis beberapa kelas dummy untuk fitur jaringan / multipemain, dan rajin menggunakannya saat Anda sedang menulis permainan pemain tunggal. Kemudian nanti, jika Anda memutuskan untuk mengimplementasikan multi-pemain, cukup isi kelas dummy dan Anda akan hampir selesai. Ini sangat mendekati metode server / klien, tetapi Anda mungkin dapat pergi dengan sedikit kerja; lagipula, gim pemain tunggal lebih mudah dibuat daripada gim multipemain, jadi jika Anda akan menulis gim pemain tunggal Anda seperti gim multipemain, mengapa tidak membuat gim multipemain saja?

Ricket
sumber