Zufalls Generierte Zahlen.



  • Hallo Liebe Community,

    Ich möchte einen einfaches Spiel programmieren wie man unten sieht. ^^
    Nun weis ich nicht wie ich dem Compiler klar machen muss das wenn die generierte Zahl kommt, und ich eine Zahl eintippe das dann z.B. (Stein schlägt Schere) Ich gewinne. Ich hab versucht der generierten Zahl eine Variable zu zuordnen, aber weis nicht wie...

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    
    {
    zufall:
    
    system("cls");
    
    int ents;
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl;
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl;
      cin >> ents;
    
      srand (time(NULL));
      cout << rand()%3 << endl;
    
     if 
    
    system("PAUSE");
    
    goto zufall;
    
    }
    

    Ich fange gerade erst an, also bitte kein flame ^^



  • Du könntest den Rückgabewert von rand() in eine Variable zwischenspeichern, damit sie dir für eine Weiterverarbeitung noch zur Verfügung steht.
    Und über if-Abfragen, kannst du dann schauen, was der Computer für ein Zeichen gewählt hat:
    null = Schere
    eins = Stein
    zwei = Papier

    Zu dem "goto":
    Dafür gibt es Schleifen, die machen genau das selbe, nur schöner. Benutze lieber die, aber wenn du noch am Anfang bist, dann wirst du ggf. noch nicht in deinem Buch o.ä. so weit gekommen sein.

    Etwas weiter gedacht:
    Du könntest mit einer "enum" den Code lesbarer machen, das kannst du ja mal im Hinterkopf behalten.


  • Mod

    Chechen65 schrieb:

    Ich hab versucht der generierten Zahl eine Variable zu zuordnen, aber weis nicht wie...

    Doch, genau so. Und dann kannst du beispielsweise alle 9 Möglichkeiten prüfen. Oder mit etwas Nachdenken sind es nur noch 7. Oder noch weniger, wenn man viel Nachdenkzeit investiert, aber 7 sollten dein Ziel sein, mit dem du zufrieden sein kannst.

    Ich fange gerade erst an, also bitte kein flame ^^

    Doch. Denn der Code zeigt, dass du dein Wissen aus irgendwelchen ganz besch...eidenen Quellen beziehst. Goto in Anfängercode? Roter Alarm! Wo hast du das her? Lass das sein! Benutz nie wieder die Quelle, aus der du das hast.



  • Wie speicher ich das?
    Könntest du vielleicht einen kleinen Quellcode schreiben wie ich den rückgabe Wert speicher?!
    Und was sind schleifen 😃 währe cool wenn du es vielleicht bisschen umschreiben könntest.
    Danke für die schnelle Antwort!



  • int variable = rand() % 3;

    google mal 😉 "for Schleife" und der Vollständigkeit halber eventuell "while Schleife"... gerne kombinieren mit C++ und eventuell "documentation" (auf englisch: loop)

    mfg
    HarteWare



  • Asso Vielen Dank für die Antworten. Jetzt würde ich mein Programm noch ein bisschen erweitern 😃 Immer wenn ich eine Zahl angebe, also 1 = Schere 2= Stein oder Papier bekomme ich eine Zahl zurück 😃 wie kann ich es umändern das ich anstatt ner null das Wort schere bekomme :D? Und ich will das das Programm meine Siege aufzählt. Hoffe ich nerve nicht ^^



  • So sieht mein Quellcode gerade aus!

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    
    {
    zufall:
    
    system("cls");
    
    int ents;
    int zufall = rand() %3;
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl;
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl;
      cin >> ents;
    
      srand (time(NULL));
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier
     if ( ents == 1 && zufall == 0)
     {
          cout << "Unentschieden" << endl;
    
     }
    
     if ( ents == 1 && zufall == 1)
     {
          cout << "Verloren" << endl;
    
     }
    
     if ( ents == 1 && zufall == 2)
     {
          cout << "Gewonnen" << endl;
    
     }  
    
     if ( ents == 2 && zufall == 0)
     {
          cout << "Gewonnen";
    
     }
    
     if ( ents == 2 && zufall == 1)
     {
          cout << "Unentschieden";
    
     }
    
     if ( ents == 2 && zufall == 0)
     {
          cout << "Verloren";
    
     }
    
     if ( ents == 3 && zufall == 0)
     {
          cout << "Verloren";
    
     }
    
     if ( ents == 3 && zufall == 1)
     {
          cout << "Gewonnen";
    
     }
    
     if ( ents == 3 && zufall == 0)
     {
          cout << "Unentschieden";
    
     }  
    
    system("PAUSE");
    
    goto zufall;
    
    }
    

  • Mod

    Und jetzt machst du noch eine vernünftige Schleife drumherum. Und denkst mal darüber nach, wie man eine Zahl zwischen 0 und 2 wohl zu einer Zahl zwischen 1 und 3 machen kann, so dass die komische Unterscheidung zwischen der Zahl des Computers und der Zahl des Spielers wegfällt.



  • Mach ich, aber ich versuche Grad nicht Zahlen sondern Wörter auf die Console angezeigt zu bekommen.



  • Chechen65 schrieb:

    So sieht mein Quellcode gerade aus!

    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main()
    
    {
    zufall:
    
    system("cls");
    
    int ents;
    int zufall = rand() %3;
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl;
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl;
      cin >> ents;
      
    
      srand (time(NULL));
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier
     if ( ents == 1 && zufall == 0)
     {
          cout << "Unentschieden" << endl;
      
     }
     
     if ( ents == 1 && zufall == 1)
     {
          cout << "Verloren" << endl;
      
     }
     
     if ( ents == 1 && zufall == 2)
     {
          cout << "Gewonnen" << endl;
      
     }  
     
     if ( ents == 2 && zufall == 0)
     {
          cout << "Gewonnen";
      
     }
     
     if ( ents == 2 && zufall == 1)
     {
          cout << "Unentschieden";
      
     }
     
     if ( ents == 2 && zufall == 0)
     {
          cout << "Verloren";
      
     }
     
     if ( ents == 3 && zufall == 0)
     {
          cout << "Verloren";
      
     }
     
     if ( ents == 3 && zufall == 1)
     {
          cout << "Gewonnen";
      
     }
     
     if ( ents == 3 && zufall == 0)
     {
          cout << "Unentschieden";
      
     }  
    
    system("PAUSE");
    
    goto zufall;
    
    }
    

    Du rufst 2-mal "rand()" auf (Zeile 14 & 22), ist das richtig so? 😉



  • Hahah ja da stand mehr hab probiert wie ich den Zahlen Namen gebe. Könnt ihr mir helfen :D?

    Beispiel:

    Console:

    Schere, Stein, Papier Spiel " " <-- Da könnte die Punktzahl stehen.

    1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)

    1

    2 <-- Rückgabe / Da soll Stein stehen.

    Schere schneidet Papier, du hast Gewonnen <--- Das sollte auch da stehen 😃



  • 1. Du solltest nur einmal pro Programmstart die srand() aufrufen.

    2. Um Zahlen von rand() vin 1-3 gehen zu lassen:

    rand()%3+1;
    

    3. Du Rufst 2mal rand() auf (Beim ersten mal speicherst du, das 2te mal gibst du es aus und es kann passieren, dass dir ein anderer Wert angezeigt wird, als in zufall steht)

    4. Pack eine Schleife um dein Programm, somit erparst du dir das goto.



  • Falls du ernsthaft C++ lernen möchtest empfehle ich die Investition in ein Buch.

    mfg
    HarteWare



  • 2 Bücher müssten morgen ankommen 😃
    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?



  • Chechen65 schrieb:

    2 Bücher müssten morgen ankommen 😃

    Welche 2 hast bestellt?

    Chechen65 schrieb:

    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?

    Was verstehst du das nicht? / und + gabs doch schon in der Grundschule 😃



  • Chechen65 schrieb:

    2 Bücher müssten morgen ankommen 😃
    hallihallo ich versteh das nicht richtig. könntest du mein Code umschreiben?

    Dann warte doch lieber, bis die da sind, dann brauchst du uns hier auch nicht sehr grundlegende Fragen zu stellen 🙂



  • C und C++ beide vom Anfang an 😃



  • Hab es mehr oder weniger hingekriegt. Aber wenn ich euch jetzt frage wie ich die Punktezahl anzeigen lassen kann, das sind keine Grundlagen 😃 Weis das jemand?

    Ach ja und das hier:

    cout << rand() %3+1 << endl;

    Hat nichts gebracht... die Console hat immer die 1 generiert.

    #include <iostream> 
    #include <cstdlib> 
    
    using namespace std; 
    
    int main() 
    
    { 
    zufall: 
    
    system("cls"); 
    
    int ents; 
    int zufall = rand() %3; 
    
      cout << "Schere, Stein, Papier Spiel" << endl << endl; 
      cout << "1. Schere / 2. Stein / 3. Papier ( 1,2 oder 3)" << endl << endl; 
      cin >> ents; 
    
      srand (time(NULL)); 
      cout << rand() %3 << endl;      // zufall : 0 = Schere / 1 = Stein / 2 = Papier 
                                      // ents : 1 = Schere / 2 = Stein / 3 = Papier 
     if ( ents == 1 && zufall == 0) 
     { 
          cout << "Schere schneidet Schere = Unentschieden!" << endl << endl; 
    
     } 
    
     if ( ents == 1 && zufall == 1) 
     { 
          cout << "Stein schlägt Schere = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 1 && zufall == 2) 
     { 
          cout << "Schere schneidet Papier = Gewonnen!" << endl << endl; 
    
     }   
    
     if ( ents == 2 && zufall == 0) 
     { 
          cout << "Stein schlägt Schere = Gewonnen!" << endl << endl; 
    
     } 
    
     if ( ents == 2 && zufall == 1) 
     { 
          cout << "Stein schlägt Stein = Unentschieden!" << endl << endl; 
    
     } 
    
     if ( ents == 2 && zufall == 0) 
     { 
          cout << "Blat umwickelt Stein = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 0) 
     { 
          cout << "Schere schneidet Papier = Verloren!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 1) 
     { 
          cout << "Papier umwickelt Stein = Gewonnen!" << endl << endl; 
    
     } 
    
     if ( ents == 3 && zufall == 0) 
     { 
          cout << "Papier umwickelt Papier = Unentschieden!" << endl << endl; 
    
     }   
    
    system("PAUSE"); 
    
    goto zufall; 
    
    }
    

  • Mod

    Du merkst dir in einer Variable die Punktzahl, veränderst diese gegebenenfalls und gibst sie aus. Doch, das sind Grundlagen, so ungefähr Seite 3 in einem typischen Buch 🙂 .

    Ich wette übrigens, dass nun genau der Zeitpunkt ist, an dem du mit dem goto auf die Schnauze fliegst. Denn mit der Punktzahl, wie einfach das auch aussehen mag, wird auf einmal ein funktionsweiter Zustand wichtig. Da ist es wichtig, den Kontrollfluss genau verfolgen zu können, was wann wo wie verändert wird. Also das, was bei goto so unlesbar ist.



  • Seite 3? Haha 😃 ne ich will es nicht verändern, es soll automatisch passieren. Und ich versteh manchmal die Reaktion einzelner Leute nicht wenn sie sehen wie einer goto benutzt xD ist meiner Meinung nach ein schöner Befehl. Also wenn du was weist freu ich mich 😃 ansonsten schau ich selber wie ich das mit der Punktezahl hinkriegen 🙂


Anmelden zum Antworten