fh.h42.de - What´s the question?
Navigation: [START] [01-ss] [prog] [p-java001.htm]
[print]  [e-mail]  [main]

Javaprogrammierung - Übung 2 (Aufgabe 7)


Lösung zu Übung 2, Aufgabe 7:

Wir spielen Würfelpoker! Es gibt prinzipiell beliebig viele Mitspieler, zur Vereinfachung legen Sie die Anzahl aber auf 2 fest. Pro Runde wirft jeder Mitspieler jeweils 5 Würfel. Es können nach dem Würfeln folgende Fälle, aufgelistet in der Höhe ihrer Bewertung, auftreten:

  • Grand gleiche Augenzahlen auf allen 5 Würfeln
  • Poker gleiche Augenzahlen auf 4 Würfeln
  • Full House 3 gleiche und 2 gleiche Augenzahlen
  • Sequenz Fortlaufende Folge (1,2,3,4,5 oder 2,3,4,5,6)
Es gibt nur einen Gewinner in jeder Runde, der einen Punkt erhält. Bei Unentschieden gibt es keinen Gewinner. Schreiben Sie ein Java-Programm, das dieses Würfelspiel simuliert. Jeder Spieler wird durch ein Feld mit 6 Einträgen modelliert. Das Würfeln geschieht durch die Bestimmung von 5 Zufallszahlen (s.u.). Feldeintrag i, in jeder Runde mit 0 initialisiert, wird um 1 erhöht, wenn auf einem Würfel die Augenzahl i vorhanden war. Führen Sie nach dem Würfeln die Bewertung eines Spielers durch (z.B. Grand =4, Poker=3 usw.) und vergleichen Sie die Bewertungen der einzelnen Spieler, um den Sieger der Runde zu bestimmen.

Anmerkung: Die Lösung wurde gegenüber der gestellten Aufgabe dahingehend erweitert, dass man die Anzahl der Spieler und die Anzahl der Runden variieren kann.
Lösung zu Übung 2, Aufgabe 7, Quellcode:
import java.util.*;

/**
 *
 * Task: Write a program that simulates a poker game with 5 dices.
 *
 *
 * @author <a href="mailto:le-uni@h42.de">Lars Ehrhardt</a>
 */

public class Aufgabe7a {

    public static int NrPlayers = 9;
    public static int NrRounds = 2;

    /**
     * Describe <code>main</code> method here.
     *
     * @param args a <code>String[]</code> value
     */

    public static void main (String[] args) {

    int Game[][][];
    Random r = new java.util.Random();

    Game = new int[NrPlayers][NrRounds+1][5];

    for (int Round=1; Round <= NrRounds; Round++) {

        for (int Player = 0; Player < NrPlayers; Player++) {
        Game = rollDice(Game, Round, Player, r);
        Game[Player][0][0] = processResults(Game[Player][Round], Round, Player);
        } // end of for (int i = 0, i < NrPlayers, i++)

        processWinner(Game);
    }

    } // end of main ()



    /**
     * Describe <code>rollDice</code> method here.
     *
     * @param Game an <code>int[][][]</code> value
     * @param Round an <code>int</code> value
     * @param Player an <code>int</code> value
     * @param r a <code>Random</code> value
     * @return an <code>int[][][]</code> value
     */
    public static int[][][] rollDice(int[][][] Game, int Round, int Player, Random r) {

    for (int i = 0; i < Game.length; i++) {
        for (int j = 0; j < 5; j++) {
        Game[i][Round][j] = r.nextInt(6)+1;
        } // end of for (int j = 0; ...
    } // end of for (int i = 0; ...
    return(Game);
    }


    /**
     * Describe <code>processResults</code> method here.
     *
     * @param Dimes an <code>int[]</code> value
     * @param Round an <code>int</code> value
     * @param Player an <code>int</code> value
     * @return an <code>int</code> value
     */
    public static int processResults(int[] Dimes, int Round, int Player) {
    int Win = 0;
    int[] EyesCount = {0, 0, 0, 0, 0, 0}; // Initialize our EyesCount Array

    System.out.print("Results for player " + (Player+1) + " in round " + (Round) + ":");
    for (int i = 0; i < Dimes.length; i++) {
        System.out.print(" " + Dimes[i]);
        switch (Dimes[i]) {
        case 1: EyesCount[0] = EyesCount[0] + 1 ;break;
        case 2: EyesCount[1] = EyesCount[1] + 1; break;
        case 3: EyesCount[2] = EyesCount[2] + 1; break;
        case 4: EyesCount[3] = EyesCount[3] + 1; break;
        case 5: EyesCount[4] = EyesCount[4] + 1; break;
        case 6: EyesCount[5] = EyesCount[5] + 1; break;
        default: /* Add exception, when we learn how to do that! -);*/ break;
        } // end of switch (Dimes[i])
    } // end of for (int i = 0; i < Dimes.length; i++)

    //Process our EyesCount-array and see, if the player was lucky
    if ( (EyesCount[1]==1) && (EyesCount[2]==1) && (EyesCount[3]==1) && (EyesCount[4]==1) )
        if ((EyesCount[0]==1) || (EyesCount[5]==1)) {
        Win = 1;
        System.out.print(" (Sequence)! ");
        } // end of if ((EyesCount[0]==1) || (EyesCount[5]==1))
        else  ;
    else {
        for (int j = 0; j < 5 ; j++) {
        switch (EyesCount[j]) {
        case 5: Win = 4; System.out.print(" (Grand)! "); break;
        case 4: Win = 3; System.out.print(" (Poker)! "); break;
        case 3: {
            for (int h = 0; h < 5; h++) {
            if (EyesCount[h]==2) {
                Win = 2;
                System.out.print(" (Full House)! ");
            } // end of if (EyesCount[h]==2)
            } // end of for (int ...
            break;
        }
        }
        } // end of for (int j = 1; j <= 6; j++) {)
    } // end of else
    System.out.println("");
    return(Win);
    } //end of processResults



    /**
     * Describe <code>processWinner</code> method here.
     *
     * @param Game an <code>int[][][]</code> value
     */

    public static void processWinner(int[][][] Game) {
    int Winner = 0;
    int Points = 0;

    for (int i = 0; i < Game.length; i++) {

        if (Game[i][0][0] >= Points) {
        if (Game[i][0][0] > Points) {
            Winner = i+1;
            Points = Game[i][0][0];
            }
        else
            Winner = 0;
        }
    } // end of for (int i; ...

    if(Winner > 0) System.out.println("The winner is player " + Winner);
    else  System.out.println("Sorry, no one was lucky!");
    System.out.println("******************************************");

    } //end of processWinner

} //end of class

(Keine Garantie auf Richtigkeit!)
zurück zur Übersicht
News
12.10.: Seiten zum WS03 aktualisiert
02.09: Seite zum WLAN-Projekt aktualisiert
10.04: Seiten zum SS03 aktualisiert
12.08: Eigene Vorlage für Seminararbeiten der FH hinzugefügt
14.07: Informationen zum 5. Semester hinzugefügt.
14.07: Druckfunktion für die Seiten überarbeitet: Auflistung der Hyperlinks über Fußnoten realisiert.
04.06: Links für IT-Sec neu strukturiert
27.04: Projekte des SS02 hinzugefügt
07.04: Lehrveranstaltungen des SS02 hinzugefügt
07.04: Dokumentation zum X-Terminals Projekt
Navigation: [START] [01-ss] [prog] [p-java001.htm]
[print]  [e-mail]  [main]