Secara konseptual, bagaimana seseorang membuat aturan / kendala (bukan grafis / fisika) untuk sebuah game

16

Saya ingin membuat game sederhana yang mirip dengan buku petualangan pilihan Anda sendiri. Pemain disajikan dengan teks naratif dan dapat memilih tindakannya dari daftar kemungkinan. Ini, pada gilirannya, mengarah ke teks naratif baru, tak terhingga. Satu-satunya hasil adalah bahwa tergantung pada beberapa keputusan sebelumnya, daftar kemungkinan mungkin berbeda.

Pada pandangan pertama, ini terdengar seperti beban pernyataan if-else, sehingga menyiratkan mesin aturan akan ada. Tapi, itu juga terdengar seperti mesin negara yang terbatas bagiku.

Saya akan menulis ini di Jawa atau mungkin Groovy. Saat ini saya lebih tertarik pada masalah konseptual, yaitu bagaimana hal ini harus dilakukan pada tingkat yang luas (bagaimana orang menerapkan permainan catur atau kartu?), Tetapi beberapa saran tentang perpustakaan tertentu juga diterima.

Jelas, "mesin permainan" dari judul tidak merujuk pada deteksi tabrakan atau mekanika fisika / grafik lainnya, tetapi logika yang memutuskan opsi apa yang diberikan pemain terhadap situasi dan kondisinya saat ini.

kaqqao
sumber
1
Apakah pertanyaan ini lebih cocok untuk gamedev ?
Uwe Plonus
2
@Uwe Plonus Dianggap itu, tapi saya tidak percaya begitu. Pertanyaan saya murni konseptual dan tidak ada hubungannya dengan perpustakaan grafis, 3D, dan topik lain yang mendominasi gamedev. Kalau dipikir-pikir, pertanyaan ini tidak ada hubungannya dengan game per se ... tapi tidak yakin bagaimana cara judul yang lebih baik.
kaqqao
Permainan catur dan kartu sangat berbeda dari petualangan.
Deer Hunter
1
Pertanyaan Anda tampaknya mencakup pengembangan sistem pakar juga. Di mana rentang pertanyaan tindak lanjut dan diagnosis yang mungkin akan terbatas dengan setiap jawaban yang dipilih. Mungkin itu yang harus dicari untuk menemukan "input" lagi?
Marjan Venema

Jawaban:

7

Berdasarkan apa yang Anda katakan dalam komentar, beginilah cara saya menanganinya:

Menerapkan cerita sebagai mesin negara yang terbatas, dengan twist. Setiap Negara adalah halaman cerita, dan setiap Transisi adalah tautan dari satu halaman ke halaman lainnya. Tetapi setiap Transisi juga memiliki Ketentuan . Ketentuan bisa nol, dalam hal Transisi selalu muncul sebagai opsi yang tersedia, tetapi jika tidak, maka mereka harus dievaluasi ketika halaman ditampilkan, dan jika evaluasi kembali False, Transisi tidak muncul.

Ada dua cara dasar Anda bisa menerapkan Ketentuan. Yang pertama adalah untuk mengatur mesin skrip lengkap di dalam permainan, dan kemudian Kondisi terlihat seperti return player.inventory.contains(GUN). Ini awalnya lebih rumit untuk diatur, tetapi memungkinkan untuk skrip yang lebih maju.

Yang kedua adalah meng-hard-code kondisi yang mungkin menjadi semacam objek. Itu bisa memiliki RequiredItembidang, dan jika bidang itu memiliki nilai, Anda memeriksa untuk melihat apakah kondisi terpenuhi. Sistem ini lebih mudah diatur. Ini membatasi apa yang dapat Anda lakukan lebih banyak daripada scripting, tetapi jika Anda tidak membutuhkan fleksibilitas yang disediakan oleh mesin skrip, mungkin jauh lebih mudah untuk digunakan.

Mason Wheeler
sumber
1
Kami benar-benar menggunakan sesuatu seperti ini di aplikasi web kami yang sepenuhnya tidak terkait game. Pengguna memiliki sejumlah Negara, dan sejumlah Acara dapat diluncurkan dalam kode, banyak di antaranya telah ditetapkan sebelumnya untuk mengalihkan pengguna dari satu Negara ke Negara lain. Saya pikir untuk kasus-kasus yang dijelaskan dari pertanyaan, memiliki semacam bahasa scripting yang belum sempurna (atau yang lengkap seperti Python / Lua) untuk mendefinisikan kondisi / pemicu akan sangat membantu juga.
Katana314
Saya suka pendekatan ini sedikit. Terima kasih! Akan menyelidikinya lebih lanjut. Apakah Anda tahu perpustakaan yang bermanfaat?
kaqqao
@veggen: Tidak, maaf. Bukan pengembang Java.
Mason Wheeler
@MasonWheeler: Apa pendapat Anda tentang Lazarus ?
Robert Harvey
1
Karena pertanyaan ini mengenai daftar pertanyaan populer hari ini, saya akan melaporkan bahwa saya menerapkan ini persis seperti yang saya katakan di komentar sebelumnya. Saya membuat DSL yang bagus dan mengimplementasikan logika FSM sendiri karena sangat, sangat sederhana. Tidak bisa lebih puas dengan solusinya. @MasonWheeler Terima kasih lagi untuk saran yang bagus!
kaqqao
5

