Text-Adventure



  • Hallo, ja ich denke so was habt ihr schon des Öfteren gelesen. Ein Anfänger der ein Text Adventure Programmieren will. Es ist nur gerade so das ich mir etwas wissen angeeignet und unbedingt was Produktives damit anstellen will.

    Nachdem ich ein Menü gemacht habe, scheitere ich schon an meinem ersten Problem. Soll ich das komplette Abenteuer in die main Funktion schreiben? Ich denke nicht, es würde zu unübersichtlich werden aber ich kenne keinen Befehl wo er eine andere cpp Datei lädt. Google hat mir auch nicht weiter geholfen, ich glaube aber dazu habe ich auch falsch gesucht.

    Für jede Idee oder Hilfe bin ich sehr dankbar.
    Hier noch mein Code (nichts besonderes)

    #include <iostream>
    #include <windows.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    using namespace std;
    
    			int main(int argc, char** argv) {
    
    			char auswahl = 0;
    
    			do{
    
    			cout <<" ____  ____  ____    __   __    __    ___  _  _  ____ "<< endl;
    			cout <<"(  _ )(_  _)( ___)  (  )_/  )  /__)  / __)( )/ )( ___)"<< endl;
    			cout <<" )(_) )_)(_  )__)    )     (  /(__)) )__ ) )  (  )__) "<< endl;
    			cout <<"(____/(____)(____)  (_/)_/)_)(__)(__)(___/(_))_)(____)"<< endl;
    
    			cout << "Das Scharze Auge - Die todes Maske" << endl
    			     << "1 : Neues Spiel" << endl
    			     << "2 : Spiel Laden" << endl
    				 << "3 : Beenden" << endl;
    
    		 	cin >> auswahl;
    
    		 	switch (auswahl){
    		 		case '1':
    		 			system("cls");
    		 			cout << "Spiel wird geladen" << endl; // [b]Hier soll er eine andere cpp Datei laden.[/b]
    		 			Sleep (1000);
    		 			system("cls");
    		 			break;
    
    		 		case '2':
    		 			system("cls");
    		 			cout << "Noch nicht verfügbar" << endl;
    		 			Sleep (1000);
    		 			system("cls");
    		 			break;
    
    		 		case '3':
    		 			system("cls");
    		 			cout << "Auf Wiedersehen" << endl;
    		 			Sleep (1000);
    		 			system("cls");
    		 			return 0;
    		 	}
    		 }while (auswahl != 0);
    
    }
    


  • Hi,

    du solltest ganz dringend ein vernünftiges Buch über C++ lesen. Der C++ Primer von Lippmann et.al. ist zu empfehlen.
    Dort lernst du die gängigen Konzepte, wie und warum man -- schon richtig vermutet -- nicht alles in die main-Funktion schreibt, im Gegenteil.

    Ein gutes Buch hilft dir auch zu verstehen, wie man ein Programm strukturieren kann, d.h. Code in verschiedene Übersetzungseinheiten (aka. "cpp-Datei") aufteilt.
    Ohne eine solide Führung wird das nichts.

    Dazu gibt es in C++ keine "Befehle", sondern nur Keywords/Schlüsselwörter (wenige) und Bibliotheksfunktionen/-methoden (viele). Diese ganzen Dinge und Unterschiede lernt man aber ebenfalls mit einem guten Buch.

    Lass die Finger von Youtube-Tutorials o.ä. Da ist meist nur Unfug drin.

    Für die Suche nach Büchern gibt es hier eine gute Liste:
    http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

    Ansonsten: Viel Erfolg und Spaß beim Programmierenlernen! Es lohnt sich! 😉



  • Ich finde, du solltest dir ein bisschen eine C++ Grundlage schaffen, aber wenn du dann gleich dein erstes Terminal-Game bauen willst, dann nur zu. So lernt man am schnellsten.

    Zu deiner Frage, der Ablauf eines Programs sollte so sein, dass es für dich in so einer Funktion wie main() nicht zu kompliziert wird und alles schön überschaubar bleibt. Deine main könnte wie folgt aussehen:

    int main()
    {
      zeigeTitel ();
    
      bool quit = false;
      while (!quit)
      {
        int result = zeigeMenu ();
        switch(result)
        {
          case 0:
            quit = true;
            break;
          case 1:
            beginneSpiel ();
            break;
        }
      }
    
      return 0;
    }
    

    Danach kümmerst du dich um die Funktionen, die es noch nicht gibt. zeigeTitel () z.B. wird eine simple Ausgabe. zeigeMenu () macht eine Ausgabe und frage die Eingabe ab. Wenn das Spiel gestartet werden soll gibt sie 1 zurück, ansonsten 0 für quit. Somit wird die zeigeMenu () Funktion auch nicht so schwer. Würdest du alles in die main packen, wäre es in Kürze unübersichtlich.

    Aber bevor du im Wald landest mit zig-Compilefehlern, schau nach, was Deklaration / Header-Files, Definition / Source-Files sind. Wenn du dann weißt wie cout und cin funktioniert, kannst dein Game bauen.
    Viel Spass!



  • Hi,
    da ich das grad mal so sehe. Sinnvoll wäre, so mach ich das immer, ein default einzufügen, wenn man keine extra IF Anweisung einbauen will. Also so ein Switch Konstrukt:
    [code="cpp"]
    // Switch Case
    switch(*Deine Variable*) {
    case 1:
    /* CODE */
    break;
    case 2:
    /* Blablabla 😃 */
    break;
    default:
    cout << "Anwendung wurde nicht erfüllt" << endl;
    break;
    }



  • @TS

    Willst du jetzt ein Textadventure programmieren oder eine Textadventure Engine?

    Wenn du nur ein Spiel entwickeln willst, dann nimm dafür eine fertige Textadventure Engine.

    Wenn du eine Engine entwickeln willst, dann kannst du mit C++ weitermachen.
    Und Text kommt auf keinen Fall in den Quellcode, sondern wird in einen Textdatei ausgelagert, weil man dann Änderungen am Text vornehmen kann ohne ohne den Quellcode neucompilieren zu müssen.
    Das wird insbesondere dann wichtig, wenn du dein Adventure auf mehrere Sprachen veröffentlichen willst.

    Deine Engine sollte also Abstrakt arbeiten können.
    Guck dir an, wie man in C++ Dateien öffnet und lesen kann. Dieses Wissen brauchst du hier.
    Auch guck dir an, wie du dynamisch Speicher reservieren kannst, das brauchst du hier auch.

    Sinnvoll wäre es auch, wenn du dir Gedanken machst, wie du ein Quest beschreibst.
    Das würde ich nämlich NICHT in C++ realisieren, sondern in einer beschreibenden Scriptsprache und mit deiner C++ Engine interpretiert du das dann dann und setzt sie um.

    Denn auch hier solltest du die Quests am Ende ohne Compiler umsetzen können.



  • DrCubeMan schrieb:

    Hallo, ja ich denke so was habt ihr schon des Öfteren gelesen. Ein Anfänger der ein Text Adventure Programmieren will.

    Ne, so was liest man selten die meisten Anfänger wollen einen 3D-Egoshooter programmieren und bei der Umsetzung dafür gleich noch nebenher ihre eigene Engine "so wie die Cryengine, nur besser" programmieren.

    Auskenner schrieb:

    Willst du jetzt ein Textadventure programmieren oder eine Textadventure Engine?

    Er will C++ lernen und das mit etwas produktiven verbinden.

    Auskenner schrieb:

    Und Text kommt auf keinen Fall in den Quellcode, sondern wird in einen Textdatei ausgelagert, weil man dann Änderungen am Text vornehmen kann ohne ohne den Quellcode neucompilieren zu müssen. [...] Deine Engine sollte also Abstrakt arbeiten können.

    Make games not engines! Bzw. in deinem Fall lern C++, bevor du dir über irgendwas was "Auskenner" geschrieben hat Gedanken machst. Soll heißen den Text ruhig in den Quellcode, nimm keine Text-Adventure Engine, sondern programmier einfach dein Spiel (natürlich gut und logisch strukturiert, auf Quellcode Ebene).

    Auskenner schrieb:

    Das würde ich nämlich NICHT in C++ realisieren, sondern in einer beschreibenden Scriptsprache und mit deiner C++ Engine interpretiert du das dann dann und setzt sie um.

    Ja klar, hier will jemand sich unter anderem vertiefende Kenntinisse in C++ aneignen und du rätst ihm dazu einen Interpreter für eine Scriptsprache zu schreiben.

    @DrCubeMan: Wohnst du in einer größeren Stadt? Dann würd ich einfach mal in die Zentralbibliothek fahren und dort nach C++ Büchern schauen, die haben meistens mehrere zur Auswahl (leider auch die schlechten).

    floorball



  • floorball schrieb:

    Make games not engines!

    Deswegen sagte ich ihm, dass er eine fertige Engine nehmen soll, wenn es ihm nur darum geht ein Spiel zu entwickeln.

    Bzw. in deinem Fall lern C++, bevor du dir über irgendwas was "Auskenner" geschrieben hat Gedanken machst. Soll heißen den Text ruhig in den Quellcode, nimm keine Text-Adventure Engine, sondern programmier einfach dein Spiel (natürlich gut und logisch strukturiert, auf Quellcode Ebene).

    Gut und logisch strukturiert wäre eine Engine.
    Und warum sollte man beim Programmieren einer Textengine kein C++ lernen können?
    Wenn er C++ lernen will, dann ist eine Textengine keine schlechte wahl, denn dadurch lernt er das auch unter einem größeren Zusammenhang zu verstehen und eine Textengine ist noch einigermaßen Überschaubar, im Vergleich zu einer 3d Engine.
    Früher hat man Textengines in wenigen Wochen programmiert, das geht heute immer noch und dürfte heute sogar einfacher sein, da man nicht mehr so mit den Resourcen sparen muss.

    Ja klar, hier will jemand sich unter anderem vertiefende Kenntinisse in C++ aneignen und du rätst ihm dazu einen Interpreter für eine Scriptsprache zu schreiben.

    Warum auch nicht?
    So komplex muss der ja nicht sein, im Prinzip muss er wissen wann welcher Text gepostet werden soll, dafür braucht es eine Questlogik und die kann man auch mit einfachen mitteln umsetzen und von der C++ Engine dann auswerten lassen.

    @DrCubeMan: Wohnst du in einer größeren Stadt? Dann würd ich einfach mal in die Zentralbibliothek fahren und dort nach C++ Büchern schauen, die haben meistens mehrere zur Auswahl (leider auch die schlechten).

    Die haben vor allem die alten Schinken.
    Die 50 € kann man in ein ordentliches Buch investieren und hat das Buch dann auch immer genau dann, wenn man es braucht.
    Wer etwas sparen will, der findet die auch auf dem Gebrauchtmarkt.


Log in to reply