Hur använda klasser för att strukturera flervalshistoria?

Permalänk
Avstängd

Hur använda klasser för att strukturera flervalshistoria?

Tänkte knåpa ihop en historia av något slag för att ha ett projekt att pyssla med. I C# ska tilläggas.
Föreställer mig en historia som primärt består av ja- och nejfrågor, och som kan förgrenas till ett flertal slut om man vill det.

Jag har en grundidé om hur jag kan gå tillväga genom att bara använda ifsatser, och dela upp det i moduler med hjälp av metoder. Väldigt basic, med viss risk för att det blir väldigt plottrigt med alla nested if statements.
Men någon tipsade mig om att jag hellre skulle använda klasser. Jag är inte riktigt införstådd på hur man använder klasser än utöver det allra mest grundläggande, men jag kan inte riktigt föreställa mig hur det skulle gå till heller.
Någon som har tips om hur jag kan gå tillväga?

Den enda funktionen jag egentligen tycker är jätteviktig är att jag bör kunna hoppa till vilket alternativ som helst från vilken del som helst i historien. Skulle gå att lösa med en metod för varje förgrening, men det blir ju helt makalöst plottrigt.
Sen underlättar det väl också om jag på något sätt kan spåra alla val som fortfarande inte har ifyllda alternativ.

Hur kan jag gå tillväga?

Permalänk
Medlem

Här är lite pseudokod för ett väldigt enkelt frågespel som kanske kan ge dig lite inspiration:

// Klass för ett svarsalternativ: class Choice { string label; // Texten för svarsalternativet. int nextQuestion; // Indexet på nästa fråga om detta alternativ väljs. } // Klass för en fråga: class Question { string message; // Texten för frågan. Choice choices[]; // En lista med svarsalternativ. void print() { // Skriver ut frågan och svarsalternativen. } int getAnswerIndex() { // Läser in användarens svar och returnerar indexet för nästa fråga. // (d.v.s. choices[användarens val].nextQuestion). } } main() { Question questions[] = { /*0*/ Question("Gillar du fisk?", {Choice("Ja", 1), Choice("Nej", 2)}), /*1*/ Question("Kul, det gör jag också!", {Choice("Slut", -1)}), /*2*/ Question("Varför gillar du inte fisk?", {Choice("Fiskar är läskiga", 3), Choice("Fisk? Jag tyckte du sa smisk.", 0)}), /*3*/ Question("Ok, det var ju synd.", {Choice("Slut", -1)}) }; // Börja på fråga 0. int current_index = 0; // Kör så länge som indexet är större än 0. while(current_index >= 0) { // Skriv ut den nuvarande frågan. questions[current_index].print(); // Gå till nästa fråga baserat på vad användaren valde för alternativ. current_index = questions[current_index].getAnswerIndex(); } }