Saya pikir jawabannya ada di judul: Anda memerlukan mesin aturan. Jika Anda berencana untuk menulis aplikasi Anda dengan Java, tentu saja Anda dapat menulis sendiri seperti yang disarankan Gilbert Le Blanc, ATAU Anda mungkin ingin melihat Drools , mesin aturan.

opsi apa yang diberikan pemain terhadap situasi dan kondisinya saat ini

Dengan Drools, atau mesin aturan lainnya, Anda dapat menentukan situasi parameter yang menghasilkan daftar tindakan yang mungkin. Anda dapat menyandikan aturan sederhana yang dimiliki:

  • pemain ada di pageX:

    • pilihan 1: judul: "belok kiri", tindakan: "halaman45"
    • pilihan 2: judul: "ke kanan", tindakan: "halaman56"
    • JIKA pemain memiliki Staf Bola Api MAKA pilihan 3: judul "luncurkan bola api", aksi: "halaman32"
    • JIKA pemain memiliki Keterampilan Persepsi 10 LALU pilihan 4: judul "periksa tulisan di dinding", tindakan: "halaman67"

Yang menarik dengan Drools adalah Anda bisa menyandikan semua aturan dalam file Excel, dan kemudian di awal gim, membuat Drools membaca file itu. Setelah itu semua ada di memori, Anda hanya perlu repot dengan User Interface Anda.

Berikut adalah beberapa sumber daya untuk membantu Anda memulai dengan Drools:

Jalayn
sumber
Secara umum - lihat algoritma Rete yang diterapkan pada mesin aturan apa pun yang Anda sukai.
Deer Hunter
Yup, Drools adalah salah satu hal yang saya mulai dengan. Saya harus menyelidiki sedikit lebih banyak untuk melihat apakah saya dapat mengevaluasi hanya satu paket aturan pada satu waktu, karena itu agak penting dalam kasus saya. Terima kasih!
kaqqao
@veggen senang membantu!
Jalayn
2

Secara konseptual, gim Anda mudah. Dalam psudeocode, akan terlihat seperti ini:

while not at end of adventure story
    display text
    get response

Sekarang, merantai semua teks secara bersamaan sehingga mengalir dari satu tindakan ke tindakan berikutnya adalah bagian yang sulit. Anda bisa menggunakan database relasional. Anda bisa menggunakan pohon.

Agak sulit untuk lebih spesifik tanpa mengetahui bahasa komputer apa yang ingin Anda gunakan. Karena Anda menyebutkan Jawa, saya akan lebih condong ke arah struktur pohon.

Buat kelas respons yang menampung satu respons dan tautan ke kelas teks.

Buat kelas teks yang menampung teks petualangan, dan Daftar respons sebagai contoh kelas respons.

Diedit untuk menjawab komentar:

Anda tidak menghitung apa pun berdasarkan model ini. Dengan menggunakan contoh Anda, pohon akan terlihat seperti ini, di mana T adalah teks dan A adalah pilihan tindakan:

T You stumble on a dead police officer
    A Take the gun
    T You hear footsteps
      A Run away
      A Hide and see who comes
    A Don't touch anything
    T You hear footsteps
      A Run away

Ya, ada beberapa duplikasi teks, tetapi dengan mengikuti rantai, tindakan di masa depan dapat memperhitungkan keputusan masa lalu. Ini pohon keputusan besar.

Gilbert Le Blanc
sumber
Masalah saya menghitung kemungkinan tanggapan. Keputusan masa lalu memengaruhi opsi saat ini. Jadi, jika seorang pemain dihadapkan dengan "Anda menemukan seorang polisi yang sudah mati" memilih "mencuri pistolnya" daripada "tidak menyentuh apa pun", ia kemudian mendapat opsi untuk "menembak pengejar" di samping "melarikan diri seperti "
kaqqao
@veggen: Lihat jawaban yang diperbarui.
Gilbert Le Blanc