Zahlenratespiel, Hilfe mit Zusatzfunktionen



  • Hallo zusammen,
    Habe neulich mit C++ angefangen. Nun möchte ich mein Programm "Zahlenratespiel" zu ende bringen. Habe schon es zum Laufen gebracht aber möchte noch ein paar Funktion haben, und zwar:

    1. Am ende des Programms soll abgefragt werden, ob ich weiter spielen will.
    2. Die Versuche sollen gezählt werden
    3. Soll die Möglichkeit bestehen, die Anzahl der Versuche zu bestimmen.
      Ich habe gar keine Ahnung wie ich das hinkriegen kann, obwohl ich schon viel recherchiert habe .
      Ich danke euch im Voraus
      Hier ist die Quellcode:
    #include <iostream>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Tip, ja, Sikret, Versuch = 0;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        srand (time(NULL));
        Sikret = rand() % Max_Zahl + 1;
    
    
        while (Tip != Sikret ) {
    
        cout << "\nGib deinen Tip ein: ";
        cin >> Tip;
            if (Tip > Sikret){
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
            }
            else if (Tip < Sikret) {
                cout << "\nMeine Zahl ist groesser \n";
                continue;
            }
            else {
                cout << "\nGratulation! Du hast die Zahl erraten!\n";
    
            }
    
        }
        return 0;
    }
    
    


    1. Wenn ich weiter spielen will, brauch ich eine Schleife.


  • Allgemeines zu deinem Code:

    • deklariere/definiere Variablen dort, wo sie gebraucht werden. Die Zeiten von C89 in denen man Variablen am Anfang eines Blocks deklarieren musste ist schon lange vorbei.
    • Die C-Standard-Header <stdlib.h>, <stdio.h> und <time.h> heißen in C++ <cstdlib>, <cstdio>und<ctime>und die darin deklarierten Funktionen liegen im Namensraumstd.<stdio.h>bzw<cstdio>` braucht dein Code nicht.
    • return 0; am Ende von main() ist überflüssig. Das passiert automagisch.

    @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    • Am ende des Programms soll abgefragt werden, ob ich weiter spielen will.

    do ... while()-Schleife um den Code der für 1 Spiel zuständig ist, nahe dem Ende dieser Schleife den Benutzer seine Wahl treffen lassen und in der Schleifenbedingung Prüfen.

    • Die Versuche sollen gezählt werden.

    Zusätzliche Variable einführen, beim Beginn eines Spiels mit 0 initialisieren und nach jedem Rateversuch inkrementieren.

    • Soll die Möglichkeit bestehen, die Anzahl der Versuche zu bestimmen.

    Das klingt nach genau demselben wie obiger Punkt.


  • Gesperrt

    @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Am ende des Programms soll abgefragt werden, ob ich weiter spielen will.
    Die Versuche sollen gezählt werden
    Soll die Möglichkeit bestehen, die Anzahl der Versuche zu bestimmen.

    • Bisherigen Code in eine Funktion auslagern.
    • Bei "while (Tip != Sikret )" Anzahl der Schleifendurchläufe mitzählen.
    • Diesen Wert dann an die Main zurückgeben, wenn eine Runde durch ist.

    Das schonmal als Anfang. 🐱



  • @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Bei "while (Tip != Sikret )" Anzahl der Schleifendurchläufe mitzählen

    Die Frage ist wie man das umsetzt. Meistens weiß ich theoretisch, wie man das macht, aber praktisch ...

    @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Diesen Wert dann an die Main zurückgeben, wenn eine Runde durch ist.

    Das genauso. Also komme ich nicht weiter. Vielleicht noch ein kleines Beispiel. Bitte)

    @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Bisherigen Code in eine Funktion auslagern.

    Funktionen habe ich noch nicht gelernt. Kann man sie eventuell umgehen?
    Danke


  • Gesperrt

    @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Funktionen habe ich noch nicht gelernt. Kann man sie eventuell umgehen?

    "int main()" ist eine Funktion. So ganz unbekannt sind sie dir also doch nicht.



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Funktionen habe ich noch nicht gelernt. Kann man sie eventuell umgehen?

    Siehe meine Antwort oben.


  • Gesperrt

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Siehe meine Antwort oben.

    Seit wann heißt du RBS2?



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Bei "while (Tip != Sikret )" Anzahl der Schleifendurchläufe mitzählen

    Die Frage ist wie man das umsetzt.

    Mit Variablen und logischen Verknüpfungen (and oder or)



  • @RBS2 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Seit wann heißt du RBS2?

    Wieso muss ich RBS2 heißen um auf eine Frage zu antworten?
    Hör bitte endlich auf mit irgendeinem Metaquatsch Threads zuzumüllen!?



  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    do ... while()-Schleife um den Code der für 1 Spiel zuständig ist, nahe dem Ende dieser Schleife den Benutzer seine Wahl treffen lassen und in der Schleifenbedingung Prüfen.

    Also mit do...while funktioniert bei mir was nicht. Schau mal bitte an.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Zusätzliche Variable einführen, beim Beginn eines Spiels mit 0 initialisieren und nach jedem Rateversuch inkrementieren.

    Habe die Variable, aber was ich mit dem Versuch inkrementieren soll? Tipps?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Tip, ja, Sikret, Versuch = 0;
        char Abfrag = Nein;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        srand (time(NULL));
        Sikret = rand() % Max_Zahl + 1;
    
    do{
    
        while (Tip != Sikret ) {
    
        cout << "\nGib deinen Tip ein: ";
        cin >> Tip;
        Versuch += Versuch ;
            if (Tip > Sikret){
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
            }
            else if (Tip < Sikret) {
                cout << "\nMeine Zahl ist groesser \n";
                continue;
            }
            else {
                cout << "\nGratulation! Du hast die Zahl erraten!\n";
    
            }
        cout << "Noch ein Spiel (Ja/Nein)? ";
    
        cin >> Rest;
        }
    } while (Rest!=Nein);
    }
    
    


    • Die von Dir verwendete Variable Rest gibt es nicht (nirgends deklariert). (Nein auch nicht. Oder meintest Du "Nein" ... einen String?)
    • Du benutzt Tip in while (Tip != Sikret ) { uninitialisiert. Da kann sonstwas rauskommen.
    • Ich habe oben schon gesagt Du sollst Variablen dort deklarieren/definieren, wo sie benötigt werden.
    • Du berechnest keine neue Zufallszahl pro weiterem Spiel (Sikret = rand() % Max_Zahl + 1; muss woanders hin).
    • Versuch sollte beim Beginn eines neuen Spiels wieder 0 sein.


  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du benutzt Tip in while (Tip != Sikret ) { uninitialisiert. Da kann sonstwas rauskommen.
    Ich habe oben schon gesagt Du sollst Variablen dort deklarieren/definieren, wo sie benötigt werden.
    Du berechnest keine neue Zufallszahl pro weiterem Spiel (Sikret = rand() % Max_Zahl + 1; muss woanders hin).
    Versuch sollte beim Beginn eines neuen Spiels wieder 0 sein.

    Vielen Dank, endlich habe ich es kapiert. Noch mit Versuch bitte ich um ein paar Tipps.
    Hier ist noch meine Code, die Verbesserungsvorschläge zur Code sind begrüßen.

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Sikret;
        char Abfrage;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
    
        srand (time(NULL));
    
    
    do{
        int Tip;
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        Sikret = rand() % Max_Zahl + 1;
        while (Tip != Sikret ) {
        int Versuch = 0;
        cout << "\nGib deinen Tip ein: ";
        cin >> Tip;
        Versuch += Versuch ;
            if (Tip > Sikret){
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
            }
            else if (Tip < Sikret) {
                cout << "\nMeine Zahl ist groesser \n";
                continue;
            }
            else {
                cout << "\nGratulation! Du hast die Zahl erraten!\n";
    
            }
        cout << "Noch ein Spiel (J/N)? ";
    
        cin >> Abfrage;
        }
    } while (Abfrage!='N');
    }
    
    


    • Tip ist bei seiner ersten Verwendung in der Bedingung der folgenden while immer noch uninitialisiert. Also entweder initialisieren oder eine do...while-Schleife nehmen (die Tip erst auswerted nachdem die Variable von cin gelesen wurde).
    • Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?
    • Warum zählst Du die Versuche wenn Du sie dem Benutzer noch nichteinmal anzeigst?
    • Rücke bitte deinen Code anständig ein.


  • @Wowa29 mach dich mal über Einrückungsstil schlau.

    Du hilfst dir und uns.



  • @Wowa29 Zeile 24 ist etwas merkwürdig.



  • @DirkB sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    mach dich mal über Einrückungsstil schlau.

    Ich weiß ehrlich gesagt nicht, was euch nicht gefällt. Ich programmiere nur seit ein paar Tagen nur.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?

    Nein, nur am Ende. Nachdem die Randomzahl geraten wurde.

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Warum zählst Du die Versuche wenn Du sie dem Benutzer noch nichteinmal anzeigst?

    Wie ich das mache?

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Rücke bitte deinen Code anständig ein.

    z.B?



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Ich weiß ehrlich gesagt nicht, was euch nicht gefällt.

    Alles ab und inklusive dem ersten do in main() gehört noch eine Ebene weiter eingerückt.

    @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will?

    Nein, nur am Ende. Nachdem die Randomzahl geraten wurde.

    Das war eher eine rhetorische Frage. Anders formuliert: Du fragst den Benutzer nach jedem Rateversuch, ob er noch ein Spiel spielen will! Schau dir an, in welcher der beiden Schleifen cout << "Noch ein Spiel (J/N)? "; cin >> Abfrage; steht.



  • Dieser Beitrag wurde gelöscht!


  • @Swordfish so?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
        int Max_Zahl, Sikret;
        int Tip = 0;
        char Abfrage;
        cout << "Zahlenratespiel\n";
        cout << "===============\n";
    
        srand (time(NULL));
    
    
        do
        {
        cout << "\nGib die Maximalzahl ein: ";
        cin >> Max_Zahl;
        Sikret = rand() % Max_Zahl + 1;
        while (Tip != Sikret )
            {
            int Versuch = 0;
            cout << "\nGib deine Zahl ein: ";
            cin >> Tip;
        //Versuch += Tip ;
            if (Tip > Sikret)
                {
                cout << "\nMeine Zahl ist kleiner \n";
                continue;
                }
            else if (Tip < Sikret)
                {
            cout << "\nMeine Zahl ist groesser \n";
            continue;
                }
            else
                {
            cout << "\nGratulation! Du hast die Zahl erraten!\n";
            cout << "Sie haben " << Versuch << " Versuche dazu gebraucht!\n";
                }
            }
        cout << "Noch ein Spiel (J/N)? ";
        cin >> Abfrage;
        }
    while (Abfrage!='N');
    }
    
    

Anmelden zum Antworten