Zahlenratespiel, Hilfe mit Zusatzfunktionen



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Kann man noch die Anzahl der Versuche hierher hinzuschreiben bzw. festlegen? Da brauche ich wieder eine Schleife?

    Wie meinst Du das? Eine Maximalanzahl an Versuchen festlegen bei deren Erreichen das Spiel verloren ist?



  • @Swordfish genau



  • @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

      } while (Tip != Sikret);
    

    Dazu brauchts in while (Tip != Sikret); noch eine weitere Bedingung:

    Solange (Zahl nicht erraten UND Anzahl der Versuche kleiner gleich Maximalanzahl)



  • @Swordfish

    @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Dazu brauchts in while (Tip != Sikret); noch eine weitere Bedingung:

    Ja, aber wenn ich das erweitere, dann erfüllt sich die vorherige Bedingung nicht vollständig, und zwar wenn ich z.B 5 Versuche festlege, und dann noch die Meldung dass "die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war ...!", dann funktioniert das nicht ganz richtig

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


  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    cout << "die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war "<< Sikret;
    

    Diese Meldung solltest Du dann nur ausgeben, wenn Versuch gleich der Maximalanzahl ist.

    BTW ist es nicht so toller stil, die Anzahl als Zahl (Literal) mitten in den Code zu schreiben. Definiere dafür lieber eine Konstante a la constexpr int MaxVersuche = 10; und verwende den Namen wo Du den Wert brauchst.



  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    Ja, mein Freund. Danke dir. Ich lerne aber noch.

    Lesbaren Code zu schreiben ist eine der wichtigsten Lektionen.

    Das ist auch für dich wichtig, wenn du nach ein paar Tagen mal wieder auf deinen Code schaust.



  • @Swordfish sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    constexpr int MaxVersuche = 10;

    Habe probiert, aber jetzt bei Erraten der Zahl erscheint trotzdem die Meldung ""die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war "<< Sikret;"

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    {
    	cout << "Zahlenratespiel\n";
    	cout << "===============\n";
        constexpr int MaxVersuche = 5;
    	srand(time(NULL));
    
    	char Abfrage;
    	do {
    		int Versuch = 0;
    
    		cout << "\nGib die Maximalzahl ein: ";
    		int Max_Zahl;
    		cin >> Max_Zahl;
    
    		int Sikret = rand() % Max_Zahl + 1;
    
    		int Tip;
    		do {
    			cout << "\nGib deine Zahl ein: ";
    			cin >> Tip;
    			++Versuch;
    
    			if (Tip > Sikret)
    			{
    				cout << "\nMeine Zahl ist kleiner \n";
    			}
    			else if (Tip < Sikret)
    			{
    				cout << "\nMeine Zahl ist groesser \n";
    			}
    			else
    			{
    				cout << "\nGratulation! Du hast die Zahl erraten!\n"
    				     << "\nSie haben " << Versuch << " Versuche dazu gebraucht!\n"; //Wie soll ich diese Zeile positionieren, damit es richtig funktioniert?
    			}
    		} while (Tip != Sikret && Versuch < MaxVersuche ); // so?
            cout << "die Maximalanzahl an Versuchen wurde erreicht, die gesuchte Zahl war "<< Sikret; // Und diese, weil bei Erraten, erscheint trotzdem die Meldung
    		cout << "\nNoch ein Spiel (J/N)?\n";
    		cin >> Abfrage;
    	} while (Abfrage != 'N');
    }
    
    


  • Ich hab es, jetzt scheint das so zu funktionieren wie ich von Anfang an wollte, danke für eure Tipps. Wenn es noch welche Verbesserungsvorschläge wären, würde ich mich freuen.

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


  • @Wowa29 sagte in Zahlenratespiel, Hilfe mit Zusatzfunktionen:

    int Sikret = ...;
    

    Das soll wohl eher secret heißen (englisch für "geheim" bzw. "Geheimnis").

    Wenn du später mal beruflich weiterprogrammieren möchtest, dann solltest du dich an englische Bezeichner gewöhnen (und auch selber verwenden).

    Und noch ein Tipp: Lokale Variablen werden, nach üblicher Vereinbarung, mit Kleinbuchstaben geschrieben.



  • @Th69 super, danke dir.


Anmelden zum Antworten