Roulette-Spiel



  • hallo miteinander,

    ich möchte ein Roulette-Spiel programmieren, bei dem ein Spieler 1000mal spielt und jeweils 10 euro setzt.

    Er setzt immer auf Rot, also lautet die Gewinnwahrscheinlichkeit: 18/37. Bei Gewinn wird der Einsatz verdoppelt.
    Das hier ist mein Ansatz,

    #define _CRT_SECURE_NO_DEPRECATE

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>

    int main()
    {
    int einsatz =10;
    float gewinn=0;
    int farbe;

    for (int i = 0; i <= 999; i++){

    srand(time(NULL));

    farbe = (rand() % 37) % 2;
    if (farbe == 1){
    gewinn += (einsatz * 2);
    }
    else{
    gewinn -= 10;
    }

    }
    printf("Gewinn:%f\n", gewinn);

    system("pause");
    return 0;
    }

    Ich hoffe ihr könnt mir helfen, als gewinn bekomme ich immer 20000 oder
    -10000.

    Mfg Dulfried



  • Schau dir mal die anderen beiden Threads an, die hier mit Zufallszahlen (sogar im Titel) laufen.



  • also die der Zufallsteil müsste stimmen, es wird mir nämlich immer 0 bzw. 1 ausgegeben, aber bei der Berechnung des Gewinns ist glaub noch ein Fehler



  • Dulfried schrieb:

    also die der Zufallsteil müsste stimmen,

    Hast du das mit srand verstanden? Wann und wo?



  • Richtig verstanden noch nicht,
    ich weiß nur dass srand benutzt wird um den Zufallsgenerator zu initalisieren.
    Aber was kommt immer in die Klammer nach dem srand?



  • srand setzt den Zufallsgeneratror auf einen neuen Startwert.

    Darum ruft man srand nur einmal im ganzen Programm auf.

    Als Startwert wird meist die aktuelle Zeit (Sekunden seit 1.1.1970) genommen.
    So hat man nur denselben Startwert, wenn man das Programm in derselben Sekunde startet. Und das ist höchst selten.

    Wie oft rufst du srand auf?



  • 1000 mal 😃

    Habe mich ein bisschen eingelesen und mein Programm nun verbessert:

    int main()
    {
    int farbe;
    float gewinn=0;
    float einsatz=10;
    float zwerg = 0;
    float zwerg1 = 0;
    float auszahlung = 0;

    int i;
    time_t t;

    time(&t);
    srand((unsigned int)t); /* Zufallsgenerator initialisieren */

    for (i = 0; i < 1000; i++){

    farbe = (rand() % 37) % 2;

    if (farbe == 1)
    {
    zwerg = einsatz * 2;
    auszahlung += zwerg;
    }
    else
    {
    }

    }

    gewinn = auszahlung-10000;
    printf("%f ", gewinn);

    system("pause");
    return 0;
    }

    Ich denke mal das passt so, kommen auch realistische Werte aus.

    Allerdings habe ich noch ein Verständnisproblem:

    farbe = (rand() % 37) % 2

    Diese Funktion liefert mir zwei verschiedene Werte, entweder 0 oder 1.
    Aber was davon steht für Rot(18/37)???



  • (rand() % 37) liefert Werte zwischen 0 und 36. Davon sind 18 rot und 18 schwarz und die 0 ist grün.

    Die Farben sind gleichmäßig aber nicht abwechselnd über das Feld verteilt. Da müßtest du dir noch ein Array machen mit den Farben.

    Allerdings ist die Chance bei gerade/ungerade genauso groß. Und das ist einfacher zu berechnen.
    Bedenken musst du aber, dass du bei der 0 nicht gewinnst.

    Deine Bedingung passt zum Gewinn bei ungerade (und da die 0 nicht ungerade ist, ist das auch gleich berücksichtigt)

    Und nimm beim nächsten mal endlich die Code-Tags.


Anmelden zum Antworten