Textbasiertes Adventure auf Konsolenbasis
-
Guten Tag an alle!
Ich bin Student für Game Development und muss für mein Textadventure eine Steuerung per einzeiliger Texteingabe implementieren.
Dazu gehört:
Command - object - (preposition - object 2).(BSP: 'go north' oder 'open door with key')
Außerdem sollen wir für die Commands und Objekte Bibliotheken anfertigen, in denen die Verben und Substantive drinstehen.
Leider wurde dieses Thema bisher nicht behandelt und wird es aller Vorraussicht auch nicht mehr bis zum Abgabetermin.
Bisher hatte ich alles über hotkeys gelöst, dies wird jedoch nicht bepunktet. Daher bin ich auf Hilfe angewiesen, weil auch die Allwissende Müllhalde mir zu meinem spezifischen Problem eher weniger hilft.
Daher hoffe ich auf eine baldige Antwort!
Ich danke allen hier sehr, die sich um das Problem bemühen!lg
Mischaal
-
Wie ist denn dein Ansatz? Du musst doch irgendeine Idee haben, wie man das realisieren könnte.
-
Die Gramatik ist doch fest vorgegeben,also zerlegst du deine Eingabe an den Leerzeichen in einzelne Wörter.Das 1. ist das Verb das 2. das erste objekt das 3. die Prepostion und die 4. das zweite Objekt.Dann suchst du dir die Objekte aus deinen Dictonary raus übergibst den Gamestate,das Objekt ggf.die Preposition und 2. Objekt an das Verb das die Arbeit verrichtet.
-
Für Ideen für den Aufbau deiner Bibliothek,würde ich mir Inform ansehen
-
Konzept ist doch kinderleicht. In pseudocode
//lies ein
std::getline(...
=>string kommandozeile//wörter trennen
foreach(char in kommandozeile)
{
if(' ')
wort = kommandozeile.subst(alle char zwischen aktuelle pos und letzer pos eines leerzeichens)
=> hast alle 4 wörter//checken ob die eingabe den regeln entspricht
if(wort 1 == eines der möglichen wörter)
aktion = open;
if (wort2 = ein existierendes objekt
object = door3:
if(wort 3...
if(wort 4...
item = key8;//checken ob die kombo möglich ist
if(object.type == door && aktion == open //ok, passt logisch
&& item == object.passenderSchlüssel) //passendes item//führ die aktion aus
player->open(objects.door);