Saya ingin membuat game yang bisa dimodifikasi. Bagaimana ini memengaruhi pilihan bahasa pemrograman saya? [Tutup]

26

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?

pecandu game
sumber
3
Jika Anda ingin membuat game yang dapat dimodifikasi , PhysicsFS mungkin merupakan perpustakaan yang sangat berguna untuk diketahui. (Ini tidak ada hubungannya dengan fisika, jangan biarkan nama membodohi Anda. :))
Paul Manta
10
"tetapi seseorang mengatakan kepada saya bahwa saya harus tetap menggunakan Java jika saya ingin game menjadi moddable" Ini, omong-omong, adalah BS.
Ray Dey

Jawaban:

18

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 LoadLibrarytipu 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.

Jonathan Dickinson
sumber
Dalam skenario pertama yang Anda jelaskan, Anda berbicara tentang pengguna yang benar-benar memprogram pustaka dinamisnya sendiri dan menghubungkannya ke dalam game? Saya pernah melihat ini digunakan sebelumnya di perpustakaan (mis. Perpustakaan audio untuk menambahkan codec baru, dll) tetapi, mungkin karena saya tidak pernah melihat terlalu banyak modding, saya tidak pernah mengalami kasus seperti ini untuk permainan. Saya ingin tahu tentang ini (karena tampaknya sangat sulit bagi pengguna untuk mengetahui cara melakukan ini dan saya biasanya melihat mod sebagai dapat diakses) jadi apakah Anda tahu contohnya? Sebagian besar waktu saya melihat alat khusus, seperti editor dunia dengan sedikit skrip yang digunakan.
David Gouveia
1
@ David Gouveia Saya percaya setidaknya satu versi dari mesin Paradox yang digunakan untuk Europa Universalis (dan game yang setara untuk periode waktu yang berbeda) mendukung bentuk penambalan biner (walaupun mungkin dengan memiliki modder patch sumber dan mengkompilasi ulang salah satu dari game DLL alih-alih memiliki dukungan SDK yang tepat) selain mod yang lebih umum digunakan dengan mengubah implementasi file data.
Dan Neely
2
@ DavidVouveia lihat: Sumber mesin; atau bahkan plugin Winamp. Saya pikir Quake bekerja seperti ini. Saya telah mengumpulkan bahwa Anda menggunakan C #; jadi Anda mungkin ingin melihat ke MEF (Managed Extensibility Framework): mengekspos antarmuka, memuatnya melalui refleksi dan bob paman Anda.
Jonathan Dickinson
@ JonathanDickinson Oh, saya tidak tahu bahwa mesin Source berjalan di bawah model ini. Selalu membayangkan seperangkat alat seperti set Konstruksi Elder Scrolls. Terima kasih atas informasinya (saya punya ide bagaimana cara kerjanya, hanya berpikir mungkin terlalu rumit untuk digunakan oleh modder umum). Dan saya benar-benar menertawakan "bob's youraman part" . :-)
David Gouveia
1
Re Lua: Orang -orang ini memiliki Lua kotak pasir yang cocok untuk digunakan dalam perangkat lunak wiki (dan cukup stabil sehingga Wikipedia bahasa Inggris menggunakannya). Saya yakin Anda bisa menyesuaikannya dengan kebutuhan Anda, tetapi beberapa bagian dari ekstensi adalah GPL, jadi tanyakan kepada pengacara Anda.
Kevin
16

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).

David Gouveia
sumber
5

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.

Elva
sumber
1

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:

  • Groovy - bahasa mirip Java dinamis yang luar biasa yang dapat disematkan dalam program Java yang lebih besar.
  • Clojure - Lisp yang kuat dan dinamis untuk JVM. Mungkin sulit bagi beberapa modder untuk bergerak maju, tetapi merupakan bahasa yang sangat kuat dan dapat tertanam dengan mudah. Belum pernah melihatnya digunakan untuk modding game tetapi tidak ada alasan mengapa tidak.
  • Lua - bahasa scripting game yang sangat populer. Saya percaya ada beberapa versi untuk JVM yang dapat Anda gunakan dari dalam Java (walaupun saya belum mencobanya sendiri)
  • JavaScript - tersedia di JVM via Rhino . Pilihan yang cukup solid untuk skrip permainan karena banyak orang tahu beberapa JavaScript, ditambah model objek prototipe sangat cocok dengan mod game.
mikera
sumber
-2

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.

Jacob Picke s
sumber
Yakub Saya tidak berpikir Anda mengerti pertanyaan itu, tolong baca jawaban dan lihat apakah itu membantu Anda memahami apa yang sedang dibahas di sini.
vikki