Problem



  • Hallo, wenn ich mein Programm starte und die 1 Drücke dann startet er das spiel. Das is auch in Ordnung aber wenn ich z.b. am Anfang die 2 drücke für Spiel Beenden dann steht da er wäre im haus -.-

    Wo liegt denn hier der fehler ? 😕

    #include <iostream>
    using namespace std;
    #pragma hdrstop
    #pragma argsused
    //---------------------------------------------------------------------------
    int gebiete();
    int spielname();
    int haus();
    
    int main()
    {
    
    int spiel = spielname();
           if (spiel==1)
            {
            gebiete();
            }
    
    int was = haus();
    if (was==1)
    {
    haus();
    }
    
    getchar();
    }
    //---------------------------------------------------------------------------
    
    spielname()
    {
    int spiel;
    cout<<"TEST SPIEL\n";
    cout<<"\n";
    cout<<"(1) Spiel Starten\n";
    cout<<"(2) Spiel Beenden\n";
    cin>>spiel;
    return spiel;
    }
    
    gebiete()
    {
    system("CLS");
    int wohin;
    cout<<"Wohin willst du gehen ?\n";
    cout<<"(1) Haus\n";
    cout<<"(2) Wald\n";
    cin>>wohin;
    return wohin;
    getchar();
    }
    
    haus()
    {
    int was;
    cout<<"du bist im haus\n";
    getchar();
    }
    


  • Zeile 22 ist das Problem. Da gehst du ohne eine vorherige Abfrage ins Haus, was denke ich mal gebiete sein sollte, was du aber im if-Zweig in Zeile 17 unsinniger ohne Zuweisung an eine Variable aufrufst.
    Aber du solltest deinen Funktionen mal Rückgabewerte geben. Eigentlich sollte das so gar nicht compilieren.
    Ansonsten solltest du lieber auf "Spiel beenden" also 2 prüfen und dann die Anwendung mit return; beenden und sonst weiterlaufen lassen.

    Greetz



  • Ich hab das Problem jetzt so gelöst.

    #include <iostream>
    using namespace std;
    #pragma hdrstop
    #pragma argsused
    //---------------------------------------------------------------------------
    int gebiete();
    int spielname();
    int haus();
    int wald();
    
    int main()
    {
    
    int spiel = spielname();
           if (spiel==1)
            {
            gebiete();
            }
    
    getchar();
    }
    //---------------------------------------------------------------------------
    
            spielname()
            {
            int spiel;
            cout<<"TEST SPIEL\n";
            cout<<"\n";
            cout<<"(1) Spiel Starten\n";
            cout<<"(2) Spiel Beenden\n";
            cin>>spiel;
            return spiel;
            }
    
    gebiete()
    {
    system("CLS");
    int wohin;
    cout<<"Wohin willst du gehen ?\n";
    cout<<"(1) Haus\n";
    cout<<"(2) Wald\n";
    cin>>wohin;
    
    if (wohin==1)
    haus();
    
    else
    wald();
    
    }
    
    //------------- Orte ----------------------------------------------------------//
            haus()
            {
            system("CLS");
            int verlassen;
            cout<<"Du bist im Haus\n";
            cout<<"(1) Haus Verlassen\n";
            cin>>verlassen;
    
            if (verlassen==1)
            gebiete();
            getchar();
            }
    
    wald()
    {
    system("CLS");
    int verlassen;
    cout<<"Du bist im Wald\n";
    cout<<"(1) Wald Verlassen\n";
    cin>>verlassen;
    
    if (verlassen==1)
    gebiete();
    getchar();
    
    }
    


  • Hab ein neues Problem 😞

    Wenn ich den Wald gehe und denn Wald durchsuche dann kann man ja wählen ob man den gegner angreiffen will oder ob man fliehen will. Immer wenn ich angreiffe und z.b. 1 drücke für schwert oder 2 für bogen dann geht der danach einfach wieder nach gebiete zurück aber ich will ja wissen ob den kampf nun gewonnen habe oder nicht ....

    #include <iostream>
    using namespace std;
    #pragma hdrstop
    #pragma argsused
    //---------------------------------------------------------------------------
    int gebiete();
    int spielname();
    int haus();
    int wald();
    int angriff();
    int gegner_angreiffen();
    
    int main()
    {
    
    int spiel = spielname();
           if (spiel==1)
            {
            gebiete();
            }
    
    getchar();
    }
    //---------------------------------------------------------------------------
    
            spielname()
            {
            int spiel;
            cout<<"TEST SPIEL\n";
            cout<<"\n";
            cout<<"(1) Spiel Starten\n";
            cout<<"(2) Spiel Beenden\n";
            cin>>spiel;
            return spiel;
            }
    
    gebiete()
    {
    system("CLS");
    int wohin;
    cout<<"Wohin willst du gehen ?\n";
    cout<<"(1) Haus\n";
    cout<<"(2) Wald\n";
    cin>>wohin;
    
    if (wohin==1)
    haus();
    
    else
    wald();
    
    return wohin;
    }
    
    //------------- Orte ----------------------------------------------------------//
            haus()
            {
            system("CLS");
            int verlassen;
            cout<<"Du bist im Haus\n";
            cout<<"(1) Haus Verlassen\n";
            cin>>verlassen;
    
            if (verlassen==1)
            gebiete();
            getchar();
            return verlassen;
            }
    
    wald()
    {
    system("CLS");
    int verlassen;
    cout<<"Du bist im Wald\n";
    cout<<"\n";
    cout<<"(1) Wald Verlassen\n";
    cout<<"(2) Wald durchsuchen\n";
    
    cin>>verlassen;
    
    if (verlassen==1)
    gebiete();
    
    else
    angriff();
    
    getchar();
    return verlassen;
    }
    
    //------------- kampf ----------------------------------------------------------//
    
            angriff()
            {
            int auswahl;
            system("CLS");
            cout<<"Du wirst Angegriffen !\n";
            cout<<"(1) Flucht\n";
            cout<<"(2) Gegner Angreiffen !\n";
            cin>>auswahl;
    
            if (auswahl==1)
            gebiete();
    
            else
    
            gegner_angreiffen();
            return auswahl;
            }
    
    gegner_angreiffen()
    {
    system("CLS");
    int user,pc;
    cout<<"Womit willst du den Gegner Angreiffen?\n";
    cout<<"(1) Schwert\n";
    cout<<"(2) Bogen\n";
    
    cin>>user;
    
    srand (time (NULL) );
    
    pc = rand()%2+1;
    
            if (user==1 && pc==1)
    
            cout<<"Unentschieden\n";
            getchar();
            gebiete();
    
    if(user==2 && pc==2)
    
    cout<<"Unentschieden\n";
    getchar();
    gebiete();
    
            if (user==2 && pc==1)
    
            cout<<"Du hast gewonnen\n";
            getchar();
            gebiete();
    
    if (user==1 && pc==2)
    
    cout<<"Du hast verloren\n";
    getchar();
    gebiete();
    
    return user;
    
    }
    


  • Das funktioniert? Welchen Compiler hast Du, wenn ich fragen darf?



  • Mal im Ernst:
    Setz dich mal mit Variablen und Rückgabewerten auseinander.
    Einfach nur von dem wie der Quelltext aussieht, würd ich vermuten, du hast vorher noch nie programmiert. C (denn du benutzt nur C auch wenn du einen C++ Header einbindest) ist definitiv keine einsteigersprache. Apropos C: Das hier gehört nicht nach C++ sondern nach ansi c oder so.
    Achja und wenn du so ein ganzes Spiel programmieren willst, machst du dich tot.
    Stell dir mal vor du hast "nur" 500 landschaften mit jeweils 2 optionen. Und du schreibst jedesmal einen Post hier ins forum weils nich geht. macht 500*2 posts.
    me lawled a lot



  • Das ist kein C++ ?

    Komischer weise habe ich diese Befehle aus C++ Tutorials ........
    Und wer sagt dass das Programm wer weiss wie lang werden soll, das soll kurz bleiben das war nur so für mich.

    Und ich weiss halt noch nicht wie man es anders schreiben kann, ich wollte mal gucken was ich so mit meinem derzeitgen wissen zu stande bringe um es vernüftig zu machen muss ich wohl noch etwas üben 🙄

    Aber so funktioniert es: Ach ja ich Compiliere das mit dem Borland Builder 6

    #include <iostream>
    using namespace std;
    #pragma hdrstop
    #pragma argsused
    //---------------------------------------------------------------------------
    int gebiete();
    int spielname();
    int haus();
    int wald();
    int angriff();
    int gegner_angreiffen();
    
    int main()
    {
    
    int spiel = spielname();
           if (spiel==1)
            {
            gebiete();
            }
    
    getchar();
    }
    //---------------------------------------------------------------------------
    
            spielname()
            {
            int spiel;
            cout<<"TEST SPIEL\n";
            cout<<"\n";
            cout<<"(1) Spiel Starten\n";
            cout<<"(2) Spiel Beenden\n";
            cin>>spiel;
            return spiel;
            }
    
    gebiete()
    {
    system("CLS");
    int wohin;
    cout<<"Wohin willst du gehen ?\n";
    cout<<"(1) Haus\n";
    cout<<"(2) Wald\n";
    cin>>wohin;
    
    if (wohin==1)
    haus();
    
    else
    wald();
    
    return wohin;
    }
    
    //------------- Orte ----------------------------------------------------------//
            haus()
            {
            system("CLS");
            int verlassen;
            cout<<"Du bist im Haus\n";
            cout<<"(1) Haus Verlassen\n";
            cin>>verlassen;
    
            if (verlassen==1)
            gebiete();
            getchar();
            return verlassen;
            }
    
    wald()
    {
    system("CLS");
    int verlassen;
    cout<<"Du bist im Wald\n";
    cout<<"\n";
    cout<<"(1) Wald Verlassen\n";
    cout<<"(2) Wald durchsuchen\n";
    
    cin>>verlassen;
    
    if (verlassen==1)
    gebiete();
    
    else
    angriff();
    
    getchar();
    return verlassen;
    }
    
    //------------- kampf ----------------------------------------------------------//
    
            angriff()
            {
            int auswahl;
            system("CLS");
            cout<<"Du wirst Angegriffen !\n";
            cout<<"(1) Flucht\n";
            cout<<"(2) Gegner Angreiffen !\n";
            cin>>auswahl;
    
            if (auswahl==1)
            gebiete();
    
            else
    
            gegner_angreiffen();
            return auswahl;
            }
    
    gegner_angreiffen()
    {
    system("CLS");
    int user,pc;
    cout<<"Womit willst du den Gegner Angreiffen?\n";
    cout<<"(1) Schwert\n";
    cout<<"(2) Bogen\n";
    
    cin>>user;
    
    srand (time (NULL) );
    
    pc = rand()%2+1;
    
            if (user==1 && pc==1)
            {
            cout<<"Unentschieden\n";
            system("PAUSE");
            gebiete();
            }
    
    if(user==2 && pc==2)
    
    {
    cout<<"Unentschieden\n";
    system("PAUSE");
    gebiete();
    }
    
            if (user==2 && pc==1)
            {
            cout<<"Du hast gewonnen\n";
            system("PAUSE");
            gebiete();
            }
    
    if (user==1 && pc==2)
    {
    cout<<"Du hast verloren\n";
    system("PAUSE");
    gebiete();
    return gebiete();
    }
    
    }
    


  • Du verwendest zwar einen C++ Compiler und auch einige C++ Datentypen (z.B. std::ostream mittels cout), aber deine Programmierweise ist im sog. "C-Style".

    Bevor du jetzt noch weitere Codes dieser Art postest, solltest du dich mal mit OOP und Klassen auseinandersetzen.
    Dann wird dein Code kleiner, übersichtlicher und du kannst ihn dann auch besser erweitern.

    Und deine generelle Codeschreibweise solltest du auch ändern:

    int spielname() // immer Rückgabetyp angeben!!!
                    // (auch wenn einige Compiler noch aus C-Zeiten "int" als Standard nehmen
    {
      // generell jeden Block einrücken (am besten per Tab oder feste Anzahl von Leerzeichen)
      int spiel;
      cout<<"TEST SPIEL\n\n";
      cout<<"(1) Spiel Starten\n";
      cout<<"(2) Spiel Beenden\n";
      cin>>spiel;
      return spiel;
    }
    


  • ok thx


Log in to reply