zufallsgenerator für schere stein papier in c++



  • Hallo leute, ich habe seit c.a 1 Monat angefangen mich mit c++ zu beschäftigen und komme auch relativ gut zurechet.
    Ich habe auch schon ne menge kleine sachen programmiert wie z.b ein taschenrechner.jedoch bin ich grade dabei das Spiel Scher,Stein,papier zu programmieren komme jedoch nicht weiter weil ich nicht weiß wie man den zufalls generator programmiert.

    Hier die frage an euch:"wie mach ich den zufallsgenerator und muss ich die stdlib biblothek benutzen. Ich wär auf jede antwort froh und wenn ihr hier ein code postet dann bitte auch mit erklärung

    (Ich werde nun öfter in diesem forum schreiben weil ich es besser verstehe wenn es mir kurz zusammengefasst wird.)

    Vielen dank



  • Hallo laserpeter,

    Willkommen im C++-Forum.

    Ich stell Dir mal ein Stück Code ein, der - wie ich meine - für Deine Anwendung sinnvoll ist:

    #include <iostream>
    #include <random> // random_device, mt19937, uniform_int_distribution
    
    int main()
    {
        using namespace std;
        random_device rd;
        mt19937 generator( rd() );  // 'impfen' mit einem zufälligen Startwert
        uniform_int_distribution<> ssp(0,2);    // 0,1 und 2 entsprechen Schere, Stein & Papier 
        for( int i=0; i<10; ++i )
            cout << ssp(generator) << endl;
        return 0;
    }
    

    Dieser Code erzeugt 10 zufällige Werte für die drei Zahlen 0 bis 2.

    Du solltest dazu wissen, dass man in C++ zwischen einem Zufallsgenerator und einer Verteilung (Distribution) unterscheidet. Der eigentliche Zufallsgenerator ist im obigen Beispiel ' mt19937 generator '. Dieser erzeugt Zufallszahlen, aber in einem Bereich, der für Schere, Stein, Papier zu groß ist. Das erledigt die Verteilung ' uniform_int_distribution<> ssp(0,2); ', die aus einer zufälligen Zahl eine Zahl im Intervall [0;2] macht. Und das gleichverteilt, d.h. die Wahrscheinlichkeit für jede der drei Zahlen ist gleich groß.
    Und damit Du nicht bei jedem Programmstart die gleiche Folge von Zufallszahlen bekommst, 'impfe' ich den Generator noch mit einer 'nicht deterministisch' zufälligen Zahl - das macht das random_device am Anfang.

    Ansonsten empfehle ich Dir zum Verständnis noch den Artikel über Zufälle hier aus dem Forum. Allerdings hat es die von mir verwendeten Klassen zum Zeitpunkt als der Artikel erstellt wurde, noch nicht gegeben. Diese sind erst mit C++11 hinzu gekommen.

    Gruß
    Werner



  • Werner Salomon schrieb:

    mt19937 generator( rd() );  // 'impfen' mit einem zufälligen Startwert
    

    Weil ich vor kurzem drüber gstolpert bin: http://www.pcg-random.org/posts/cpp-seeding-surprises.html


Log in to reply