Compare commits

..

2 Commits

Author SHA1 Message Date
hummel 13440e4437 Spiel weiter spielbar gemacht
Nun kann ein komplettes Spiel mit mehreren Spielern bis zum Befüllen
aller Kategorien gespielt werden.
2024-05-16 18:56:15 +02:00
hummel cdee044dd1 Update WürfelTest mit Testen der Verteilung 2024-05-16 17:57:03 +02:00
9 changed files with 176 additions and 92 deletions

3
.gitignore vendored 100644
View File

@ -0,0 +1,3 @@
/bin/
/.classpath
/.project

View File

@ -3,41 +3,47 @@ package de.hs_mannheim.informatik.games.kniffel.domain;
public class Gewinnkarte { public class Gewinnkarte {
private Kategorie[] kategorien; private Kategorie[] kategorien;
private final int KATEGORIE_ANZAHL = 6; private final int KATEGORIE_ANZAHL = 6;
private int summe;
public Gewinnkarte() { public Gewinnkarte() {
kategorien = new Kategorie[KATEGORIE_ANZAHL]; kategorien = new Kategorie[KATEGORIE_ANZAHL];
summe = 0;
for (int i = 1; i <= kategorien.length; i++) { for (int i = 1; i <= kategorien.length; i++) {
kategorien[i-1] = new Kategorie(i); kategorien[i-1] = new Kategorie(i);
} }
} }
public boolean punkteEintragen(int kategorie, Würfel[] würfel) { public boolean punkteEintragen(int kategorie, Würfel[] würfel) {
if (!kategorien[kategorie].isOffen()) if (!kategorien[kategorie].isOffen())
return false; return false;
kategorien[kategorie].punkteEintragen(würfel); summe+= kategorien[kategorie].punkteEintragen(würfel);
return true; return true;
} }
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
int i = 1; int i = 1;
for (Kategorie k : kategorien) { for (Kategorie k : kategorien) {
sb.append(String.format("%2d. %s: ", i++, k.getName())); sb.append(String.format("%2d. %s: ", i++, k.getName()));
if (k.isOffen()) if (k.isOffen())
sb.append("offen"); sb.append("offen");
else else
sb.append(k.getPunkte()); sb.append(k.getPunkte());
if (i <= kategorien.length) sb.append(System.lineSeparator());
sb.append(System.lineSeparator());
} }
sb.append(String.format("Summe: %3d Punkte", summe));
return sb.toString(); return sb.toString();
} }
public int getKategorieAnzahl() {
return KATEGORIE_ANZAHL;
}
} }

View File

