Rätselspiel



  • Guten Abend,
    ich habe folgendes proplem, da ich grad versuche eine Art Rätselprogramm versuche zu programieren, für die Windows-Konsole.
    Man soll in diesem Programm eine Zahl zwischen 1 und 10 in 3 Versuchen zu erraten.

    Hier ist mein Versuch:

    // Auflistung des aktuellen Verzeichnisinhalts  
      #include <cstdlib>
      #include <iostream>
      using namespace std;
    
      int main()
      {
        int Zahl1=7;
    	int Zahl2;
    	int Zahl3;
    	int Zahl4;
    
    	cout<<"Geben Sie eine Zahl zwischen 1 und 10 ein"<<endl;
    	if (Zahl1 == 10) 
    	{
    		cout <<"Geben Sie eine Zahl ein"<<endl;
    	cin>>Zahl2;
    	}
    	else
    	{
    		cout<<"Geben sie eine Zahl ein"<<endl;
    		cin>>Zahl2;
    	}
    	if (Zahl1 == 10) 
    	{
    		cout <<"Geben Sie eine Zahl ein"<<endl;
    	cin>>Zahl3;
    	}
    	else
    	{
    		cout<<"Geben sie eine Zahl ein"<<endl;
    		cin>>Zahl3;
    	}
    	if (Zahl1 == 10) 
    	{
    		cout <<"Geben Sie eine Zahl ein"<<endl;
    	cin>>Zahl1;
    	}
    	else
    	{
    		cout<<"Geben sie eine Zahl ein"<<endl;
    		cin>>Zahl4;
    	}
    
    	cin.get();
    	    system("PAUSE"); 
        return 0;
      }
    


  • so kann man nie gewinnen 😉

    die zu erratende zahl ist bei dir 7.
    also musst du auch darauf irgendwo abprüfen.
    (perspektivisch würde ich sie durch srand/rand ermitteln also über zufall)

    du brauchst eine schleife, mit der du dreimal das raten erlaubst, bei richtigem raten kannst du die schleife abbrechen (break).
    du prüfst nach eingabe immer darauf, ob die eingegebene zahl die 7 war.

    hmm, was noch: typischerweise geht das spiel so, dass du dem ratenden noch sagst, ob seine eingegebene zahl kleiner oder größer als die zu erratende zahl war. ebenso gibst du aus, wenn er richtig liegt (Sie haben gewonnen).

    so, da ich denke, es ist eine hausaufgabe, mach einen neuen versuch 🙂



  • Also müsste es vil sdo gehn??[cpp]
    if (Zahl1 < 7)
    {
    cout <<"Tut mir leid, ihre zahl war zu groß"<<endl;
    cin>>Zahl2;
    }



  • // Auflistung des aktuellen Verzeichnisinhalts  
      #include <cstdlib>
      #include <iostream>
      using namespace std;
    
      int main()
    {
            int Zufallszahl, Eingabe;
    		Randomize ();
            Zufallszahl = random(10);
            cout<<"Ich denke mir eine Zahl zwischen 1 und 10"<<endl;
            cin>>Eingabe;
    
    	cout<<"Geben Sie eine Zahl zwischen 1 und 10 ein"<<endl;
    	if (Eingabe == Zufallszahl) 
    	{
    		cout <<"Glückwunsch, Ihre Zahl war richtig!"<<endl;
    	}
    	if (Eingabe < Zufallszahl) 
    	{
    		cout <<"Schade, leider war ihre Zahl kleiner als die Zahl,die erraten werden sollte."<<endl;
    	}	
    	if (Eingabe > Zufallszahl) 
    	{
    		cout <<"Schade, leider war ihre Zahl größer, als die Zahl, die es zu erraten gab"<<endl;
    	}
    	 while(!eraten)
            {
              if (Eingabe == Zufallszahl)
              {
                cout<<"Glückwunsch, deine Zahl ist Richtig!"<<endl;
                eraten = true;
              }
            }
    
    	cin.get();
    	    system("PAUSE"); 
        return 0;
      }
    

    so schon besser?? allerdings sagt der mir bei dieser variante, das einige sachen nicht bezeichnet sind.

    die fehler hierbei:
    und erraten ist ein nichtdeklarierter bezeichner
    randomize bezeichner wurde nicht gefunden random ebenfalls



  • Sieht für mich nach einer Endlosschleife aus... 😃
    Und das er "eraten" als nichtdeklariert bezeichnet... hm, woran könnte das nur liegen?
    Was da random angeht, auch da benutzt du die falschen Funktionen.
    Du musst das ganze mit srand() initialisieren, als parameter bietet sich zum Beispiel die Zeit an.
    Mit rand() kannst du dann die Zufallszahl abfragen. Damit sie in dem von dir gewünschten Bereich liegt solltest du den Modulo Operator benutzen.
    Und bezüglich der Endlosschleife: Frag da auch die Eingabe ab...



  • Skalli schrieb:

    Sieht für mich nach einer Endlosschleife aus... 😃
    Und das er "eraten" als nichtdeklariert bezeichnet... hm, woran könnte das nur liegen?
    Was da random angeht, auch da benutzt du die falschen Funktionen.
    Du musst das ganze mit srand() initialisieren, als parameter bietet sich zum Beispiel die Zeit an.
    Mit rand() kannst du dann die Zufallszahl abfragen. Damit sie in dem von dir gewünschten Bereich liegt solltest du den Modulo Operator benutzen.
    Und bezüglich der Endlosschleife: Frag da auch die Eingabe ab...

    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    
    int main(void)
    {
        int Zufallszahl, Eingabe, eraten=0;
    
        cout<<"Ich denke mir eine Zahl zwischen 1 und 10"<<endl
        <<"Geben Sie eine Zahl zwischen 1 und 10 ein"<<endl;
    
        for (int i=1;i<=3;i++)
        {
            srand(time(NULL));
            Zufallszahl = rand()&10;
            cin>>Eingabe;
    
            if (Eingabe == Zufallszahl)
            {
                cout <<"Glueckwunsch, Ihre Zahl war richtig!"<<endl;
                break;
            }
            if (Eingabe < Zufallszahl)
            {
                cout <<"Schade, leider war ihre Zahl kleiner als die Zahl,die erraten werden sollte."<<endl;
            }
            if (Eingabe > Zufallszahl)
            {
                cout <<"Schade, leider war ihre Zahl groesser, als die Zahl, die es zu erraten gab"<<endl;
            }
        }
        cin.get();
        cout<<endl;
        system("PAUSE");
        return 0;
    }
    

    so besser?



  • das ding heißt:

    Zufallszahl = rand()%10 +1;
    

    modulo, und +1, sonst hast du von 0-9

    dein spiel ist noch gemein, da in jedem schleifendurchlauf eine neue zufallszahl genommen wird, irgendwie hat der user dann wenig chance 😉

    zieh die raus aus der schleife.



  • #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;
    
    int main(void)
    {
        int Zufallszahl, Eingabe, eraten=0;
    
        for (int i=1;i<=3;i++) // Führt das Programm 3x aus ;)
    		{  srand(time(NULL));
            Zufallszahl = rand()%10 +1;
    		cout<<"Ich denke mir eine Zahl zwischen 1 und 10"<<endl
        <<"Geben Sie eine Zahl zwischen 1 und 10 ein"<<endl;
        for (int i=1;i<=3;i++)
        {
    
            cin>>Eingabe;
    
            if (Eingabe == Zufallszahl)
            {
                cout <<"Glueckwunsch, Ihre Zahl war richtig!"<<endl;
                break;
            }
            if (Eingabe < Zufallszahl)
            {
                cout <<"Schade, leider war ihre Zahl kleiner als die Zahl,die erraten werden sollte."<<endl;
            }
            if (Eingabe > Zufallszahl)
            {
                cout <<"Schade, leider war ihre Zahl groesser, als die Zahl, die es zu erraten gab"<<endl;
            }
    	}
    
        }
        cin.get();
        cout<<endl;
        system("PAUSE");
        return 0;
    }
    

    Das is eine kleine Erweiterung des Programmes, hier hat das Programm 3 durchläuf mit je max. 3 Versuche. Pro versuch ist es eine andere Zahl, die ihr erraten müsst!

    // kleiner Rechtschreibfehler behoben
    


  • Du hast den Hinweis von elise im Hinblick auf die Zufallszahl nicht zur Kenntnis genommen. Setzen.



  • Sehr gut ! 👍


Anmelden zum Antworten