blackjack mit junit

master
obaya 2024-08-19 00:28:19 +02:00
parent ab6d2f5668
commit e80cb60469
3 changed files with 238 additions and 196 deletions

View File

@ -5,216 +5,269 @@ import java.util.Collections;
import java.util.Random; import java.util.Random;
import java.util.Scanner; import java.util.Scanner;
// Modell
public class BlackJack { public class BlackJack {
private String name; private String spielerName;
private int guthaben; private int guthaben;
private int handKartenAnzahl; private int punkte;
private int speicherErstEinsatz; private int speichereEinsatz;
private boolean hitspiele;
public BlackJack(String name, int guthaben) { public BlackJack(String spielerName, int guthaben) {
this.name = name; this.spielerName = spielerName;
this.guthaben = guthaben; this.guthaben = guthaben;
this.handKartenAnzahl = 0; this.punkte = 0;
this.speicherErstEinsatz = 0; this.speichereEinsatz = 0;
this.hitspiele = false;
} }
public void setspeicherErstEinsatz(int speicherErstEinsatz) { public int getSpeichereEinsatz() {
this.speicherErstEinsatz = speicherErstEinsatz; return speichereEinsatz;
} }
public int getspeicherErstEinsatz() { public void setSpeichereEinsatz(int speichereEinsatz) {
return speicherErstEinsatz; this.speichereEinsatz = speichereEinsatz;
} }
public String getName() { public String getSpielerName() {
return name; return spielerName;
} }
public void setName(String name) { public void setSpielerName(String spielerName) {
this.name = name; this.spielerName = spielerName;
} }
public int getGuthaben() { public int getGuthaben() {
return guthaben; return guthaben;
} }
public void setGuthaben(int guthaben) { public void addGuthaben(int betrag) {
this.guthaben += guthaben; this.guthaben += betrag;
} }
public void subtrahiereGuthaben(int guthaben) { public void subtrahiereGuthaben(int betrag) {
this.guthaben -= guthaben; this.guthaben -= betrag;
} }
public int getHandKartenAnzahl() { public int getPunkte() {
return handKartenAnzahl; return punkte;
} }
public void setHandKartenAnzahl(int handKartenAnzahl) { public void addPunkte(int punkte) {
this.handKartenAnzahl += handKartenAnzahl; this.punkte += punkte;
}
public boolean isHitspiele() {
return hitspiele;
}
public void setHitspiele(boolean hitspiele) {
this.hitspiele = hitspiele;
} }
@Override @Override
public String toString() { public String toString() {
return "Spieler [name=" + name + ", Guthaben=" + guthaben + "€]"; return "Spieler [Name=" + spielerName + ", Guthaben=" + guthaben + "€]";
}
} }
// Die GUI klasse oder View
class BlackJackView {
private Scanner scanner;
public BlackJackView() {
scanner = new Scanner(System.in);
} }
public void zeigeSpielerDetails(BlackJack spieler) {
System.out.println(spieler.getSpielerName() + " hat " + spieler.getGuthaben() + "€ und " + spieler.getPunkte()
+ " Punkte.");
}
public void zeigeNachricht(String nachricht) {
System.out.println(nachricht);
}
public int frageEinsatz() {
System.out.println("Wähle einen Einsatz von: [5€, 10€, 25€, 100€]");
return scanner.nextInt();
}
public String frageObGuthabenAufladen() {
System.out.println("Du hast nicht genug Guthaben. Möchtest du Guthaben aufladen? Ja/Nein");
return scanner.next();
}
public int frageGuthabenBetrag() {
System.out.println("Wie viel möchtest du aufladen?");
return scanner.nextInt();
}
public String frageObHitOderStand() {
System.out.println("Du hast nicht genug Guthaben. Möchtest du Guthaben aufladen? Ja/Nein");
return scanner.next();
}
public void schließeScanner() {
scanner.close();
}
}
// Controller verwaltung das Spielabluaf
class Spiel { class Spiel {
private BlackJack spieler1; private BlackJack spieler1;
private BlackJack spieler2; private BlackJack spieler2;
private ArrayList<Integer> KartenSpiellist; private ArrayList<Integer> kartendeck;
private Random random; private Random random;
private ArrayList<Integer> erlaubteEinsätze; private ArrayList<Integer> erlaubteEinsätze;
private Scanner scan; private BlackJackView view;
private int wähleEinsatz;
public Spiel(BlackJack spieler1, BlackJack spieler2) { public Spiel(BlackJack spieler1, BlackJack spieler2, BlackJackView view) {
this.spieler1 = spieler1; this.spieler1 = spieler1;
this.spieler2 = spieler2; this.spieler2 = spieler2;
this.view = view;
this.random = new Random(); this.random = new Random();
this.wähleEinsatz = 0;
this.scan = new Scanner(System.in);
this.erlaubteEinsätze = new ArrayList<>(); this.erlaubteEinsätze = new ArrayList<>();
KartenSpiellist = new ArrayList<>(); kartendeck = new ArrayList<>();
setAlleKartenspiele(); initialisiereKartendeck();
} }
private boolean guthabenAufladen(BlackJack spieler) { public void initialisiereKartendeck() {
System.out.println("Du hast kein Genug Guthaben\nMöchtest du Guthaben Aufladen? Ja/Nein"); for (int i = 1; i <= 11; i++) {
scan.nextLine(); kartendeck.add(i);
String guthabenAufladen = scan.nextLine(); }
if (guthabenAufladen.equalsIgnoreCase("ja")) { Collections.shuffle(kartendeck);
System.out.println("Wie Viel?"); }
int aufladen = scan.nextInt();
if (aufladen > 0) { public ArrayList<Integer> getKartendeck() {
spieler.setGuthaben(aufladen); return kartendeck;
System.out.println("Deine neue Guthaben= " + spieler.getGuthaben()); }
public boolean guthabenAufladen(BlackJack spieler) {
String antwort = view.frageObGuthabenAufladen();
if (antwort.equalsIgnoreCase("ja")) {
int betrag = view.frageGuthabenBetrag();
if (betrag > 0) {
spieler.addGuthaben(betrag);
view.zeigeNachricht("Dein neues Guthaben: " + spieler.getGuthaben() + "€");
return true; return true;
} }
} }
return false; return false;
} }
public boolean bestimmEinsätze(BlackJack spieler) { public boolean einsatzBestimmen(BlackJack spieler) {
erlaubteEinsätze.add(5); erlaubteEinsätze.add(5);
erlaubteEinsätze.add(10); erlaubteEinsätze.add(10);
erlaubteEinsätze.add(25); erlaubteEinsätze.add(25);
erlaubteEinsätze.add(100); erlaubteEinsätze.add(100);
boolean check = false;
System.out.println("Hallo " + spieler.getName() + " dein aktuelles Guthaben: " + spieler.getGuthaben());
while (!check) {
if (spieler.getGuthaben() < 5)
if (guthabenAufladen(spieler))
continue;
else
return false;
System.out.println("Wähle einen Einsatz von: [5€,10€,25€,100€]"); boolean einsatzAkzeptiert = false;
wähleEinsatz = scan.nextInt(); view.zeigeNachricht(
if (!erlaubteEinsätze.contains(wähleEinsatz)) { "Hallo " + spieler.getSpielerName() + ", dein aktuelles Guthaben: " + spieler.getGuthaben() + "€");
System.out.println("Falsche Eingabe"); while (!einsatzAkzeptiert) {
if (spieler.getGuthaben() < 5) {
if (guthabenAufladen(spieler)) {
continue; continue;
} } else {
if (wähleEinsatz > spieler.getGuthaben()) {
if (guthabenAufladen(spieler))
continue;
else
return false; return false;
} }
if (erlaubteEinsätze.contains(wähleEinsatz)) {
int speicherErstEinsatz = spieler.getGuthaben();
spieler.setspeicherErstEinsatz(speicherErstEinsatz);
spieler.subtrahiereGuthaben(wähleEinsatz);
System.out.println(
"Neu Guthaben = " + speicherErstEinsatz + " - " + wähleEinsatz + " = " + spieler.getGuthaben());
check = true;
} }
} int einsatz = view.frageEinsatz();
return check; if (!erlaubteEinsätze.contains(einsatz)) {
view.zeigeNachricht("Falsche Eingabe. Bitte versuche es erneut.");
continue;
} }
public void giveTwoRandomKarts() { if (einsatz > spieler.getGuthaben()) {
// Karten für Spieler 1 if (guthabenAufladen(spieler)) {
int speicher1 = zieheZweiKarten(spieler1); continue;
System.out.println(spieler1.getName() + " hat " + speicher1 + " Punkte."); } else {
return false;
}
}
// Karten für Spieler 2 if (erlaubteEinsätze.contains(einsatz)) {
int speicher2 = zieheZweiKarten(spieler2); spieler.setSpeichereEinsatz(einsatz);
System.out.println(spieler2.getName() + " hat " + speicher2 + " Punkte."); spieler.subtrahiereGuthaben(einsatz);
view.zeigeNachricht("Neues Guthaben: " + spieler.getGuthaben() + "€");
einsatzAkzeptiert = true;
}
}
return einsatzAkzeptiert;
}
public void zweiKartenZiehen() {
int punkte1 = zieheZweiKarten(spieler1);
view.zeigeNachricht(spieler1.getSpielerName() + " hat " + punkte1 + " Punkte.");
int punkte2 = zieheZweiKarten(spieler2);
view.zeigeNachricht(spieler2.getSpielerName() + " hat " + punkte2 + " Punkte.");
} }
private int zieheZweiKarten(BlackJack spieler) { private int zieheZweiKarten(BlackJack spieler) {
int ersteKarte = KartenSpiellist.get(random.nextInt(KartenSpiellist.size())); int ersteKarte = kartendeck.get(random.nextInt(kartendeck.size()));
int zweiteKarte = KartenSpiellist.get(random.nextInt(KartenSpiellist.size())); int zweiteKarte = kartendeck.get(random.nextInt(kartendeck.size()));
int summe = ersteKarte + zweiteKarte; int summe = ersteKarte + zweiteKarte;
spieler.setHandKartenAnzahl(summe); spieler.addPunkte(summe);
return summe; return summe;
} }
public void checkGewinner(BlackJack gewinner1, BlackJack gewinner2) { public void gewinnerPrüfen(BlackJack spieler1, BlackJack spieler2) {
int speicher = 0; if (spieler1.getPunkte() < 22 && (spieler1.getPunkte() > spieler2.getPunkte() || spieler2.getPunkte() > 21)) {
if (gewinner1.getHandKartenAnzahl() < 22) int gewinn = spieler1.getSpeichereEinsatz() * 2;
if (gewinner1.getHandKartenAnzahl() > gewinner2.getHandKartenAnzahl() spieler1.addGuthaben(gewinn);
|| gewinner2.getHandKartenAnzahl() > 21) { view.zeigeNachricht(
speicher = gewinner1.getspeicherErstEinsatz() * 2;// 100 spieler1.getSpielerName() + " hat gewonnen! Neues Guthaben: " + spieler1.getGuthaben() + "€");
gewinner1.setspeicherErstEinsatz(speicher);// hier = 100 } else if (spieler2.getPunkte() < 22
gewinner1.setGuthaben(gewinner1.getspeicherErstEinsatz()); && (spieler2.getPunkte() > spieler1.getPunkte() || spieler1.getPunkte() > 21)) {
System.out.println(gewinner1.getName() + " hat gewonnen!"); int gewinn = spieler2.getSpeichereEinsatz() * 2;
System.out.println(gewinner1.getName() + " neue Guthaben " + gewinner1.getspeicherErstEinsatz()); spieler2.addGuthaben(gewinn);
System.out.println(gewinner2.getName() + " neue Guthaben " + gewinner2.getGuthaben()); view.zeigeNachricht(
spieler2.getSpielerName() + " hat gewonnen! Neues Guthaben: " + spieler2.getGuthaben() + "€");
return; } else {
} view.zeigeNachricht("Unentschieden!");
if (gewinner2.getHandKartenAnzahl() < 22)
if (gewinner2.getHandKartenAnzahl() > gewinner1.getHandKartenAnzahl()
|| gewinner1.getHandKartenAnzahl() > 21) {
speicher = gewinner2.getspeicherErstEinsatz() * 2;// 100
gewinner2.setspeicherErstEinsatz(speicher);// hier = 100
gewinner2.setGuthaben(gewinner2.getspeicherErstEinsatz());
System.out.println(gewinner2.getName() + " hat gewonnen!");
System.out.println(gewinner2.getName() + " neue Guthaben " + gewinner2.getspeicherErstEinsatz());
System.out.println(gewinner1.getName() + " neue Guthaben " + gewinner1.getGuthaben());
return;
} else
System.out.println("Unetschieden!");
}
public void setAlleKartenspiele() {
for (int i = 1; i <= 11; i++)
KartenSpiellist.add(i);
Collections.shuffle(KartenSpiellist);
}
public void printAlleKartenspiele() {
for (int i : KartenSpiellist)
System.out.print(i);
}
public ArrayList<Integer> getKartenSpiel() {
return KartenSpiellist;
}
public void giveRandomKart(BlackJack spieler) {
int randomKart = KartenSpiellist.get((random.nextInt(KartenSpiellist.size())));
spieler.setHandKartenAnzahl(randomKart);
}
public void printHandAnzahlKartenSpieler1() {
System.out.println(spieler1.getName() + " hat " + spieler1.getHandKartenAnzahl() + " Punkte");
}
public void printHandAnzahlKartenSpieler2() {
System.out.println(spieler2.getName() + " hat " + spieler2.getHandKartenAnzahl() + " Punkte");
} }
} }
public void bestimmeSpieabluaf(BlackJack spieler) {
view.zeigeNachricht("------------------------------------------");
view.zeigeNachricht("Willkommen im Blackjack-Spiel:");
zweiKartenZiehen();
spieler.setHitspiele(true);
while (spieler.isHitspiele()) {
if (spieler.getPunkte() >= 21)
spieler.setHitspiele(false);
if (spieler.isHitspiele()) {
view.zeigeNachricht(spieler.getSpielerName() + " : Möchten Sie hit oder stand? Aktuelle Hand: "
+ spieler.getPunkte());
String auswahl = view.frageObHitOderStand();
if (auswahl.equalsIgnoreCase("hit")) {
eineKarteZiehen(spieler);
spielerPunkteAnzeigen(spieler);
} else if (auswahl.equalsIgnoreCase("stand")) {
spieler.setHitspiele(false);
spielerPunkteAnzeigen(spieler);
} else {
view.zeigeNachricht("Falsche Eingabe: Bitte geben Sie entweder 'hit' oder 'stand' ein.");
continue;
}
}
}
}
public void eineKarteZiehen(BlackJack spieler) {
int karte = kartendeck.get(random.nextInt(kartendeck.size()));
spieler.addPunkte(karte);
view.zeigeNachricht(spieler.getSpielerName() + " hat " + spieler.getPunkte() + " Punkte.");
}
public void spielerPunkteAnzeigen(BlackJack spieler) {
view.zeigeNachricht(spieler.getSpielerName() + " hat " + spieler.getPunkte() + " Punkte.");
}
}

