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.*;
@authorLars Ehrhardt
public class Aufgabe7a {
public static int NrPlayers = 9;
public static int NrRounds = 2;
main@paramargsString[]
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);
}
processWinner(Game);
}
}
rollDice@paramGameint[][][]@paramRoundint@paramPlayerint@paramrRandom@returnint[][][]
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;
} } return(Game);
}
processResults@paramDimesint[]@paramRoundint@paramPlayerint@returnint
public static int processResults(int[] Dimes, int Round, int Player) {
int Win = 0;
int[] EyesCount = {0, 0, 0, 0, 0, 0};
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: break;
} }
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)! ");
} 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)! ");
} } break;
}
}
} } System.out.println("");
return(Win);
}
processWinner@paramGameint[][][]
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;
}
}
if(Winner > 0) System.out.println("The winner is player " + Winner);
else System.out.println("Sorry, no one was lucky!");
System.out.println("******************************************");
}
}
(Keine Garantie auf Richtigkeit!)
|