Postingan

Senin, 02 Juli 2012

Merancang Client-Server Permainan BAB 10.3 "Algorithm In Game Technology"




Merancang Client-Server Permainan
Kami telah menguasai dasar-dasar pemrograman jaringan dan soket, jadi mari kita memakai topi seorang desainer untuk
kedua dan mencoba menghubungkan semua pengetahuan ini ke permainan nyata. Pada dasarnya, semua bagian sebelumnya
mengekspos alat yang kita memiliki akses ke. Berpikir tentang tujuan sejenak akan memberikan beberapa perspektif
dan fokus. Pada bagian ini, saya akan fokus pada permainan daerah kecil (8 sampai 16 pemain), sedangkan bagian berikutnya
berkaitan dengan isu-isu besar-besaran multiplayer game desain.
Dalam sebuah permainan daerah kecil, semua pemain menjalankan klien game, dan satu pemain (biasanya satu dengan
komputer tercepat dan koneksi internet) berjalan server juga. Ini adalah alasan utama bahwa
game harus mempertahankan kelompok pengguna berkurang. Sebuah basis pengguna yang lebih besar akan membuat server terlalu sumber daya
mengkonsumsi, dan menjalankan klien dan server pada mesin yang sama akan menjadi tidak layak.
Pada Gambar 10.3, arsitektur untuk sistem semacam ini menyiratkan bahwa pengguna menjalankan server memulai sebuah baru
permainan, menempatkan server di sebuah menerima () panggilan. Ini biasanya dilakukan melalui suatu "permainan lobi." pada
titik waktu, pengguna lain bergabung permainan, sehingga server dapat secara efektif berhenti menerima panggilan lebih lanjut.
Setelah multiplayer game dimulai, tidak ada yang dapat bergabung sampai server memasuki lobi lagi.
Gambar 10.3. UDP bertindak seperti sebuah relay data, sedangkan TCP mempertahankan kontrol sesi
dan mengelola lobi permainan.

Hal ini memungkinkan server game untuk dengan mudah berbaur di dalam mesin permainan utama, dengan menggunakan algoritma berikut:
Server, langkah 1: Buat soket, dan mengikat ke IP dan port.
Server, langkah 2: Dengarkan, dan menunggu di panggilan menerima. Buka "permainan lobi" dan menunjukkan IP / port.
Server, langkah 3: Sekarang server menunggu koneksi. Dua thread / proses yang diperlukan: sebuah
antarmuka benang menjalankan interaksi permainan menu dan lain menjalankan menerima panggilan sehingga
sistem tidak mengunci.



Server, langkah 4: Update layar untuk setiap koneksi diterima. Menerapkan sambungan yang diinginkan
kebijakan (connectionless iteratif, berorientasi koneksi konkuren).
Server, langkah N +1: Pada titik ini, semua klien yang terhubung ke server. Bila menu permainan
benang interaksi menunjukkan pemain telah memulai permainan, Anda dapat secara efektif menutup server utama
soket, mengganggu panggilan menerima, dan memulai permainan dengan soket koneksi. Server permainan
sehingga menutup dan tidak menerima koneksi baru.
Metode ini memungkinkan kita untuk menyederhanakan kode permainan kami. Server permainan hanya bekerja pada saat boot, dan sesudahnya
itu semua masalah transfer data. Namun ada beberapa perangkap tersembunyi kita harus menyadari.
Apa yang terjadi ketika seorang pemain kehilangan koneksi nya? Server akan menyadari hal ini baik oleh penutupan soket
atau hanya dengan tidak menerima data selama periode waktu yang panjang. Segera setelah kami mendeteksi ketidaknyamanan ini, kami
harus membuat socket baru, taruh dalam modus menerima, dan menunggu untuk pengguna hilang untuk (mudah-mudahan) muncul kembali.

Massively Multiplayer Games



Sebuah permainan massively multiplayer (MMG) adalah mimpi yang menjadi kenyataan bagi programmer jaringan setia. itu
teknik, masalah, dan solusi ditemukan dalam desain mereka dan pemrograman adalah sebagai kompleks sebagai jaringan
pemrograman bisa mendapatkan: banyak koneksi, banyak transfer data, dan kendala waktu yang sangat terbatas. menambahkan
lag yang selalu ada persamaan dan, yah, Anda mendapatkan gambar.
Untuk mulai dengan, saya akan menjelaskan MMGs sebagai game-game yang melayani komunitas besar, menggunakan mesin tunggal (atau
lebih) sebagai server game khusus. Para pemain menjalankan klien yang memperbarui server dengan negara pemain
informasi, sedangkan server pada dasarnya menyiarkan informasi kepada masyarakat bermain. MMGs sulit
untuk kode, bukan karena mereka adalah masalah dasarnya kompleks, tetapi karena ukuran tipis mereka: Coding sebuah
delapan pemain game dengan server permainan khusus tidak kompleks "per se." Masalah timbul ketika Anda mencoba
untuk menutupi ribuan pemain. Jadi, semua yang perlu kita lakukan adalah bekerja pada teknik yang memungkinkan kita untuk "menjinakkan ukuran"
dari masalah. Marilah kita membahas beberapa dari metode ini.

Ekstrapolasi data



Sayangnya, jaringan kadang-kadang lebih lambat dari yang kita ingin mereka menjadi. Kami kami kode client-server
sistem dengan asumsi bahwa jaringan adalah sebuah jalan raya tak terhingga cepat dan handal, tapi ini jarang terjadi.
Lambannya terjadi, dan kali gameplay akan terganggu seperti yang kita menunggu update posisi berikutnya dari
lain ujung kawat. Dalam keadaan ini, kita harus mengambil setiap langkah yang mungkin untuk mencoba untuk meminimalkan
dampak lag pada game, sehingga pemain bisa menikmati permainan kami meski masalah jaringan. Dalam slowpaced
permainan, kecepatan akan jarang menjadi masalah. Namun, jika Anda sedang bermain permainan cepat-tindakan, yang terakhir
hal yang Anda harapkan adalah lawan untuk membekukan karena kerusakan jaringan. Jelas, kita perlu menempatkan beberapa
matematika untuk bekerja untuk memastikan bahwa kita "meluruskan" penyimpangan ini jaringan.
Teknik yang akan kita gunakan mencoba untuk menentukan nilai karakteristik dari setiap negara pemain di masa sekarang
waktu, bahkan ketika kita belum memiliki update terbaru. Ia bekerja untuk setiap nilai terus menerus, jadi saya akan menunjukkan
yang digunakan dengan parameter yang paling umum dalam permainan jaringan: posisi pemain. Untuk mempermudah, saya akan
menganggap kita berada dalam dunia 2D dengan posisi pemain dinyatakan dengan x, z sepasang floating-point nilai.
Dalam keadaan ini, yang harus kita lakukan adalah menyimpan update terakhir N posisi (saya akan menunjukkan dengan
N = 3) serta cap waktu (disediakan oleh timeGetTime ()) untuk setiap satu dari mereka. Seperti yang Anda sudah tahu,
tiga nilai dapat diinterpolasi dengan polinomial kuadrat. Jika posisi kami diberi label P0, P1, dan P2 (P2
yang paling baru) dan perangko waktu adalah masing T0, T1, dan T2, kita dapat membuat fungsi:

P(T)



sumber buku : Algorithm In Game Technology


come....come......