Saya mengkode permainan saya menggunakan model client-server. Saat bermain di singleplayer, gim ini memulai server lokal, dan berinteraksi dengannya seperti server jarak jauh (multipemain). Saya telah melakukan ini untuk menghindari pengkodean kode singleplayer dan multiplayer terpisah.
Saya baru saja mulai coding dan mengalami masalah besar. Saat ini saya sedang mengembangkan game di Eclipse, dengan mengatur semua kelas game menjadi beberapa paket. Kemudian, dalam kode server saya, saya hanya menggunakan semua kelas dalam paket klien.
Masalahnya adalah, kelas-kelas klien ini memiliki variabel yang khusus untuk rendering, yang jelas tidak akan dilakukan pada server.
Haruskah saya membuat versi modifikasi dari kelas klien untuk digunakan di server? Atau haruskah saya memodifikasi kelas klien dengan boolean, untuk menunjukkan apakah klien / server menggunakannya. Apakah ada opsi lain yang saya miliki? Saya baru saja berpikir tentang mungkin menggunakan kelas server sebagai kelas inti, kemudian memperluasnya dengan merender hal?
sumber
Jawaban:
Anda harus memilih untuk menjaga kode rendering Anda terpisah dari logika game Anda , karena itu adalah masalah yang berbeda .
Jika Anda memisahkan kode rendering dari kode klien / server, Anda mendapatkan beberapa keuntungan:
update
fase Anda darirender
fase Anda , dan menjalankannya pada waktu yang berbeda.const
, mengurangi bug.sumber
Saya pikir Anda harus memisahkan kode klien dan server. Kode server dan kode klien tidak boleh saling mengenal kecuali untuk fungsionalitas yang terpapar dengan antarmuka. Server seharusnya tidak tahu apa-apa tentang rendering, hanya mendaftarkan klien, melacak posisi, waktu, dll. Jika Anda memiliki masalah yang dipisahkan dengan bersih, lebih mudah untuk mempertahankan dan mengembangkan game Anda lebih lanjut. Semoga ini bisa membantu sedikit.
sumber
Pemisahan kekhawatiran FTW, seperti yang lain katakan, tetapi jika tujuan akhir Anda adalah untuk memiliki aplikasi klien dan server yang terpisah, Anda perlu mengambil langkah lebih jauh. Anda perlu menentukan apa yang spesifik untuk klien, apa yang spesifik untuk server, dan apa yang dibagikan. Untuk semua yang dibagikan, pisahkan menjadi kelas kode yang dibagikan secara eksklusif; kelas khusus klien atau server kemudian dapat mensubklasifikasikan atau mereferensikan kelas bersama sesuai kebutuhan. Pindahkan kelas bersama ke proyek yang terpisah, membangun JAR "shared library", dan memasukkan JAR itu di proyek klien dan server.
Ini memiliki beberapa keuntungan: ini membuat pemisahan keprihatinan menjadi jelas untuk menjaga segala sesuatu dalam proyek yang terpisah; itu meyakinkan Anda bahwa klien dan server mulai dengan kode bersama yang sama (selama mereka menggunakan versi yang sama dari JAR bersama); dan membuatnya tidak mungkin untuk "secara tidak sengaja" memodifikasi kode bersama tanpa menyadarinya. Jika kode yang dibagikan ada di proyeknya sendiri, Anda akan tahu kapan Anda mengedit apa pun dalam proyek itu yang perlu Anda ketahui bagaimana perubahan akan mempengaruhi klien dan server.
sumber