@ -1,14 +1,16 @@
package de.hs_mannheim.informatik.games.kniffel.domain; package de.hs_mannheim.informatik.games.kniffel.domain;
import java.util.List; import java.util.ArrayList;
public class Spiel { public class Spiel {
private Spieler[] spieler; private Spieler[] spieler;
private int spieleranzahl; private int spieleranzahl;
private int aktuellerSpieler; private int aktuellerSpieler;
private Würfelbecher becher; private Würfelbecher becher;
private int rundenzähler;
private int spielerzähler;
public Spiel(List<String> spielernamen) { public Spiel(ArrayList<String> spielernamen) {
spieleranzahl = spielernamen.size(); spieleranzahl = spielernamen.size();
spieler = new Spieler[spieleranzahl]; spieler = new Spieler[spieleranzahl];
@ -17,13 +19,15 @@ public class Spiel {
} }
aktuellerSpieler = (int)(Math.random() * spieleranzahl); aktuellerSpieler = (int)(Math.random() * spieleranzahl);
rundenzähler = 1;
spielerzähler = 1;
becher = new Würfelbecher(); becher = new Würfelbecher();
becher.würfle(); becher.würfle();
} }
public String getGewinnkartentextAktuellerSpieler() { public Gewinnkarte getGewinnkarteAktuellerSpieler() {
return spieler[aktuellerSpieler].getGewinnkarte().toString(); return spieler[aktuellerSpieler].getGewinnkarte();
} }
public String getNameAktuellerSpieler() { public String getNameAktuellerSpieler() {
@ -42,5 +46,16 @@ public class Spiel {
public boolean punkteEintragen(int kategorie) { public boolean punkteEintragen(int kategorie) {
return spieler[aktuellerSpieler].getGewinnkarte().punkteEintragen(kategorie - 1, becher.getWürfel()); return spieler[aktuellerSpieler].getGewinnkarte().punkteEintragen(kategorie - 1, becher.getWürfel());
} }
public boolean nächsterSpieler() {
aktuellerSpieler = ++aktuellerSpieler % spieleranzahl;
if (++spielerzähler > spieleranzahl) {
++rundenzähler;
spielerzähler = 1;
}
return rundenzähler <= spieler[aktuellerSpieler].getGewinnkarte().getKategorieAnzahl();
}
} }

View File

@ -13,13 +13,8 @@ public class Würfel {
} }
public int würfle() { public int würfle() {
var a = 1;
augen = 1 + (int)(Math.random() * SEITEN); augen = 1 + (int)(Math.random() * SEITEN);
// try this with Coverage as
if (augen == 6 && a >= 1);
System.out.println("Los für MÄDN!");
return augen; return augen;
} }

View File

@ -6,28 +6,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
class WürfelTest { class WürfelTest {
private Würfel w;
@BeforeAll
static void initialisiere() {
System.out.println("Einmal vor allem!");
}
@BeforeEach
void vorJedem() {
w = new Würfel();
System.out.println("Vor jedem!");
}
@Test @Test
void testWürfelEinsBisSechs() { void testWürfelEinsBisSechs() {
Würfel w = new Würfel();
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
int augen = w.würfle(); int augen = w.würfle();
assertTrue(augen >= 1 && augen <= 6); assertTrue(augen >= 1 && augen <= 6);
@ -36,7 +23,9 @@ class WürfelTest {
} }
@Test @Test
void testVerteilung() { void testAugenVerteilung() {
Würfel w = new Würfel();
Set<Integer> zahlen = new HashSet<>(); Set<Integer> zahlen = new HashSet<>();
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {

View File

@ -1,14 +1,35 @@
package de.hs_mannheim.informatik.games.kniffel.facade; package de.hs_mannheim.informatik.games.kniffel.facade;
import java.util.List; import java.util.ArrayList;
import de.hs_mannheim.informatik.games.kniffel.domain.Gewinnkarte;
import de.hs_mannheim.informatik.games.kniffel.domain.Spiel; import de.hs_mannheim.informatik.games.kniffel.domain.Spiel;
public class KniffelApi { public class KniffelApi {
private Spiel spiel;
public Spiel starteSpiel(List<String> spielernamen, boolean starWarsModus) {
public void starteSpiel(ArrayList<String> spielernamen, boolean starWarsModus) {
// TODO: StarWars über Vererbung einbauen? // TODO: StarWars über Vererbung einbauen?
return new Spiel(spielernamen); spiel = new Spiel(spielernamen);
} }
public Gewinnkarte getGewinnkarte() {
return spiel.getGewinnkarteAktuellerSpieler();
}
public String getNameAktuellerSpieler() {
return spiel.getNameAktuellerSpieler();
}
public int[] wurfDurchführen(String... würfel) {
return spiel.wurfDurchführen(würfel);
}
public boolean punkteEintragen(int kategorie) {
return spiel.punkteEintragen(kategorie);
}
public boolean nächsterSpieler() {
return spiel.nächsterSpieler();
}
} }

View File

@ -3,13 +3,11 @@ package de.hs_mannheim.informatik.games.kniffel.tui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Scanner; import java.util.Scanner;
import de.hs_mannheim.informatik.games.kniffel.domain.Spiel;
import de.hs_mannheim.informatik.games.kniffel.facade.KniffelApi; import de.hs_mannheim.informatik.games.kniffel.facade.KniffelApi;
public class SpielStart { public class SpielStart {
private Scanner kb; private Scanner kb;
private KniffelApi api; private KniffelApi api;
private Spiel spiel;
public SpielStart(Scanner kb, KniffelApi api) { public SpielStart(Scanner kb, KniffelApi api) {
this.kb = kb; this.kb = kb;
@ -43,9 +41,9 @@ public class SpielStart {
String sw = kb.nextLine(); String sw = kb.nextLine();
spiel = api.starteSpiel(spielernamen, sw.toLowerCase().equals("j")); api.starteSpiel(spielernamen, sw.toLowerCase().equals("j"));
new SpielrundeSpielen(kb, spiel).verarbeiteEingabe(); new SpielrundeSpielen(kb, api).verarbeiteEingabe();
} }
} }

View File

@ -2,68 +2,75 @@ package de.hs_mannheim.informatik.games.kniffel.tui;
import java.util.Scanner; import java.util.Scanner;
import de.hs_mannheim.informatik.games.kniffel.domain.Spiel; import de.hs_mannheim.informatik.games.kniffel.facade.KniffelApi;
public class SpielrundeSpielen { public class SpielrundeSpielen {
private Scanner kb; private Scanner kb;
private Spiel spiel; private KniffelApi api;
public SpielrundeSpielen(Scanner kb, Spiel spiel) { public SpielrundeSpielen(Scanner kb, KniffelApi api) {
this.kb = kb; this.kb = kb;
this.spiel = spiel; this.api = api;
} }
public void verarbeiteEingabe() { public void verarbeiteEingabe() {
gewinnkarteAusgeben();
String[] zuWürfeln = new String[0];
for (int i = 1; i <= 3; i++) {
int[] würfelwerte = this.spiel.wurfDurchführen(zuWürfeln);
System.out.print(i + ". Wurf: ");
for (int w : würfelwerte) {
System.out.print(w + " ");
}
System.out.println();
System.out.println(" 1 2 3 4 5");
System.out.println();
if (i == 3)
break;
System.out.println("Welche Würfel sollen noch einmal geworfen werden? ");
System.out.println("Nr. des/der zu werfenden Würfel(s) durch Leerzeichen getrennt eingeben.");
System.out.println("Eine leere Eingabe, beendet das Würfeln.");
System.out.print("Eingabe: ");
String eingabe = kb.nextLine();
if (eingabe.isEmpty())
break;
zuWürfeln = eingabe.split(" ");
}
gewinnkarteAusgeben();
System.out.println("In welcher Kategorie sollen die Punkte eingetragen werden?");
do { do {
System.out.print("> "); System.out.print(">>>>>>>>>");
int kategorie= Integer.parseInt(kb.nextLine()); gewinnkarteAusgeben();
if (!this.spiel.punkteEintragen(kategorie)) String[] zuWürfeln = {"1", "2", "3", "4", "5"};
System.out.println("Kategorie bereits belegt, bitte andere wählen.");
else
break;
} while(false);
gewinnkarteAusgeben(); for (int i = 1; i <= 3; i++) {
int[] würfelwerte = api.wurfDurchführen(zuWürfeln);
System.out.print(i + ". Wurf: ");
for (int w : würfelwerte) {
System.out.print(w + " ");
}
System.out.println();
System.out.println(" 1 2 3 4 5");
System.out.println();
if (i == 3)
break;
System.out.println("Welche Würfel sollen noch einmal geworfen werden? ");
System.out.println("Nr. des/der zu werfenden Würfel(s) durch Leerzeichen getrennt eingeben.");
System.out.println("Eine leere Eingabe, beendet das Würfeln.");
System.out.print("Eingabe: ");
String eingabe = kb.nextLine();
if (eingabe.isEmpty())
break;
zuWürfeln = eingabe.split(" ");
}
gewinnkarteAusgeben();
System.out.println("In welcher Kategorie sollen die Punkte eingetragen werden?");
do {
System.out.print("> ");
int kategorie= Integer.parseInt(kb.nextLine());
if (!api.punkteEintragen(kategorie))
System.out.println("Kategorie bereits belegt, bitte andere wählen.");
else
break;
} while(false);
gewinnkarteAusgeben();
} while(api.nächsterSpieler());
System.out.println("Spielende!");
// TODO: Gewinnerprüfung
} }
private void gewinnkarteAusgeben() { private void gewinnkarteAusgeben() {
System.out.println(); System.out.println();
System.out.println("##################################################"); System.out.println("##################################################");
System.out.println("Gewinnkarte von " + this.spiel.getNameAktuellerSpieler()); System.out.println("Gewinnkarte von " + api.getNameAktuellerSpieler());
System.out.println(this.spiel.getGewinnkartentextAktuellerSpieler()); System.out.println(api.getGewinnkarte().toString());
System.out.println("##################################################"); System.out.println("##################################################");
System.out.println(); System.out.println();
} }

View File

@ -0,0 +1,50 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.HashSet;
import java.util.Set;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class WürfelTest {
@Test
void testWürfelEinsBisSechs() {
Würfel w = new Würfel();
for (int i = 0; i < 1000; i++) {
int augen = w.würfle();
assertTrue(augen >= 1 && augen <= 6);
assertEquals(augen, w.getAugen());
}
}
@Test
void testAugenVerteilung() {
Würfel w = new Würfel();
Set<Integer> zahlen = new HashSet<>();
for (int i = 0; i < 1000; i++) {
zahlen.add(w.würfle());
}
assertEquals(6, zahlen.size());
}
@Test
@Disabled
void test8erWürfel() {
Würfel w = new Würfel(8);
for (int i = 0; i < 1000; i++) {
int augen = w.würfle();
assertTrue(augen >= 1 && augen <= 8);
}
}
}