Bir macera oyununda imkansız durumlardan kaçınma


15

Oldukça karmaşık bir kendi seçim macera oyununu yaratmaya çalışıyorum, ancak oyun tasarımına yardımcı olacak bir teknik veya yöntem arıyorum.

Çok dallı bir hikaye olacak ve bazen dallar kendilerine geri dönecek ve büyük eylemleriniz hatırlanacak ve öğeler toplanacak. Örneğin, oyuncu kaleye gitmeden önce bataklığa ve ormana giderse, bir dinozor kemiği aldı, bir tek boynuzlu at öldürdü ve fazladan bir kol yetiştirdi. Bir oyuncu mağaralar ve kript ile kaleye ulaşırsa, bir bisiklet ve garip bir koku aldı. Şimdi kale için bulmacalar geliştirirken, iki imkânsızlığın gerekli olduğu bir durum yaratmak istemiyorum, örneğin - bir devi öldürmek için ekstra bir kol ve koku gerekli.

Olayları ve öğeleri çok dikkatli bir şekilde belgelemekten başka bir süreç, bir elektronik tabloda kullanabileceğim bir teknik veya bana yardımcı olabilecek bir yazılım parçası var mı?

Yanıtlar:


11

Kulağa yönlendirilmiş bir grafik problemi gibi geliyor.

Başlangıçta, hikayedeki her bir dallanma için o anda sahip olduğunuz öğeleri kaydedin ve ardından grafiği dallayın. Oradan her dalı takip edin ve aynısını yapın, başka bir şubeye ulaştığınızda mevcut öğelerinizi kaydedin ve grafiği dallayın. Bu, çok sayıda yinelenen düğüm içeren oldukça yoğun bir grafikle sonuçlanacaktır (ancak her düğüm farklı bir grafik dizisinden oraya ulaşmıştır), ancak döngü almamalısınız.

Sonunda, hikayenizdeki herhangi bir noktada sahip olabileceğiniz tüm öğelerin ve oraya ulaşmak için mümkün olan tüm yolların bir grafiğine sahip olmalısınız.

Şimdi, tamamlanmış grafiğinizle: X + Y + Z öğeleri gerektiren sorunlarınızın her biri için bu sorunu içeren tüm düğümleri bulun ve kaydedilen öğelerin bu koşulu karşılayıp karşılamadığını görün. Bir arıza varsa, o sorunu çözmek için uygun öğeler olmadan sizi oraya götüren tüm kararları bulmak için grafiği geriye doğru yürüyün.

Herhangi bir şansla, orijinal tasarımınız en azından kavramsal olarak zaten bu şekilde düzenlenmiştir, bu nedenle kod gerçeği yansıtmalı ve doğrulaması kolay olmalıdır.

Büyük bir oyun oluşturuyorsanız, grafik aramalarının işlem süresi biraz ağır olabilir, bu yüzden bunu çalıştırmak biraz zaman alabilecek bir yardımcı program gibi oluşturun ve sonuçları kullanmanız için bir rapora çıktı.


bu bir araç geliştirmek anlamına gelir. Son çare koyalım.
Ali1S232

6
Araç ya kendi beyinleriniz, kayıt tutma ve hafıza kapasiteniz olacak ya da yorulmayacak ve bir aksaklığı kaçırmayacak otomatik bir şey olacaktır =) Sanırım oyununuzun ne kadar büyük olacağına ve harcanan zamanın buna değip değmeyeceğine karar vermek için aynı motordan bir tane daha inşa edin.
Patrick Hughes

Bunu yapmanın en iyi yolu, yukarıdan aşağıya bir bağımlılık ağacı oluşturmak (geri gitmek) olabilir ve ağaçtaki iki öğe aynı bağımlılığı paylaşıyorsa (ve bağımlılık aralarında bir seçim yapılmasını gerektiriyorsa), bir ihlaliniz vardır.
deceleratedcaviar

0

bu garip bir yanıt gibi görünebilir, ancak derleyiciler kullanarak imkansız olayları kolayca kontrol edebilirsiniz (örneğin c ++)! nasıl olduğunu açıklayayım: her aşama için tam olarak bir başlık dosyanız var. ve oyun main.cppdosyada bitiyor . Eğer gitmek verebildiği yerlerde stage aiçin stage b, sadece dosya eklemek zorunda ilgilidir stage aiçinde stage b. bir aşamada yeni bir öğe aldığınızda, o öğe için bir değer tanımlarsınız. bir eşyayı kaybettiğinizde veya kullandığınızda undef yapmanız yeterlidir. sonunda her aşamada, o aşamada ihtiyaç duyulan öğeler için tanımlanmış tüm değerleri kullanmanız yeterlidir. kodda bu nasıl kullanılacağını gösteren bir örnek:

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()
{
}

gerçekten kullanılan önce bazı değişiklikler gerekebilir, ancak sanırım böyle bir kod oluşturabilirsiniz. önerdiğim yaklaşım yerine kalıtım ve her aşama için sınıfları da kullanabilirsiniz. Bunların dışında bir araç geliştirmeniz gerektiğini düşünüyorum.


2
derleyicinin gerçek bir kötüye kullanımı!
Ali1S232

3
İlginç ama oldukça kırılgan olurdu ve sadece hikayemde nesne / olay / bölüm başına bir sınıf olsaydı işe yarardı. Ben daha xml veya bir şey okuma veri odaklı bir yaklaşım için gidiyordu. Yine de öneriniz için teşekkürler.
DanDan

3
Bir görev her değiştiğinde yeniden derlemeyi zorlamak için iyi bir fikir değildir, ayrıca bu, son kullanıcılara (örneğin DLC) veya bir sunucudan çalıştırıldığında ve indirmeleri zorlamadan düzeltmeler uygulandığında veri güncellemelerine izin vermez.
Patrick Hughes

2
bu kod örneği, yayınlanacak kodla ilgili bir şey değildir ve bu kod gerçekten hiçbir şey yapmaz. sadece hikayenizin ve görevlerinizin geçerli olup olmadığını kontrol ediyor. (eğer değilse, sadece bir derleme hatası alırsınız, aksi takdirde bu görev ağacını oyununuza uygulayabilirsiniz!
Ali1S232

Anlıyorum, yanlış yorumladım. Bir kişinin bu kodun gerçek verileri yansıttığından emin olmak için daha fazla zaman harcayabileceğinden şüpheleniyorum.
Patrick Hughes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.