
Halo semuanya! Baru-baru ini saya berlibur, dan ada waktu untuk dengan tenang memprogram proyek rumah saya. Karena itu saya ingin membuat game online sederhana saya di Rust. Lebih tepatnya, penembak 2D sederhana. Saya memutuskan untuk membuat bagian jaringan terlebih dahulu, dan di sana sudah akan terlihat apa dan bagaimana. Karena genre melibatkan aksi di semua bidang, jadi saya memutuskan untuk menggunakan protokol UDP. Dia mulai mendesain arsitektur bagian jaringan. Saya menyadari bahwa Anda dapat meletakkan semuanya di perpustakaan terpisah. Saya juga mengunggah pustaka yang dihasilkan ke crates.io, di bawah lisensi MIT, karena: a) Maka akan lebih mudah bagi saya untuk menghubungkannya dari sana ke proyek-proyek saya. b) Mungkin itu akan bermanfaat bagi orang lain dan akan membawa manfaat. Untuk detailnya, selamat datang di kucing.
Referensi
->
Sumber->
Perpustakaan di crates.io->
DokumentasiContoh penggunaan
Pelanggan
Server
Perangkat internal
Secara umum, jika saya menggunakan soket UDP mentah alih-alih soket UDP mentah untuk bagian jaringan
Laminar , maka kode dapat dikurangi dengan faktor 100, dan saya menggunakan algoritma yang dijelaskan dalam seri artikel ini -
Pemrograman Jaringan untuk Pengembang Game .
Arsitektur server melibatkan penerimaan perintah dari klien (misalnya, menekan tombol mouse atau beberapa tombol pada keyboard) dan mengirimkan mereka status (misalnya, posisi unit saat ini dan arah yang mereka cari) yang dengannya klien dapat menampilkan gambar kepada pemain.
Di server
Di klien
Epilog
Bahkan, lebih mudah untuk membuat algoritma pengiriman perintah. Di server, terima hanya paket yang menerima lebih dari pergi ke paket terakhir yang diterima +1, dan buang sisanya. Kirim klien paket terakhir yang diterima. Di klien, simpan cache semua perintah yang coba dikirim oleh pengguna ke server. Setiap kali negara baru datang dari server dengan id, paket terakhir yang diterima oleh server, hapus dari cache dan semua paket dengan id kurang dari itu. Semua paket yang tersisa dikirim ke server lagi.
Selanjutnya, ketika saya akan membuat game itu sendiri, dalam proses penggunaan saya akan lebih meningkatkan dan mengoptimalkan lib. Mungkin saya akan menemukan beberapa bug lagi.
Saya menemukan di sini proyek server permainan di C # -
Networker + di Rust, ada
daun, semacam analog server permainan di Go-leaf. Hanya ada perkembangan yang sedang berlangsung.
PS Dear friend, jika Anda seorang pemula dan memutuskan untuk membaca kode saya untuk proyek ini dan melihat tes yang saya tulis di sana. Jadi, inilah saran saya untuk Anda - jangan lakukan seperti yang saya lakukan. Saya mencampur semuanya dalam tumpukan dalam tes dan tidak mengikuti template "AAA" (google apa itu). Anda tidak harus melakukan ini dalam produksi. Tes normal harus memverifikasi satu hal, bukan beberapa kondisi sekaligus, dan harus terdiri dari langkah-langkah:
- Anda mengatur variabel Anda;
- Anda melakukan tindakan yang ingin Anda uji;
- Anda membandingkan hasilnya dengan yang diharapkan.
Sebagai contoh
fn add_one(x:usize) -> usize { x+1 } #[test] fn add_one_fn_should_add_one_to_it_argument(){ let x = 2; let expected = x+1;