View File

@ -0,0 +1,40 @@
package Übungen.BlackJack;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.jupiter.api.Test;
class JunitTest {
// (expected,actual (welche wert gibt der Methode zurück?),message fehle)
@Test
void modellKlasse() {
// assertEquals(überprüft Parameter miteinander)
BlackJack t1 = new BlackJack("obai",20);
BlackJack t2 = new BlackJack("omar",21);
BlackJackView v1 = new BlackJackView();
Spiel spie1 = new Spiel(t1,t2,v1);
// assertEquals("obai", t1.getSpielerName(), "Der Name sollte 'obai' sein.");
// assertEquals(21,t1.getGuthaben(),"Guthaben habe stimmen nicht");
// assertNotNull(t1,"es ist nicht null");
// teste arrayList zahlen
// ArrayList<Integer> kartendeck = new ArrayList<>();
// for (int i = 1; i <= 11; i++) {
// kartendeck.add(i);
// }
// assertEquals(kartendeck,spie1.getKartendeck());
//aktziptieren nur einen Bedinung die entweder wahr oder true ist
// assertFalse(spie1.einsatzBestimmen(t1));
// assertFalse(spie1.einsatzBestimmen(t1));
spie1.zweiKartenZiehen();
}
}

View File

@ -5,82 +5,31 @@ import java.util.Scanner;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {
BlackJack spieler1 = new BlackJack("Obai", 50);
BlackJack spieler2 = new BlackJack("Lena", 100);
Scanner scan = new Scanner(System.in); Scanner scan = new Scanner(System.in);
BlackJack spieler1 = new BlackJack("Obai", 500);
BlackJack spieler2 = new BlackJack("abd", 100);
BlackJackView spiel1 = new BlackJackView();
System.out.println(spieler1); System.out.println(spieler1);
System.out.println(spieler2); System.out.println(spieler2);
System.out.println(); System.out.println();
Spiel newSpiel = new Spiel(spieler1, spieler2,spiel1);
boolean bestimmespieler; boolean bestimmespieler;
Spiel newSpiel = new Spiel(spieler1, spieler2); bestimmespieler = newSpiel.einsatzBestimmen(spieler1);
bestimmespieler = newSpiel.bestimmEinsätze(spieler1);
if (bestimmespieler) if (bestimmespieler)
bestimmespieler = newSpiel.bestimmEinsätze(spieler2); bestimmespieler = newSpiel.einsatzBestimmen(spieler2);
if (bestimmespieler) { if (bestimmespieler) {
System.out.println("Willkommen im Blackjack-Spiel:"); newSpiel.zweiKartenZiehen();
newSpiel.giveTwoRandomKarts(); newSpiel.bestimmeSpieabluaf(spieler1);
boolean hitSpieler1 = true;
boolean hitSpieler2 = true;
while (hitSpieler1 || hitSpieler2) {
System.out.println("------------------------------------------");
if (spieler1.getHandKartenAnzahl() > 21) hitSpieler1 = false;
if (hitSpieler1) {
System.out.println(spieler1.getName() + " : Möchten Sie hit oder stand? Aktuelle Hand: " + spieler1.getHandKartenAnzahl());
String auswahl = scan.nextLine();
if (auswahl.equalsIgnoreCase("hit")) {
newSpiel.giveRandomKart(spieler1);
newSpiel.printHandAnzahlKartenSpieler1();
} else if (auswahl.equalsIgnoreCase("stand")) {
hitSpieler1 = false;
newSpiel.printHandAnzahlKartenSpieler1();
} else {
System.out.println("Falsche Eingabe: Bitte geben Sie entweder 'hit' oder 'stand' ein.");
continue;
}
} }
if (spieler2.getHandKartenAnzahl() > 21) hitSpieler2 = false; spiel1.schließeScanner();
if (hitSpieler2) {
System.out.println(spieler2.getName() + " : Möchten Sie hit oder stand? Aktuelle Hand: " + spieler2.getHandKartenAnzahl());
String auswahl = scan.nextLine();
if (auswahl.equalsIgnoreCase("hit")) {
newSpiel.giveRandomKart(spieler2);
newSpiel.printHandAnzahlKartenSpieler2();
} else if (auswahl.equalsIgnoreCase("stand")) {
hitSpieler2 = false;
newSpiel.printHandAnzahlKartenSpieler2();
} else {
System.out.println("Falsche Eingabe: Bitte geben Sie entweder 'hit' oder 'stand' ein.");
continue;
}
}
if (!hitSpieler1 && !hitSpieler2) {
System.out.println("Das Spiel ist zu Ende");
System.out.println(spieler1.getName() + " : " + spieler1.getHandKartenAnzahl() + " Punkte");
System.out.println(spieler2.getName() + " : " + spieler2.getHandKartenAnzahl() + " Punkte");
newSpiel.checkGewinner(spieler1,spieler2);
break;
}
}
}
scan.close(); // Scanner schließen
} }
} }