Java und Java/Roulette: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
main>Ugh
K (→‎Software: BlueJ Link)
 
main>Karl Kirst
K (-kat Informatik)
 
Zeile 1: Zeile 1:
Java ist eine objektorientierte, plattformunabhängige Programmiersprache und als solche ein eingetragenes Warenzeichen der Firma Sun Microsystems. Üblicherweise benötigen Java-Programme zur Ausführung eine spezielle Umgebung (Java Virtual Machine). Der Vorteil ist, dass nur diese Umgebung an verschiedene Computer und Betriebssysteme angepasst werden muss. Sobald dies geschehen ist, laufen auf der Plattform alle Java-Programme ohne Anpassungsarbeiten.
{{Kurzinfo-2|Java|Idee}}
aus: http://de.wikipedia.org/wiki/Java_%28Programmiersprache%29
Eine Umsetzung eines Roulettespiels mit [[BlueJ]].


== Software ==
[[Bild:BlueJRoulette.gif|center]]
*[http://www.eclipse.org/ Eclipse]
:Eclipse ist eine universelle KOSTENLOSE Entwicklungsplattform. Ecplise ist selber ein Java-Programm und bietet für die Java-Programmierung auch die beste Unterstützung.  '''Ein echtes TOP-Programm!''' Es gibt zahlreiche Plugins, die die Funktionen von Eclipse erweitern können.
* [http://bluej.org BlueJ]
:BlueJ ist eine kostenlose Entwicklungsumgebung, die auf die Bedürfnisse von Einsteigern im Unterricht Rücksicht nimmt. Zum Überwinden der ersten Hürden sehr sinnvoll. Einstieg mit Screenshots: http://www.hs-niederrhein.de/~gstwolf/inf11/bluej/bluej_info.html
* [http://www.fujaba.de Fujaba]  
:ist ein UML-Werkzeug mit Code-Generator, mit dem viel Objektorientierung ohne viel Quellcode gelehrt und gelernt werden kann (s.a. [http://www.informatik.hu-berlin.de/~reinhold/WEB/Fujaba/fujaba.htm Seiten der HU-Berlin])
* Together


== Kurse und Bücher zum Erlernen ==
==Quelltext==
;Klasse Kugel
<java>
public class Kugel
{
    // instance variables - replace the example below with your own
    private int zahl;
    private String farbe;


* http://de.wikibooks.org/wiki/Java - Ein Wikibook Kurs im Aufbau
    // Konstruktor - Startposition
    public Kugel()
    {
        zahl = 0;
        farbe = "gruen";
    }


* [http://www.programmierkurs-java.de/ Programmierkurs der Uni Oldenburg]
    public void rolleKugel()
:Den Kurs gibt es in verschiedenen Varianten (Powerpoint- und PDF-Folien, Filme) zusammen mit Übungen und Beispielprogrammen.
    {
        // 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";
            }
        }
    }


* [http://www.javabuch.de/download.html Handbuch der Java-Programmierung]
    public String getFarbe(){
:Auch das neuste Buch des Standardwerkes (Nachfolger von "Go To Java 2") von Guido Kröger kann als gepackte Datei in Form von HTML-Seiten heruntergeladen werden. Dazu gibt es auch Beispieldateien.
        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
</java>


'''Java ist auch eine Insel'''
;Klasse Spieler
:Als [http://www.galileopro.de/openbook/javainsel4/galileocomputing_javainsel4.zip HTML-Version]  bei [http://www.galileocomputing.de/katalog/openbook/ Galileo-Open-Books] oder [http://www.java-tutor.com/javabuch/ PDF-Dokument] herunterladbar.
<java>
public class Spieler
{
    private double vermoegen;
    private double einsatz;
    private String farbe;


'''Java 2'''
    public Spieler()
:Buch, das als [http://www.galileocomputing.de/openbook/java2/ HTML-Version] bei [http://www.galileocomputing.de/katalog/openbook/ Galileo-Open-Books] heruntergeladen werden können.
    {
        vermoegen = 1000;
        einsatz = 10;
        farbe = "schwarz";
    }
   
    public double getEinsatz() {
        return einsatz;
    }


'''Kurztutorial''' (erlaubte Vervielfältigung nichtkommerziell - passen auf eine Diskette)
    public String getFarbe() {
* http://www.boku.ac.at/javaeinf/
        return farbe;
* http://www.highscore.de/
    }
   
    public void verbucheSpielergebnis(double betrag) {
        vermoegen += betrag; 
    }
}
</java>


== Unterrichtsreihen und -materialien ==
;Klasse Croupier
* [http://www.gymmelk.ac.at/~nus/informatik/wpf/JAVA/index.php?kat=grund&teil=grund Nussbaumer - JAVA (eine kleine Einführung)] dazu: http://www.gymmelk.ac.at/~nus/informatik/wpf/JAVA/javahtml/index.html
<java>
public class Croupier
{
    private Kugel k;
    private Spieler spieler1;
    private Spieler spieler2;


*[http://www.zitadelle.juel.nw.schule.de/if/java/java.html Materialien] des Gym. Zitadelle, Jülich
    private double bankvermoegen;


*[http://www.gailer-net.de/tutorials/java/java-toc.html Java lernen interaktiv]
    public Croupier(Spieler pSpieler1, Spieler pSpieler2)
    {
        k = new Kugel();
        bankvermoegen = 1000000;
        spieler1 = pSpieler1;
        spieler2 = pSpieler2;
    }


*[http://www.gymmelk.ac.at/nus/informatik/wpf/JAVA/index.php Unterrichtsbeispiele zu JAVA]
    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()); 
        }       
    }
}
</java>


[[Kategorie:Informatik]]
{{Übung|
[[Kategorie:Programmiersprache]]
;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?
}}
 
 
[[Kategorie:Java]]

Version vom 29. Oktober 2007, 13:55 Uhr

Vorlage:Kurzinfo-2 Eine Umsetzung eines Roulettespiels mit BlueJ.

BlueJRoulette.gif

Quelltext

Klasse Kugel

<java> 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 </java>

Klasse Spieler

<java> 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;   
   }

} </java>

Klasse Croupier

<java> 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());   
       }        
   }

} </java>


Ü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?