[Java] Spielautomaten - Mathe

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Terrorbeat, 11. Mai 2011 .

  1. 11. Mai 2011
    Spielautomaten - Mathe

    HI

    Ich habe ein großes Problem. Und zwar möchte ich einen Glücksspielautomaten Programmieren (Slotmaschine) und bin in sachen Mathematik Hoffnungslos verloren.

    Der Slot "muss" 5 Walzen haben, das vorneweg. Als Programmierer bin ich hier natürlich befugt die Walzern dieses Slots nach meinem Willen auszurichten.

    Undzwar weiß ich nicht wie ich Gewinchancen und Gewinnsummen platzieren soll. Mein erster ansatz war dieser:

    Der Spieler zahlt 10EUR ein und darf einmal Drehen (spielen). Bei 1000 Spielen ohne das der Slot Gewinne ausschütte hätte ich also 10000EUR Gewinn. Das wäre natürlich nicht schön für den Spieler und zu 1000 Spielen würde es so nie kommen also muss ich von diesem Gewinn wieder was an den Spieler zurück geben. Ich sage jetzt einfach mal 20% behalte ich, der rest geht an den Spieler (ka ob das ein sinnvoller wert ist). Also gehen 8000EUR raus, doch wie teile ich diese 8000EUR ein? Wen ich nur eine Gewinnmöglichkeit bieten würde, ich glaube in der Mathematik nennt man das Event, dann würde ich 8000EUR bei 1000 Spielen einmal ausschüten. Doch wie hoch müsste hier die Prozentuale Gewinnchance sein jeh Dreh?

    Da es nun aber sehr demotivierend ist jedes mal 10EUR in den Automaten zu stecken und zu hoffen irgendwann in den nächsten 1000 Zügen mal einen Gewinn zu machen sollte es natürlich mehrere Events geben. Ich teile diese 8000EUR einfach mal in 10 Events ein:

    01: 10EUR
    02: ... ohje....

    ja da fängt es schon wieder an. Ich habe keine Ahnung ob es nicht vielleicht irgendeine Gesetzlichkeit gibt, wie die Gewinne auszusehen haben damit der Betreiber seinen Slot gewinnbringend laufen lassen kann. Naja, falls man sie dennoch wahllos einteilen kann:

    01: 10EUR
    02: 25EUR
    03: 50EUR
    04: 100EUR
    05: 150EUR
    06: 300EUR
    07: 500EUR
    08: 750EUR
    09: 1000EUR
    10: 2500EUR

    Wie gesagt, diese Gwinne sind jetzt völlig wahllos eingetragen. Doch wie müsste hier die Prozentuale Gewinnchance aussehen jeh Spielzug damit ich am ende weiterhin meine 20% Gewinn habe?!?!

    hoffe mir kann jemand helfen.
     
  2. 11. Mai 2011
    AW: Spielautomaten - Mathe

    Es gibt in der Wahrscheinlichkeitsrechnung einen sogenannten Erwartungswert.

    Dieser ist einfach die Summe aller möglichen Events, bzw. derer Preise multipliziert mit der wahrscheinlichkeit.

    Sagen wir du willst auf 10EUR 8EUR austeilen und 2EUR in der Bank behalten. Der Erwartungswert muss nun also insgesamt 8EUR zeigen. (oder -2EUR wenn du die 10EUR einsatz mitrechnest)

    Beispiel
    1 Event 100EUR mit 3%, 1 Event 50EUR mit 6% 1Event 10EUR mit 30%
    E=100*0,03+50*0,06+10*0,3+0[nix gewinnen]*x[restliche Wkeit] = 9 [Nettogewinn]
    E=90[100-10]*0,03+40[50-10]*0,06+0[10-10]*0,3-10[nix gewinnen]*x[restliche Wkeit] = -1 [Bruttogewinn]

    Somit erhält im Durchschnitt der Spieler 9EUR pro Spiel. Da er 10EUR bezahlen muss, hast du 10% Gewinnmarge

    Du musst also, wenn du die Preise wie oben benutzen willst einfach irgendwelche Wahrscheinlichkeiten Einsetzen und gucken, wie sich der Erwartungswert verhält und solange an den einzelnen Wkeiten Rumspielen, sodass du insgesamt halt auf 8 oder -2 kommst.

    Berechnen lässt sich das Ganze sicherlich auch. Sagen wir es gibt nur 10EUR Gewinne. Die W'keit dafür muss 0,8 sein, damit du auf 8EUR Erwartungswert kommst. Wenn du jetzt 20EUR Gewinne haben willst, musst du zunächst überlegen, wie groß dein "Anteil" an 20EUR gewinnen sein soll.
    Sagen wir es soll "gleichmäßig" 10EUR und 20EUR rauskommen. Teile die 10EUR Gewinne in 2 Klassen:
    10EUR*0,4+10EUR*0,4=8
    Nun Multiplizierst du den Preis im zweiten Summanden *2 und die W'keit /2 also
    10EUR*0,4+20EUR*0,2=8

    Im Allgemeinen also, wenns 10 Preise geben soll zunächst alle Wahrscheinlichkeiten Aufteilen in 10*(10EUR*0,08) und dann die Wahrscheinlcihkeiten Teilen und die Preise Multiplizieren mit Faktoren, die du gerne Hättest.

    Möglich wärs auch das Ganze ungleich zu gewichten
    10EUR*0,6+10EUR*0,2=8
    =>
    10EUR*0,6+25EUR*0,08=8
    So gibts öfter Kleine Preise und dafür seltener große, kommst aber aufs selbe hinaus

    Das Ganze so auszubalancieren, dass du nciht nur 20% schnitt hast, sondern dass dein Kunde auch süchtig vor dem AUtomaten sitzt ist allerdings ne Ganz andere Sache.
     
  3. 11. Mai 2011
    AW: Spielautomaten - Mathe

    Also wie es bei Automaten genau aussieht weiß ich nicht doch ich würde einfach die Wahrscheinlichkeit definieren in der eine Konstelation kommt und je höher die Wahrscheinlichkeit ist deso kleiner ist die Gewinnausschüttung...

    sagen wir bei jedem 10 mal drehen kommen Trauben, dann gibst du 9EUR zurück damit du auch gewinn machst, je Unwahrscheinlicher das es ist das etwas kommt umso höher ist die Ausschütung.

    mfg
     
  4. 12. Mai 2011
    AW: Spielautomaten - Mathe

    @bloodyphoenix: boar klasse hätte nie gedacht das es mir jemand so ausführlich erklärt. Besten dank bin dir mega was Schuldig.
     
  5. 12. Mai 2011
    AW: Spielautomaten - Mathe

    Gerne doch. Hatte mal Wahrscheinlichkeitsrechung in der Uni und find das Thema durchaus interessant. Ich hoffe nur es war verständlich genug. Ansonsten, falls noch was Unklar ist, frag nach^^
     
  6. 12. Mai 2011
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Spielautomaten - Mathe

    Nein bisher habe ich noch keine Fragen. Hab auch direkt etwas in PHP geschrieben:

    PHP:
    $investment  1000 ;
    $fees  0.84 //Erwartungsgehalt der Ausgezahlt werden soll
    $events     = array( 0.5 1 2 5 7.5 10 );  //Events


    class  goodLuck  {
        private 
    $investment ;
        private 
    $fees ;
        private 
    $events ;
        
        function 
    __construct ( $investment $fees $events ) {
            
    $this -> investment  $investment ;
            
    $this -> fees  $fees ;
            
    arsort ( $events );
            
    $this -> events  $events ;
            
    $this -> setEvents ();
        }
        
        private function 
    setEvents ( $getTerm  true ) {
            
    $countEvents  count ( $this -> events );  //Event anzahl
            
    $chanceForAllEvents  $this -> fees  $countEvents //Event Chancen aufteilen nach Anzahl der Events
            
            //Events einen Preis und eine Chance zuordnen
            
    foreach( $this -> events  as  $key  =>  $value ) {
                
    $chanceForThisEvent  $chanceForAllEvents / $value ;
                
    $prizeForThisEvent  $this -> investment * $value ;
                
    $this -> events [ $key ] = array( "ID"  =>  $key , "multiplier"  =>  $value "prize"  =>  $prizeForThisEvent "chance"  =>  $chanceForThisEvent );
            }
            
            
    //Einen Term generieren und anzeigen
            
    if ( $getTerm ) {
                
    $term  0 ;
                foreach(
    $this -> events  as  $key  =>  $value ) {
                    
    $term  $term  + ( $value [ "prize" ] *  $value [ "chance" ]);
                    echo  
    " + (" . $value [ "prize" ]. " * " . $value [ "chance" ]. ")<br>" ;
                }        
                echo 
    "------------------------------------------<br>" . $term . "<br>" ;
            }
            
            return 
    true ;
        }
        
        public function 
    checkForWin () {
            
    $aRand  $this -> random_float ( 0 1 );     //Zufallszahl    
            
    $stack  0 //Ein Stack erstellen, dieser wird jedesmal um die höhe der "vertanen" chance erhöt. Verhindert das Chancen Prozente verloren gehen bei Events kleinerer Preistufen
            
    foreach( $this -> events  as  $key  =>  $value ) {
                
    $stack  $stack  $this -> events [ $key ][ "chance" ];
                if (
    $aRand  <=  $stack ) {
                    return 
    $this -> events [ $key ];                
                }
            }
            
            return 
    false ;
        }
        
        private function 
    random_float ( $min , $max ) {
            return (
    $min + lcg_value ()*( abs ( $max - $min )));
        }
    }

    $aclass  = new  goodLuck ( $investment $fees $events );

    $i  0 ;
    $gewinn  0 ;
    while(
    $i  1000 ) {
        
    $gewinn  $gewinn  $investment ;

        
    $nowwin  $aclass -> checkForWin ();
        if (
    is_array ( $nowwin )) {
            
    $gewinn  $gewinn  $nowwin [ 'prize' ];
            if (
    $nowwin [ 'multiplier' ] !=  1000 ) {
                echo 
    "<span style='color:red;'>" . $nowwin [ 'prize' ]. "</span> - " ;
            } else {
                echo 
    "<span style='color:blue;'>" . $nowwin [ 'prize' ]. "</span> - " ;
            }
        } else {
            echo 
    "<span style='color:green;'>1000</span> - " ;    
        }
        
    $i ++;    
    }
    echo 
    "<br>Gewinn: " . $gewinn ;
    Ausgabe ist dan in etwa so:
    bankwin_02.jpg
    {img-src: //www.bilderkiste.org/show/thumbnail/4130520494631/bankwin_02.jpg}

    Grün: die Bank Gewinnt
    Rot: der Spieler Gewinnt

    Joar wie man sieht eine ganz coole Slot klasse. Natürlich fehlt da jetzt völlig die Optik, nur das Ergebnis wird angezeigt. Aber die Optik wird dann einfach nach dem Ausgang dieses Spiels Generiert. Man kann oben einfach die Events erweitern oder kürzen wird dann alles Automatisch berechnet Kann man auch für Rubel lose etc verwenden.
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.