Saya merancang sebuah game RPG yang memiliki banyak alur cerita, artinya, tergantung pada pilihan pengguna beberapa hal mungkin atau mungkin tidak terjadi, Anda dapat mencapai hal yang sama dalam beberapa cara, akhir ceritanya bisa berbeda dan seterusnya.
Saya menerapkan mesin pengambilan keputusan sederhana, yang berfungsi dengan baik tetapi memiliki satu cacat besar, pada saat Anda mengambil keputusan, kisah tersebut segera dipengaruhi oleh keputusan Anda, yang berarti bahwa Anda tidak dapat mengambil keputusan yang akan mempengaruhi Anda di masa depan yang jauh . Ini karena ceritanya terbuka seperti cabang dalam struktur pohon, dan selalu perlu tahu simpul mana yang berikutnya. Di bawah tenda, keputusan diimplementasikan menggunakan antrian: setiap simpul tahu tentang simpul sebelumnya dan simpul berikutnya (atau jika itu adalah simpul keputusan yang menunggu input pengguna untuk mengatur simpul berikutnya)
Saya melihat banyak permainan yang memiliki mesin keputusan yang kompleks, dan saya bertanya-tanya, bagaimana mereka dibuat? Apakah ada desain khusus yang membuat semuanya sangat mudah? Adakah yang melakukan sesuatu yang serupa dan dapat memberi saya petunjuk tentang cara mengatasi ini?
PEMBARUAN 1:
Aspek penting adalah mengatur agar kode cerita tetap independen, sehingga dapat dimanipulasi dari file eksternal. Saya berencana untuk menggunakan ini sebagai mesin sehingga bahkan pilihan yang mungkin harus datang dari file eksternal. Kode harus sepenuhnya abstrak.
Juga, saya tertarik pada solusi desain, cara yang bagus untuk melakukannya, bagaimana orang lain melakukannya atau melakukannya.
sumber
if (isTree)
atau menyimpanisTree
global var karena ceritanya mungkin atau mungkin tidak memiliki pilihan di dalamnya. Tau apa yang saya maksud? Ini lebih seperti mesin pilihan yang akan menyajikan banyak cerita.isTree=true
, tetapi kemudian, dia melakukan sesuatu yang lain, seperti, melawan teman sekolah, yang sebaliknya pergi dan memotong pohonnya ketika pohon itu masih muda karena dia mendapatkan pantatnya ditendang. Sekarang, kami memiliki 2 variabel yang mempengaruhi keberadaan pohonisTree==true' and
didFightBrat == false`. Tau apa yang saya maksud? Dan rantai itu bisa berlangsung selamanya, keberadaan pohon itu dapat dipengaruhi oleh sejumlah faktor yang tidak diketahui. Tau apa yang saya maksud?Jawaban:
Anda juga bisa menggeneralisasi antrian menjadi grafik asiklik terarah (DAG). Anda dapat membaca tentang ini di Wikipedia. Pada dasarnya, setiap node dapat memiliki satu atau lebih node induk yang "tergantung". Siklus tidak diizinkan, yaitu jika A bergantung pada B, B tidak dapat bergantung pada A (secara langsung atau melalui rantai tidak langsung dari node lain).
Setiap node dalam keadaan "aktif" atau "tidak aktif", dan hanya diperbolehkan untuk menjadi aktif jika semua orang tuanya sudah aktif. Struktur grafik (simpul apa yang ada di sana dan bagaimana mereka terhubung) adalah bagian dari data permainan, tetapi keadaan aktif / tidak aktif adalah bagian dari data simpanan pemain.
Dengan begitu, Anda dapat memodelkan hal-hal seperti: ketika Anda menanam pohon, Anda menandai tugas "ditanamTree" sebagai aktif; kemudian, di kemudian hari dalam permainan, tugas lain "treeGrown" menamai "ditanam Pohon" dan beberapa simpul lainnya (bagian dari cerita) sebagai orang tuanya. Kemudian, "treeGrown" hanya aktif ketika pemain mencapai titik itu dalam cerita, dan juga "ditanamTree" aktif.
Anda dapat menyertakan fitur lain seperti simpul yang aktif jika salah satu dari orang tuanya mengaktifkan, atau simpul yang diaktifkan oleh satu orangtua dan dinonaktifkan oleh yang lain, dan seterusnya. Ini adalah kerangka kerja yang cukup umum untuk membuat cerita dengan banyak utas yang saling tergantung.
sumber
Dari apa yang saya mengerti, apa yang Anda inginkan bukan hanya mesin pengambilan keputusan, tetapi juga mesin aturan. Untuk setiap keputusan, Anda menjalankan sebagian aturan yang ditentukan oleh keputusan itu. Eksekusi aturan-aturan itu seringkali tergantung pada keadaan entitas tertentu seperti contoh pohon Anda.
Pada dasarnya, ketika pemain Anda membuat keputusan, Anda mencari keputusan itu, melaksanakan aturan, dan kemudian memberikan set keputusan berikutnya yang tersedia seperti biasa. Namun, aturan Anda bersifat dinamis karena beberapa di antaranya hanya akan dijalankan berdasarkan aturan lain yang sudah dijalankan.
Beberapa lagi di Wikipedia .
Dari judulnya When To Use Rule Engine (penekanan adalah milikku):
Satu hal yang perlu diperhatikan adalah bahwa kadang-kadang mesin aturan paling baik diimplementasikan menggunakan domain khusus "bahasa" yang disederhanakan, atau sesuatu seperti YAML. Saya tidak akan menyarankan XML.
sumber
Anda harus mempertimbangkan bahwa suatu peristiwa tidak murni berdasarkan keputusan pengguna. Seperti yang Anda catat, beberapa peristiwa harus ditambahkan jika ketika serangkaian keputusan diambil dan kemudian sesuatu yang lain ditambahkan (seperti dua hari setelahnya).
Apa yang saya pikir Anda butuhkan adalah cara untuk memodelkan acara dan cara memicunya. Sementara yang pertama lebih terikat pada kasus spesifik Anda, yang terakhir dapat dimodelkan oleh mesin negara hierarkis (HSM) yang secara langsung atau tidak langsung memicu acara Anda.
Perlu diingat bahwa mesin negara menderita Kutukan dimensi yang hanya dikurangi oleh struktur hierarkis. Segera Anda akan memahami bahwa Anda perlu memodelkan makna status yang kompleks menggunakan HMS tetapi juga menyediakan cara untuk menanyakannya.
Dalam skenario ini Anda memiliki acara dasar (keputusan pengguna, waktu, perubahan cuaca dan sebagainya) yang diproses oleh HSM dan oleh panggilan balik acara dasar. HSM menyediakan model untuk "memori" dan panggilan balik menyediakan cara untuk menggambarkan bagaimana memori itu harus digunakan untuk menghitung konsekuensi dari urutan keputusan / peristiwa eksternal.
Anda juga dapat menggunakan kamus (atau beberapa struktur koleksi lain) HMS, satu untuk setiap "aspek" status yang harus Anda hitung. Contohnya adalah menggunakan acara HMS terkait dan satu untuk keputusan yang diambil panggilan balik untuk memicu peristiwa.
Semua infrastruktur ini melayani tujuan untuk meniru perilaku Master Penjara Bawah Tanah manusia: ia umumnya mengambil catatan mental tentang situasi saat ini (HMS ["eksternal"]) karena keputusan pemain dan kondisi lingkungan; ketika sesuatu menambahkan, ia dapat mengambil keputusan menggunakan catatan mentalnya dan merekam beberapa status strategi internal juga (HSM ["internal"]) untuk menghindari bereaksi dengan cara yang sama jika beberapa situasi menambahkan misalnya.
sumber