Saya sudah mulai membuat beberapa game kecil di Jawa, dan saya mempertimbangkan untuk belajar C # untuk proyek yang lebih besar. Saya sangat ingin membuat game yang bisa diubah-ubah, tetapi seseorang mengatakan kepada saya bahwa saya harus tetap menggunakan Java jika saya ingin game tersebut dapat dimodifikasi, meskipun saya tidak mengerti mengapa.
Jadi, karakteristik bahasa pemrograman apa yang membuat bahasa lebih cocok untuk gim yang dapat dimodifikasi?
Jawaban:
Itu tergantung pada bagaimana Anda ingin merancang sistem mod Anda. Saya akan menjelajahi dua dari mereka.
SDK
Kemungkinan besar Anda akan mengharuskan modder Anda menggunakan bahasa yang sama seperti Anda, dan memuat mod melalui refleksi (atau serupa, tergantung pada bahasa pilihan Anda). Ini jelas akan membatasi Anda untuk bahasa yang dapat melakukan pengikatan yang terlambat - dan ada banyak yang dapat melakukannya (bahkan C dapat melakukan pengikatan yang terlambat dengan beberapa
LoadLibrary
tipu daya yang pintar ). Anda bahkan dapat melakukan beberapa meta-modding, di mana sebuah mod dapat meng-host mod lainnya (mis. Scripted mods).Masalah pertama dengan pendekatan ini adalah menyembunyikan kondisi internal. Mengambil C # sebagai contoh, seorang modder dapat menggunakan refleksi untuk mengakses anggota pribadi, C juga dapat melakukan ini (walaupun diperlukan lebih banyak usaha).
Masalah kedua adalah hosting. Orang tidak begitu suka kode asing yang berjalan di sistem mereka tanpa ada kotak pasir di tempatnya. Sebagai skenario terburuk, Anda bisa menulis mod yang mengatur seedbox; jika ini dipasang di ISP, itu dapat membahayakan reputasi mereka.
Scripting
Para modder akan menggunakan bahasa seperti Lua untuk membuat mod. Anda akan memerlukan bahasa yang dapat memanggil kode asli (untuk berinteraksi dengan Lua); atau Anda harus menulis bahasa skrip Anda sendiri dalam bahasa pilihan Anda.
Masalah pertama di sini adalah bahwa sebagian besar bahasa scripting ditafsirkan, yang mungkin tidak dapat diterima untuk sistem waktu nyata (meskipun, lihat LuaJIT); seperti game.
Ironisnya masalah kedua masih ada di sini; mengambil Lua sebagai contoh saya sangat kecewa karena memiliki fungsi 'penembakan' yang termasuk dalam perpustakaan inti / default - menjadikannya sama sekali tidak berguna sebagai lingkungan berpasir (tanpa banyak usaha, keberuntungan dan pemeliharaan), sulit untuk menggambarkan betapa marahnya saya tentang hal ini, tetapi saya benar-benar berharap mereka minum koktail yang kuat ketika mereka menyertakan fitur-fitur ini . Anda dapat dengan mudah menghindari ini jika Anda menggulung bahasa Anda sendiri (lihat: UnrealScript).
Akhirnya biaya berinteraksi dengan mesin scripting mungkin menjadi penghalang - sekali lagi mengambil Lua sebagai contoh, dikombinasikan dengan C #: C # memiliki overhead yang substansial ketika menjalankan fungsi asli (melalui P / Invoke) dan Lua adalah API yang cukup 'akrab'. Ini dapat menyebabkan masalah jika cara Anda mendesain 'skrip SDK' membutuhkan banyak obrolan antara bahasa utama Anda dan bahasa skriping Anda (perhatikan bahwa C tidak benar-benar memiliki masalah ini). Sekali lagi Anda bisa mengelak dengan menulis bahasa skrip Anda sendiri (dan dalam kasus C # mengompilasinya ke MSIL) dan menjalankannya dengan cara tercepat di bawah lingkungan [virtual] Anda.
Karena skrip pada dasarnya berjalan pada sistem yang sama sekali berbeda dengan kode primer Anda, Anda dapat mengontrol akses ke kondisi internal sepenuhnya (kecuali jika mereka melakukan beberapa hal mewah dengan fungsi shell yang disebutkan sebelumnya).
Kesimpulan
Saya sedikit membelok ke luar topik, namun, yang pada dasarnya dapat Anda kumpulkan dari dinding teks itu adalah bahwa Anda harus dapat membuat game yang bisa dimodifikasi dalam bahasa apa pun (saya berani mengatakan bahwa Anda bisa ) - tetapi dalam beberapa bahasa dapat menyebabkan lebih banyak pekerjaan. Apakah saya agak anal tentang keamanan? Ya, Anda juga harus memperhatikan kode pengguna.
sumber
Menurut saya bahasa ini bukan faktor penentu di sini, tetapi seberapa fleksibel dan berbasis data yang Anda buat game yang mendefinisikannya.
Setiap game berjalan pada set data (mis. Segala sesuatu dari level, jerat, konfigurasi, item). Perbedaan antara gim normal dan gim moddable adalah gim yang nanti menyediakan alat yang memungkinkan pengguna mengubah data yang ada (atau menambahkan datanya sendiri). Apapun bahasa yang Anda pilih, coba saja buat game Anda sebagai data-driven sebanyak mungkin dan hindari hardcoding konten game apa pun. Hampir semua bahasa yang Anda pilih dapat membaca data dari disk, yang merupakan sebagian besar dari yang Anda butuhkan.
Itu juga setengah jalan di sana jika Anda hanya membuat alat untuk penggunaan pribadi Anda sendiri (misalnya, editor tingkat Anda sendiri) dan kemudian menyempurnakannya dan membagikannya dengan pengguna Anda. The super Daging Boy editor tingkat cukup banyak itu, sebuah verision ditingkatkan dari alat yang digunakan selama pengembangan game.
Dan tergantung pada jenis gim, Anda mungkin ingin mengizinkan pengguna untuk menulis beberapa perilaku gim. Dalam hal ini Anda harus melihat memasukkan bahasa scripting ke dalam permainan Anda sejak awal (baik milik Anda sendiri, atau yang sudah ada seperti Lua atau Python yang merupakan pilihan populer). Ini juga termasuk dalam kategori desain berbasis data. Jika Anda memutuskan untuk menggunakan bahasa skrip yang ada, mungkin ada baiknya memeriksa apakah bahasa pemrograman pilihan Anda memiliki ikatan untuk bahasa skrip tersebut (biasanya dalam bentuk perpustakaan pihak ke-3).
sumber
Bahasa yang Anda pilih tidak benar-benar menentukan seberapa moddable sebuah game, cara Anda menggunakan bahasa lebih penting.
Jika sebagian besar gim Anda didorong oleh data (yaitu data gim didefinisikan dalam file yang dibaca dari kode Anda) gim tersebut bisa sangat dapat dimodifikasi. Ini bisa dilakukan dalam hampir semua bahasa. Menggunakan bahasa scripting juga memudahkan mod game.
Namun itu tidak secara otomatis berarti tidak menggunakan hal-hal itu membuat tidak mungkin untuk mod game. Minecraft misalnya bukan permainan yang sangat dapat dimodifikasi sama sekali, namun ada decompiler yang cukup bagus untuk Java dan komunitas yang sangat besar untuk Minecraft, jadi banyak alat dibuat untuk membuat Minecraft dapat diubah (berbagai modloader, Bukkit). Dengan alat-alat itu dimungkinkan untuk mod Minecraft (namun mereka, mungkin, secara teknis ilegal di beberapa negara).
Saran terbaik yang bisa saya berikan kepada Anda, adalah menggunakan alat yang Anda inginkan untuk digunakan oleh para modder; Jika Anda mendefinisikan NPC dari suatu file, file tersebut dapat diubah, jika Anda memiliki huruf khusus dalam kode, itu mungkin tidak bisa.
sumber
Java sangat cocok untuk menulis gim yang dapat dimodifikasi.
Karena itu, cara terbaik untuk membuat gim yang dapat dimodifikasi adalah dengan mengadopsi bahasa yang dinamis yang dapat tertanam dalam aplikasi yang lebih luas dan digunakan untuk skrip. Anda biasanya menginginkan bahasa yang dinamis karena intinya adalah untuk dapat berinteraksi dengan kode saat runtime, tanpa melalui siklus kompilasi / bangun / uji coba secara keseluruhan.
Beberapa pilihan bahasa dinamis untuk dipertimbangkan:
sumber
Ada cara yang lebih mudah untuk melakukan ini di java meskipun agak ceroboh. Yang harus Anda lakukan adalah mengambil file dot java di folder dan kemudian meletakkan file batch ini dengan folder, beri nama Run:
javac /src/.java Java / src /
Catatan: Anda bisa menambahkan banyak kelas yang Anda inginkan. Catatan: Di baris terakhir pastikan TIDAK untuk meletakkan ekstensi alias .java, .exe, .bat, dll.
Itu pada dasarnya hanya akan mengkompilasi ulang kode setiap kali gim dijalankan, jadi jika sumber gim berubah itu akan mengkompilasinya dan kemudian menjalankan gim yang baru dikompilasi ... Sayangnya Anda tidak bisa menambahkan mod orang lain ke dalam gim.
sumber