Spielstart implementiert

Spielstart mit Anzeige einer rudimentären Gewinnkarte für den ersten
Spieler implemetiert.
refactoringFassade
hummel 2024-05-14 12:02:38 +02:00
parent ace5d60a33
commit eb75d9f924
10 changed files with 235 additions and 9 deletions

View File

@ -0,0 +1,32 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
public class Gewinnkarte {
private Kategorie[] kategorien;
private final int KATEGORIE_ANZAHL = 6;
public Gewinnkarte() {
kategorien = new Kategorie[KATEGORIE_ANZAHL];
for (int i = 1; i <= kategorien.length; i++) {
kategorien[i-1] = new Kategorie(i);
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
for (Kategorie k : kategorien) {
sb.append(k.getName() + ": ");
if (k.isOffen())
sb.append("offen");
else
sb.append(k.getPunkte());
sb.append(System.lineSeparator());
}
return sb.toString();
}
}

View File

@ -0,0 +1,40 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
public class Kategorie {
private String name;
private final int AUGEN;
private int punkte;
public Kategorie(int augen) {
this.AUGEN = augen;
this.name = this.AUGEN + "er";
this.punkte = -1;
}
public int punkteErmitteln(Würfel[] würfel) {
int punkte = 0;
for (Würfel w : würfel) {
if (w.getAugen() == AUGEN)
punkte += AUGEN;
}
return punkte;
}
public String getName() {
return name;
}
public int getPunkte() {
if (punkte == -1)
return 0;
return punkte;
}
public boolean isOffen() {
return punkte == -1;
}
}

View File

@ -0,0 +1,29 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
import java.util.ArrayList;
public class Spiel {
private Spieler[] spieler;
private int spieleranzahl;
private int aktuellerSpieler;
private Würfelbecher becher;
public Spiel(ArrayList<String> spielernamen) {
spieleranzahl = spielernamen.size();
spieler = new Spieler[spieleranzahl];
for (int i = 0; i < spielernamen.size(); i++) {
spieler[i] = new Spieler(spielernamen.get(i));
}
aktuellerSpieler = (int)(Math.random() * spieleranzahl);
becher = new Würfelbecher();
becher.würfle();
}
public Gewinnkarte getGewinnkarteAktuellerSpieler() {
return spieler[aktuellerSpieler].getGewinnkarte();
}
}

View File

@ -0,0 +1,20 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
public class Spieler {
private String name;
private Gewinnkarte gewinnkarte;
public Spieler(String name) {
this.name = name;
this.gewinnkarte = new Gewinnkarte();
}
public String getName() {
return name;
}
public Gewinnkarte getGewinnkarte() {
return gewinnkarte;
}
}

View File

@ -2,6 +2,7 @@ package de.hs_mannheim.informatik.games.kniffel.domain;
public class Würfel {
private final int SEITEN;
private int augen;
public Würfel() {
this(6);
@ -12,8 +13,13 @@ public class Würfel {
}
public int würfle() {
//return 1 + (int)(Math.random() * SEITEN);
return 3;
augen = 1 + (int)(Math.random() * SEITEN);
return augen;
}
public int getAugen() {
return augen;
}
}

View File

@ -0,0 +1,21 @@
package de.hs_mannheim.informatik.games.kniffel.domain;
public class Würfelbecher {
private final int WÜRFELANZAHL = 5;
private Würfel[] würfel;
public Würfelbecher() {
würfel = new Würfel[5];
for (int i = 0; i < WÜRFELANZAHL; i++) {
würfel[i] = new Würfel();
}
}
public void würfle() {
for (int i = 0; i < WÜRFELANZAHL; i++) {
würfel[i].würfle();
}
}
}

View File

@ -1,12 +1,21 @@
package de.hs_mannheim.informatik.games.kniffel.facade;
import de.hs_mannheim.informatik.games.kniffel.domain.Würfel;
import java.util.ArrayList;
import de.hs_mannheim.informatik.games.kniffel.domain.Gewinnkarte;
import de.hs_mannheim.informatik.games.kniffel.domain.Spiel;
public class KniffelApi {
Würfel w = new Würfel();
private Spiel spiel;
public int würfle() {
return w.würfle();
public void starteSpiel(ArrayList<String> spielernamen, boolean starWarsModus) {
// TODO: StarWars über Vererbung einbauen?
spiel = new Spiel(spielernamen);
}
public Gewinnkarte getGewinnkarte() {
return spiel.getGewinnkarteAktuellerSpieler();
}
}

View File

@ -0,0 +1,48 @@
package de.hs_mannheim.informatik.games.kniffel.tui;
import java.util.ArrayList;
import java.util.Scanner;
import de.hs_mannheim.informatik.games.kniffel.facade.KniffelApi;
public class SpielStart {
private Scanner kb;
private KniffelApi api;
public SpielStart(Scanner kb, KniffelApi api) {
this.kb = kb;
this.api = api;
}
public void verarbeiteEingabe() {
ArrayList<String> spielernamen = new ArrayList<>();
System.out.println("Bitte Spielernamen (max. 6, leere Eingabe für Abbruch) eingeben:");
System.out.println();
for (int i = 1; i <= 6; i++) {
System.out.print("Spieler " + i + ": ");
String name = kb.nextLine();
if (name.isEmpty())
break;
spielernamen.add(name);
}
if (spielernamen.size() == 0) {
System.out.println("Keine Spieler eingegeben, zurück zum Hauptmenü.");
return;
}
System.out.println(spielernamen.size() + " Mitspieler eingeben.");
System.out.print("Möchten Sie den StarWars-Modus spielen? (j/n): ");
String sw = kb.nextLine();
api.starteSpiel(spielernamen, sw.toLowerCase().equals("j"));
new SpielrundeSpielen(kb, api).verarbeiteEingabe();
}
}

View File

@ -0,0 +1,21 @@
package de.hs_mannheim.informatik.games.kniffel.tui;
import java.util.Scanner;
import de.hs_mannheim.informatik.games.kniffel.facade.KniffelApi;
public class SpielrundeSpielen {
private Scanner kb;
private KniffelApi api;
public SpielrundeSpielen(Scanner kb, KniffelApi api) {
this.kb = kb;
this.api = api;
}
public void verarbeiteEingabe() {
System.out.println("Gewinnkarte");
System.out.println(api.getGewinnkarte().toString());
}
}

View File

@ -25,13 +25,13 @@ public class TuiMain {
do {
System.out.println();
System.out.println("Auswahlmöglichkeiten (Zifferneingabe):");
System.out.println("1 -> Würfeln");
System.out.println("9 -> Spiel beenden.");
System.out.println("1 -> Spiel starten");
System.out.println("9 -> Spiel beenden");
System.out.println();
System.out.print("Eingabe > ");
switch (kb.nextLine()) {
case "1" -> System.out.println("Gewürfelt: " + api.würfle());
case "1" -> new SpielStart(kb, api).verarbeiteEingabe();
case "9" -> { break mainLoop; }
default -> System.out.println("Eingabe nicht erkannt, bitte wiederholen.");
}