Java/Roulette: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
K (10 Versionen importiert)
(formatiert)
Markierung: 2017-Quelltext-Bearbeitung
 
Zeile 143: Zeile 143:


{{Übung|
{{Übung|
;1.
# 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>.
;Zur Klasse Kugel
# 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.
;2.
# 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“.  
;3.
# 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“.
;Zur Klasse Spieler
#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.
;4.
# 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.
;5.
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“.
;6.
;Zur Klasse Croupier
Erläutern Sie, inwiefern der Croupier die Spieler und die Kugel verwaltet.
Erläutern Sie die Funktionsweise von spieleEineRunde().  
;7.
Falls die Bank negatives Vermögen hat, soll angezeigt werden: „Bank ist pleite“.  
;8.
Ergänzen Sie eine Methode, die mehrfach nacheinander Spiele ausführt.
Prüfen Sie damit noch einmal die Aussage: „auf Dauer gewinnt das Casino“.
;9.
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.
;10.
Ergänzen Sie das Programm um weitere 2 Spieler.
;11.
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?
}}
}}
Zeile 181: Zeile 159:


[[Kategorie:Java]]
[[Kategorie:Java]]
[[Kategorie:Unterrichtsideen/Informatik]]
[[Kategorie:Unterrichtsidee]]
[[Kategorie:Informatik]]

Aktuelle Version vom 19. August 2019, 17:29 Uhr

Eine Umsetzung eines Roulettespiels mit BlueJ.

BlueJRoulette.gif

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
  1. 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 von rolleKugel() und danach von testeKugel().
  2. 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“.
  3. Zur Klasse Spieler
    Testen Sie die Klasse Spieler, indem Sie ein Objekt Kugel anlegen, den Inspector aufrufen und die Methoden testen.
  4. 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.
  5. 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“.
  6. Zur Klasse Croupier
    Erläutern Sie, inwiefern der Croupier die Spieler und die Kugel verwaltet.
    Erläutern Sie die Funktionsweise von spieleEineRunde().
  7. Falls die Bank negatives Vermögen hat, soll angezeigt werden: „Bank ist pleite“.
  8. Ergänzen Sie eine Methode, die mehrfach nacheinander Spiele ausführt.
    Prüfen Sie damit noch einmal die Aussage: „auf Dauer gewinnt das Casino“.
  9. 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.
  10. Ergänzen Sie das Programm um weitere 2 Spieler.
  11. 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?