Übersicht
Dieses Projekt befasst sich mit dem Thema Glücksspiel. Es existieren zahlreiche Glücksspiele, beispielsweise Glücksspielautomaten (z.B. der “Einarmige Bandit”), Roulette, Kartenspiele (z.B. Blackjack und Poker), Würfelspiele, Sportwetten, Lotto, Rubbellose und Bingo sowie im weiteren Sinne auch die Börsenspekulation. In diesem Projekt möchten wir uns auf das Roulette konzentrieren. Roulette ist ein weltweit verbreitetes, traditionelles Glücksspiel, bei dem es darum geht, auf bestimmte Zahlen oder Eigenschaften von Zahlen zu setzen, die durch den zufälligen Lauf einer Kugel in einem Kessel bestimmt werden (Klicke hier für weitere Informationen). Ziel ist in diesem Projekt, dass du dir am Ende den Weg ins Casino sparen kannst, weil du dir in R
ein Roulette nachgebaut hast!
Zielsetzung
In diesem Projekt soll es um den Umgang mit Funktionen in R
, den Umgang mit Wenn-Dann-Bedingungen (if
und else
) und um das Erzeugen von Schleifen mit for
, while
oder repeat
gehen. In diesem Projekt soll mithilfe dieser Funktionen ein Roulette-Spiel rekonstruiert und mithilfe dessen verschieden Situationen nachgestellt werden. Hierdurch sollst du dich mit dem Gebrauch dieser Funktionen vertraut machen und verschiedene, kombinierte Verwendungsmöglichkeiten kennenlernen.
Vorbereitung
Für die Bearbeitung dieses Projektes solltest du dich zunächst mit Funktionen in R
beschäftigen. Dazu kannst du dich entweder selbst im Internet informieren, oder du nutzt diesen R-Blog zu if
und else
- Bedingungen in R
. In der statistischen Lehre an der Goethe Universität werden diese Arten von Funktionen in dem Tutorial Loops und Funktionen für PsyBSc7 näher behandelt.
Desweiteren solltest du dich ein wenig mit dem Spiel Roulette auseinandersetzen. Auf SpielBank.com.de kannst du dir die Regeln und den Ablauf des französischen Roulettes durchlesen, um mögliche Wetten und die dazugehörigen Wettquoten kennenzulernen. Kurz zusammengefasst wir eine Roulettekugel in den Roulettekessel geworfen, welcher mit 37 Fächern (für die Zahlen 0-36) in abwechselnd roter und schwarzer Farbe - oder grün im Falle der 0 - bestückt ist. Ziel des Spieles ist es, die Zahl oder die Farbe vorherzusagen, auf welcher die Kugel in der folgenden Spielrunde liegenbleiben wird.
In der folgenden Tabelle sind die möglichen Einsatzvarianten samt ihrer dazugehörigen Gewinnquoten abgebildet. Je höher die Gewinnquote - also je statistisch unwahrscheinlicher - , desto größer die Auszahlung!
Einsatzvariante | Ereignis | Gewinnquote |
---|---|---|
Die Einfache Chance | “Rot” oder “Schwarz”, “Ungerade” oder “Gerade”, “Niedrig” oder “Hoch” | 1:1 |
Douzaines (Dutzend) | 12 aufeinanderfolgende Zahlen (1-12 / 13-24 / 25-36) | 2:1 |
Colonnes (Kolonne) | Kolonne 34, Kolonne 35, Kolonne 36 | 2:1 |
Transversale Simple (Große Straße) | 6 Zahlen in zwei Querreihen untereinander | 5:1 |
Transversale Pleine (Straße) | 3 Zahlen in einer Querreihe | 11:1 |
Les Trois Premiers | Die ersten 3 Zahlen (0-2) | 11:1 |
Les Quatre Premiers | Die ersten 4 Zahlen (0-3) | 8:1 |
Carré | Schnittpunkt zwischen vier Zahlen (z.B. 2-3-4-5) | 8:1 |
Cheval | Wette auf zwei angrenzende Zahlen | 17:1 |
Plain | Wette auf eine einzelne Zahl | 35:1 |
Der Wetttisch beim französischen Roulette sieht folgendermaßen aus:
Beispiel zur Verwendung von Funktionen
Im Folgenden bekommst du ein kleines Beispiel zur Verwendung von den Funktionen if
, else
, for
und while
. Stell dir vor, du spielst mit ein paar Freund:innen Monopoly und sitzt im Gefängnis fest. Um aus dem Gefängnis zu kommen, ist es notwendig, einen Pasch zu würfeln (zwei Würfel - zwei gleiche Augenzahlen). Als erstes möchten wir schauen, bei wie vielen von 50 Würfen ein günstiges Ergebnis - also ein Pasch - herauskommt.
Ergebnis1 <- NULL
Ergebnis2 <- NULL
Bedeutung <- NULL
Konsequenz <- NULL
Zuerst erstellt man dazu die Objekte, in denen man im Folgenden die Werte aus der Schleife speichern möchte. Ergebnis1
sehen wir dafür vor, jeweils die Augenzahl des ersten Würfels zu speichern; Ergebnis2
soll das gleiche für den zweiten Würfel tun. Die beiden Objekte Bedeutung
und Konsequenz
sollen jeweils die beiden Augenzahlen kombinieren und zum einen die Bedeutung ( “Pasch” oder “kein Pasch”) und zum anderen die daraus folgende Implikation für das Spiel “Du bist frei!” oder “Bleib im Gefängnis!” ausgeben. Die Funktion, die das umsetzt, sieht folgendermaßen aus:
for (i in 1:50) { # Wie lang soll die Schleife sein? - 50 Wiederholungen
wuerfel1 <- sample(1:6, 1) # Zufallsziehung von Würfel 1
Ergebnis1[i] <- wuerfel1 # Das Ergebnis von Würfel 1 wird jeweils in einem neuen Eintrag (Eintrag "i" für die i-te Runde/den i-ten Durchlauf) im Objekt "Ergebnis1" gespeichert.
wuerfel2 <- sample(1:6, 1) # Zufallsziehung von Würfel 2
Ergebnis2[i] <- wuerfel2 # Abspeicherung des Ergebnisses von Würfel 2
if (wuerfel1 == wuerfel2) { # Wenn die beiden Würfel die gleiche Augenzahl haben, dann soll in dem Objekt "Bedeutung" abgespeichert werden, dass ein Pasch gewürfelt wurde. Ebenso soll in dem Objekt "Konsequenz" die Anweisung "Du bist frei!" ausgegeben werden.
Bedeutung[i] <- "Pasch"
Konsequenz[i] <- "Du bist frei!"
} else { # Ansonsten soll im Objekt "Bedeutung" abgespeichert werden, dass kein Pasch gewürfelt wurde und im Objekt "Konsequenz" die Anweisung "Bleib im Gefängnis!"
Bedeutung[i] <- "kein Pasch"
Konsequenz[i] <- "Bleib im Gefängnis!"
}
}
Monopoly_Gefaengnis <- data.frame(Ergebnis1, Ergebnis2, Bedeutung, Konsequenz) # Datensatz aus den drei Objekten erstellen
View(Monopoly_Gefaengnis) # Datensatz anschauen
Mit diesem Code “würfelt” man also 50 Mal, speichert die Augenzahlen jeweils ab und fügt Bedeutung
und die daraus folgende Konsequenz
für das Spiel hinzu. Am Ende liegen in allen 4 Variablen (Ergebnis1
, Ergebnis2
, Bedeutung
und Konsequenz
) 50 zusammengehörige Ausprägungen vor. Diese kann man dann in einen Datensatz zusammenfügen und erhält folgende Tabelle:
Ergebnis1 | Ergebnis2 | Bedeutung | Konsequenz |
---|---|---|---|
3 | 4 | kein Pasch | Bleib im Gefängnis! |
5 | 1 | kein Pasch | Bleib im Gefängnis! |
6 | 1 | kein Pasch | Bleib im Gefängnis! |
2 | 2 | Pasch | Du bist frei! |
6 | 3 | kein Pasch | Bleib im Gefängnis! |
5 | 6 | kein Pasch | Bleib im Gefängnis! |
6 | 3 | kein Pasch | Bleib im Gefängnis! |
3 | 2 | kein Pasch | Bleib im Gefängnis! |
1 | 5 | kein Pasch | Bleib im Gefängnis! |
3 | 2 | kein Pasch | Bleib im Gefängnis! |
Desweiteren kann man überprüfen, wie lange es dauert, bis man einen Pasch würfelt. Dazu benutzt man folgenden Code:
wuerfel1 <- 0 # Würfel 1
wuerfel2 <- 1 # Würfel 2
m <- 0 # Anzahl Würfe
Zunächst muss man wiederum 3 Objekte erstellen, die man im Folgenden benutzen möchte. wuerfel1
und wuerfel2
sollen jeweils die Augenzahl eines Würfels abspeichern. Das wichtige dabei ist, dass man diesen beiden Objekten am Anfang ungleiche Zahlen zuordnet, denn ansonsten ist die Bedingung der Funktion direkt erfüllt.
m
soll dann die Anzahl der Durchgänge zählen, die man bis zum Erfolg (“Pasch”) benötigt. Diese Variable sollte (logischerweise) bei Null beginnen. Warum das so ist, wird in der folgenden Funktion deutlich:
while (wuerfel1 != wuerfel2) { # Bedingung
m <- m + 1 # zählt die Durchgänge - pro Durchlauf +1
wuerfel1 <- sample(1:6, 1) # Würfel 1
wuerfel2 <- sample(1:6, 1) # Würfel 2
print(c(wuerfel1, wuerfel2)) # Die beiden Augenzahlen werden pro Wurf ausgegeben, um die Ergebnisse nachvollziehen zu können.
}
## [1] 4 2
## [1] 3 6
## [1] 6 3
## [1] 3 2
## [1] 3 1
## [1] 1 4
## [1] 1 1
Jetzt kann man an der Variable m
ablesen, wie viele Versuche man bis zu einem Pasch gebraucht hat. Denn angefangen bei 0 wurde m
in jedem Durchlauf um 1 erhöht. In diesem Fall hat es erst im siebten Versuch geklappt.
m
## [1] 7
Das war es erst einmal mit der Einführung. Viel Spaß bei diesem Projekt!