Menghindari keadaan mustahil dalam game petualangan

15

Saya mencari cara untuk menciptakan gaya petualangan permainan sendiri yang cukup rumit, tetapi saya sedang mencari teknik atau metode untuk membantu dengan desain game.

Ini akan menjadi kisah multi-cabang, dan kadang-kadang cabang-cabang itu akan dilipat kembali ke dalam diri mereka sendiri, dan tindakan utama Anda akan diingat dan barang-barang akan dikumpulkan. Misalnya, jika pemain pergi ke rawa dan hutan sebelum pergi ke kastil ia telah mengambil tulang dinosaurus, membunuh seekor unicorn dan menumbuhkan lengan tambahan. Jika seorang pemain sampai ke kastil melalui gua dan ruang bawah tanah dia telah mengambil sepeda dan bau aneh. Sekarang ketika mengembangkan teka-teki untuk kastil saya tidak ingin menciptakan situasi di mana dua ketidakmungkinan diperlukan, misalnya - lengan tambahan dan bau diperlukan untuk membunuh raksasa.

Selain mendokumentasikan peristiwa dan barang dengan sangat hati-hati, adakah proses, teknik yang dapat saya gunakan dalam spreadsheet atau perangkat lunak yang dapat membantu saya?

DanDan
sumber

Jawaban:

11

Kedengarannya seperti masalah grafik terarah.

Mulai dari awal, untuk setiap percabangan dalam cerita, catat item-item yang saat ini Anda miliki dan kemudian cabut grafiknya. Dari sana ikuti setiap cabang dan lakukan hal yang sama, setelah Anda sampai ke cabang lain, catat item Anda saat ini dan cabang grafik. Ini akan berakhir dengan grafik yang cukup padat dengan banyak node yang terduplikasi (tetapi setiap node sampai di sana dari urutan grafik yang berbeda) tetapi Anda seharusnya tidak mendapatkan loop.

Pada akhirnya Anda harus memiliki grafik dari semua item yang dapat Anda miliki pada titik tertentu dalam cerita Anda dan dari semua cara yang mungkin untuk sampai ke sana.

Sekarang, dengan grafik Anda yang lengkap: untuk setiap masalah Anda yang membutuhkan item X + Y + Z temukan semua node yang memiliki masalah itu dan lihat apakah item yang direkam dapat memenuhi kondisi itu. Jika ada kegagalan cukup naik kembali grafik untuk menemukan semua keputusan yang membuat Anda di sana tanpa item yang tepat untuk menyelesaikan masalah itu.

Dengan sedikit keberuntungan desain asli Anda sudah ditata seperti ini, setidaknya secara konseptual, sehingga kode harus mencerminkan kenyataan dan mudah diverifikasi.

Waktu pemrosesan pencarian grafik mungkin agak berat jika Anda membangun gim besar, jadi buatlah ini seperti utilitas yang dapat memakan waktu cukup lama untuk dijalankan dan hasilkan hasilnya menjadi laporan untuk Anda gunakan.

Patrick Hughes
sumber
itu berarti mengembangkan alat. Saya katakan itu sebagai pilihan terakhir.
Ali1S232
6
Alat ini akan menjadi otak Anda sendiri, penyimpanan catatan dan kapasitas memori atau itu akan menjadi sesuatu yang otomatis yang tidak akan lelah dan melewatkan kesalahan =) Saya kira itu tergantung pada seberapa besar permainan Anda akan terjadi dan apakah Anda akan pernah membangun yang lain dari mesin yang sama, untuk memutuskan apakah waktu yang dihabiskan sepadan atau tidak.
Patrick Hughes
Cara terbaik untuk melakukan ini mungkin dengan membangun pohon ketergantungan dari atas ke bawah (mundur), dan jika dua item di pohon berbagi ketergantungan yang sama (dan ketergantungan membutuhkan pilihan di antara mereka), maka Anda memiliki pelanggaran.
decaviatedcaviar
0

ini mungkin tampak jawaban yang aneh tetapi Anda dapat dengan mudah memeriksa acara yang tidak mungkin menggunakan kompiler (misalnya c ++)! izinkan saya menjelaskan caranya: Anda memiliki tepat satu file header untuk setiap tahap. dan game berakhir di main.cppfile. setiap kali Anda dapat pergi dari stage ake stage b, Anda hanya perlu menyertakan file berhubungan dengan stage adi stage b. setiap kali Anda mendapatkan item baru dalam suatu tahap, Anda cukup menentukan nilai untuk item itu. setiap kali Anda kehilangan atau menggunakan item, Anda hanya perlu membatalkannya. pada akhirnya di setiap tahap Anda hanya perlu menggunakan semua nilai yang ditentukan untuk item yang dibutuhkan di tahap itu. di sini adalah contoh cara menggunakan ini dalam kode:

ah

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

walaupun mungkin perlu beberapa perubahan sebelum benar-benar digunakan tetapi saya kira Anda dapat membuat beberapa kode seperti ini. Anda juga dapat menggunakan warisan dan menggunakan kelas untuk setiap tahap, bukan pendekatan yang saya sarankan. selain ini saya pikir Anda harus mengembangkan alat sendiri.

Ali1S232
sumber
2
itu penyalahgunaan kompiler!
Ali1S232
3
Ini menarik tetapi akan sangat rapuh dan hanya berfungsi jika saya memiliki kelas per objek / acara / bagian dalam cerita saya. Saya akan menggunakan lebih banyak pendekatan berbasis data, membaca dari xml atau sesuatu. Terima kasih atas saran Anda.
DanDan
3
Bukan ide yang bagus untuk memaksakan kompilasi ulang setiap kali perubahan quest, plus ini tidak akan memungkinkan pembaruan data untuk pengguna akhir (DLC misalnya), atau jika dijalankan dari server dan menerapkan perbaikan tanpa memaksa unduhan.
Patrick Hughes
2
contoh kode itu bukan hal yang terkait dengan kode yang akan dirilis, dan kode itu tidak benar-benar melakukan apa pun. itu hanya memeriksa apakah alur cerita dan pencarian Anda valid atau tidak. (jika tidak, Anda hanya mendapatkan kesalahan kompilasi, jika tidak, Anda dapat mengimplementasikan pohon pencarian itu di game Anda!
Ali1S232
Oh saya mengerti, saya salah menafsirkan. Saya menduga bahwa seseorang dapat menghabiskan lebih banyak waktu untuk memastikan bahwa kode ini mencerminkan data aktual daripada kesalahan logika pencarian debug yang disimpan, itulah penilaian yang harus dilakukan pembuat game.
Patrick Hughes