Java/Roulette: Unterschied zwischen den Versionen
Aus ZUM-Unterrichten
< Java
main>Karl Kirst (Babel -> Kurzinfo; +Kurzinfo Idee) |
(formatiert) Markierung: 2017-Quelltext-Bearbeitung |
||
(7 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Eine Umsetzung eines Roulettespiels mit [[BlueJ]]. | Eine Umsetzung eines Roulettespiels mit [[BlueJ]]. | ||
Zeile 6: | Zeile 5: | ||
==Quelltext== | ==Quelltext== | ||
;Klasse Kugel | ;Klasse Kugel | ||
<java> | <source lang="java"> | ||
public class Kugel | public class Kugel | ||
{ | { | ||
Zeile 71: | Zeile 70: | ||
} // Ende der Klasse | } // Ende der Klasse | ||
</ | </source> | ||
;Klasse Spieler | ;Klasse Spieler | ||
<java> | <source lang="java"> | ||
public class Spieler | public class Spieler | ||
{ | { | ||
Zeile 100: | Zeile 99: | ||
} | } | ||
} | } | ||
</ | </source> | ||
;Klasse Croupier | ;Klasse Croupier | ||
<java> | <source lang="java"> | ||
public class Croupier | public class Croupier | ||
{ | { | ||
Zeile 141: | Zeile 140: | ||
} | } | ||
} | } | ||
</ | </source> | ||
{{Übung| | {{Übung| | ||
# Zur Klasse Kugel<br>Testen Sie die Klasse Kugel, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen.<br>Erläutern Sie die Funktionsweise von <code>rolleKugel()</code> und danach von <code>testeKugel()</code>. | |||
# Testen Sie anhand von <code>testeKugel</code>, ob der Erwartungswert der Farben erfüllt wird. Testen Sie dazu einmal 100, 1000 und 1000000 Vorgänge.<br>Nehmen Sie Stellung zu der Aussage: „auf Dauer gewinnt das Casino“. | |||
Testen Sie die Klasse Kugel, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen. | # Zur Klasse Spieler<br>Testen Sie die Klasse Spieler, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen. | ||
Erläutern Sie die Funktionsweise von rolleKugel() und danach von testeKugel(). | #Ergänzen Sie die Klassen <code>setEinsatz(...)</code> und <code>setFarbe(...)</code>, die den Einsatz bzw. die Farbe verändern.<br>Der Einsatz darf nicht negativ sein. Falls eine negative Zahl eingegeben wird, wird der Einsatz auf 0 gesetzt. | ||
# Ergänzen Sie <code>verbucheErgebnis()</code> so, dass der Einsatz auf 0 gesenkt wird, wenn das Vermögen des Spielers im negativen Bereich ist.<br>Es soll eine Ausgabe auf der Konsole passieren: „Ein Spieler ist pleite“. | |||
Testen Sie anhand von testeKugel, ob der Erwartungswert der Farben erfüllt wird. Testen Sie dazu einmal 100, 1000 und 1000000 Vorgänge. | # Zur Klasse Croupier<br>Erläutern Sie, inwiefern der Croupier die Spieler und die Kugel verwaltet.<br>Erläutern Sie die Funktionsweise von <code>spieleEineRunde()</code>. | ||
Nehmen Sie Stellung zu der Aussage: „auf Dauer gewinnt das Casino“. | # Falls die Bank negatives Vermögen hat, soll angezeigt werden: „Bank ist pleite“. | ||
# Ergänzen Sie eine Methode, die mehrfach nacheinander Spiele ausführt.<br>Prüfen Sie damit noch einmal die Aussage: „auf Dauer gewinnt das Casino“. | |||
#Eine Gewinnstrategie:<br>Verändern Sie das Setzverhalten des Spielers wie folgt: wenn der Spieler verloren hat, verdoppelt er den Einsatz. Gewinnt er, ist der Einsatz wieder 10.<br>Prüfen Sie die Aussage: Auf lange Sicht ist der Spieler auch damit pleite. | |||
Testen Sie die Klasse Spieler, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen. | # Ergänzen Sie das Programm um weitere 2 Spieler. | ||
# Sollten Sie wirklich schon fertig sein: Wie könnte man auf ähnliche Weise ein „Fußballtoto“ programmieren. Dabei sollen nur die Spiele einer Mannschaft erfasst werden. Die Spieler setzen auf „Sieg“, „Verlust“ und „Unentschieden“. | |||
Ergänzen Sie die Klassen setEinsatz(...) und setFarbe(...), die den Einsatz bzw. die Farbe verändern. | |||
Der Einsatz darf nicht negativ sein. Falls eine negative Zahl eingegeben wird, wird der Einsatz auf 0 gesetzt. | |||
Ergänzen Sie verbucheErgebnis() so, dass der Einsatz auf 0 gesenkt wird, wenn das Vermögen des Spielers im negativen Bereich ist. | |||
Es soll eine Ausgabe auf der Konsole passieren: „Ein Spieler ist pleite“. | |||
Erläutern Sie, inwiefern der Croupier die Spieler und die Kugel verwaltet. | |||
Erläutern Sie die Funktionsweise von spieleEineRunde(). | |||
Falls die Bank negatives Vermögen hat, soll angezeigt werden: „Bank ist pleite“. | |||
Ergänzen Sie eine Methode, die mehrfach nacheinander Spiele ausführt. | |||
Prüfen Sie damit noch einmal die Aussage: „auf Dauer gewinnt das Casino“. | |||
Eine Gewinnstrategie: | |||
Verändern Sie das Setzverhalten des Spielers wie folgt: wenn der Spieler verloren hat, verdoppelt er den Einsatz. Gewinnt er, ist der Einsatz wieder 10. | |||
Prüfen Sie die Aussage: Auf lange Sicht ist der Spieler auch damit pleite. | |||
Ergänzen Sie das Programm um weitere 2 Spieler. | |||
Sollten Sie wirklich schon fertig sein: Wie könnte man auf ähnliche Weise ein „Fußballtoto“ programmieren. Dabei sollen nur die Spiele einer Mannschaft erfasst werden. Die Spieler setzen auf „Sieg“, „Verlust“ und „Unentschieden“. | |||
Erläutern Sie den Unterschied zum Roulettespiel – Warum ist eine Methode wie „testeKugel()“ beim Fußballtoto nicht so aussagekräftig wie beim Roulette? | Erläutern Sie den Unterschied zum Roulettespiel – Warum ist eine Methode wie „testeKugel()“ beim Fußballtoto nicht so aussagekräftig wie beim Roulette? | ||
}} | }} | ||
[[Kategorie:Java]] | |||
[[Kategorie:Unterrichtsidee]] | |||
[[Kategorie:Informatik]] | [[Kategorie:Informatik]] | ||
Aktuelle Version vom 19. August 2019, 17:29 Uhr
Eine Umsetzung eines Roulettespiels mit BlueJ.
Quelltext
- Klasse Kugel
public class Kugel
{
// instance variables - replace the example below with your own
private int zahl;
private String farbe;
// Konstruktor - Startposition
public Kugel()
{
zahl = 0;
farbe = "gruen";
}
public void rolleKugel()
{
// Zahl zwischen 0 und 36
zahl = (int) ((Math.random()*37));
if (zahl == 1 || zahl == 3 || zahl == 5
||zahl == 7 || zahl == 9 || zahl == 12
||zahl == 14 ||zahl == 16 ||zahl == 18
||zahl == 19 ||zahl == 21 ||zahl == 23
||zahl == 25 ||zahl == 27 ||zahl == 30
||zahl == 32 ||zahl == 34 ||zahl == 36) {
farbe = "rot";
}
else {
if (zahl == 0) {
farbe = "gruen";
}
else {
farbe = "schwarz";
}
}
}
public String getFarbe(){
return farbe;
}
public void testeKugel(int anzahl){
int anzahlRot=0;
int anzahlSchwarz=0;
int anzahlGruen=0;
for (int i=1;i<=anzahl;i++){
rolleKugel();
if (farbe.equals("rot")) {
anzahlRot++;
}
if (farbe.equals("schwarz")) {
anzahlSchwarz++;
}
if (farbe.equals("gruen")) {
anzahlGruen++;
}
}
System.out.println(anzahlRot+" von "+anzahl+" waren rot.");
System.out.println((anzahlRot*1000/anzahl)/10.0 + " Prozent der Spiele.\n");
System.out.println(anzahlSchwarz+" von "+anzahl+" waren schwarz.");
System.out.println((anzahlSchwarz*1000/anzahl)/10.0 + " Prozent der Spiele.\n");
System.out.println(anzahlGruen+" von "+anzahl+" waren gruen.");
System.out.println((anzahlGruen*1000/anzahl)/10.0 + " Prozent der Spiele.\n");
}
} // Ende der Klasse
- Klasse Spieler
public class Spieler
{
private double vermoegen;
private double einsatz;
private String farbe;
public Spieler()
{
vermoegen = 1000;
einsatz = 10;
farbe = "schwarz";
}
public double getEinsatz() {
return einsatz;
}
public String getFarbe() {
return farbe;
}
public void verbucheSpielergebnis(double betrag) {
vermoegen += betrag;
}
}
- Klasse Croupier
public class Croupier
{
private Kugel k;
private Spieler spieler1;
private Spieler spieler2;
private double bankvermoegen;
public Croupier(Spieler pSpieler1, Spieler pSpieler2)
{
k = new Kugel();
bankvermoegen = 1000000;
spieler1 = pSpieler1;
spieler2 = pSpieler2;
}
public void spieleEineRunde()
{
k.rolleKugel();
if (k.getFarbe().equals(spieler1.getFarbe())) {
bankvermoegen-=spieler1.getEinsatz();
spieler1.verbucheSpielergebnis(spieler1.getEinsatz());
}
else {
bankvermoegen+=spieler1.getEinsatz();
spieler1.verbucheSpielergebnis(-spieler1.getEinsatz());
}
if (k.getFarbe().equals(spieler2.getFarbe())) {
bankvermoegen-=spieler2.getEinsatz();
spieler2.verbucheSpielergebnis(spieler2.getEinsatz());
}
else {
bankvermoegen+=spieler2.getEinsatz();
spieler2.verbucheSpielergebnis(-spieler2.getEinsatz());
}
}
}
Übung
- Zur Klasse Kugel
Testen Sie die Klasse Kugel, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen.
Erläutern Sie die Funktionsweise vonrolleKugel()
und danach vontesteKugel()
. - Testen Sie anhand von
testeKugel
, ob der Erwartungswert der Farben erfüllt wird. Testen Sie dazu einmal 100, 1000 und 1000000 Vorgänge.
Nehmen Sie Stellung zu der Aussage: „auf Dauer gewinnt das Casino“. - Zur Klasse Spieler
Testen Sie die Klasse Spieler, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen. - Ergänzen Sie die Klassen
setEinsatz(...)
undsetFarbe(...)
, die den Einsatz bzw. die Farbe verändern.
Der Einsatz darf nicht negativ sein. Falls eine negative Zahl eingegeben wird, wird der Einsatz auf 0 gesetzt. - Ergänzen Sie
verbucheErgebnis()
so, dass der Einsatz auf 0 gesenkt wird, wenn das Vermögen des Spielers im negativen Bereich ist.
Es soll eine Ausgabe auf der Konsole passieren: „Ein Spieler ist pleite“. - Zur Klasse Croupier
Erläutern Sie, inwiefern der Croupier die Spieler und die Kugel verwaltet.
Erläutern Sie die Funktionsweise vonspieleEineRunde()
. - Falls die Bank negatives Vermögen hat, soll angezeigt werden: „Bank ist pleite“.
- Ergänzen Sie eine Methode, die mehrfach nacheinander Spiele ausführt.
Prüfen Sie damit noch einmal die Aussage: „auf Dauer gewinnt das Casino“. - Eine Gewinnstrategie:
Verändern Sie das Setzverhalten des Spielers wie folgt: wenn der Spieler verloren hat, verdoppelt er den Einsatz. Gewinnt er, ist der Einsatz wieder 10.
Prüfen Sie die Aussage: Auf lange Sicht ist der Spieler auch damit pleite. - Ergänzen Sie das Programm um weitere 2 Spieler.
- Sollten Sie wirklich schon fertig sein: Wie könnte man auf ähnliche Weise ein „Fußballtoto“ programmieren. Dabei sollen nur die Spiele einer Mannschaft erfasst werden. Die Spieler setzen auf „Sieg“, „Verlust“ und „Unentschieden“.
Erläutern Sie den Unterschied zum Roulettespiel – Warum ist eine Methode wie „testeKugel()“ beim Fußballtoto nicht so aussagekräftig wie beim Roulette?