From e80cb604691491bd06945bdc8cae44b8254bbff2 Mon Sep 17 00:00:00 2001 From: obaya Date: Mon, 19 Aug 2024 00:28:19 +0200 Subject: [PATCH] blackjack mit junit --- .../src/Übungen/BlackJack/BlackJack.java | 315 ++++++++++-------- .../src/Übungen/BlackJack/JunitTest.java | 40 +++ .../src/Übungen/BlackJack/Test.java | 79 +---- 3 files changed, 238 insertions(+), 196 deletions(-) create mode 100644 Programmierung2/src/Übungen/BlackJack/JunitTest.java diff --git a/Programmierung2/src/Übungen/BlackJack/BlackJack.java b/Programmierung2/src/Übungen/BlackJack/BlackJack.java index 19b2f3d..9f6ffbb 100644 --- a/Programmierung2/src/Übungen/BlackJack/BlackJack.java +++ b/Programmierung2/src/Übungen/BlackJack/BlackJack.java @@ -5,216 +5,269 @@ import java.util.Collections; import java.util.Random; import java.util.Scanner; +// Modell public class BlackJack { - private String name; + private String spielerName; private int guthaben; - private int handKartenAnzahl; - private int speicherErstEinsatz; + private int punkte; + private int speichereEinsatz; + private boolean hitspiele; - public BlackJack(String name, int guthaben) { - this.name = name; + public BlackJack(String spielerName, int guthaben) { + this.spielerName = spielerName; this.guthaben = guthaben; - this.handKartenAnzahl = 0; - this.speicherErstEinsatz = 0; - + this.punkte = 0; + this.speichereEinsatz = 0; + this.hitspiele = false; } - public void setspeicherErstEinsatz(int speicherErstEinsatz) { - this.speicherErstEinsatz = speicherErstEinsatz; + public int getSpeichereEinsatz() { + return speichereEinsatz; } - public int getspeicherErstEinsatz() { - return speicherErstEinsatz; + public void setSpeichereEinsatz(int speichereEinsatz) { + this.speichereEinsatz = speichereEinsatz; } - public String getName() { - return name; + public String getSpielerName() { + return spielerName; } - public void setName(String name) { - this.name = name; + public void setSpielerName(String spielerName) { + this.spielerName = spielerName; } public int getGuthaben() { return guthaben; } - public void setGuthaben(int guthaben) { - this.guthaben += guthaben; + public void addGuthaben(int betrag) { + this.guthaben += betrag; } - public void subtrahiereGuthaben(int guthaben) { - this.guthaben -= guthaben; + public void subtrahiereGuthaben(int betrag) { + this.guthaben -= betrag; } - public int getHandKartenAnzahl() { - return handKartenAnzahl; + public int getPunkte() { + return punkte; } - public void setHandKartenAnzahl(int handKartenAnzahl) { - this.handKartenAnzahl += handKartenAnzahl; + public void addPunkte(int punkte) { + this.punkte += punkte; + } + + public boolean isHitspiele() { + return hitspiele; + } + + public void setHitspiele(boolean hitspiele) { + this.hitspiele = hitspiele; } @Override 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 { private BlackJack spieler1; private BlackJack spieler2; - private ArrayList KartenSpiellist; + private ArrayList kartendeck; private Random random; private ArrayList erlaubteEinsätze; - private Scanner scan; - private int wähleEinsatz; + private BlackJackView view; - public Spiel(BlackJack spieler1, BlackJack spieler2) { + public Spiel(BlackJack spieler1, BlackJack spieler2, BlackJackView view) { this.spieler1 = spieler1; this.spieler2 = spieler2; + this.view = view; this.random = new Random(); - this.wähleEinsatz = 0; - this.scan = new Scanner(System.in); this.erlaubteEinsätze = new ArrayList<>(); - KartenSpiellist = new ArrayList<>(); - setAlleKartenspiele(); - + kartendeck = new ArrayList<>(); + initialisiereKartendeck(); } - private boolean guthabenAufladen(BlackJack spieler) { - System.out.println("Du hast kein Genug Guthaben\nMöchtest du Guthaben Aufladen? Ja/Nein"); - scan.nextLine(); - String guthabenAufladen = scan.nextLine(); - if (guthabenAufladen.equalsIgnoreCase("ja")) { - System.out.println("Wie Viel?"); - int aufladen = scan.nextInt(); - if (aufladen > 0) { - spieler.setGuthaben(aufladen); - System.out.println("Deine neue Guthaben= " + spieler.getGuthaben()); + public void initialisiereKartendeck() { + for (int i = 1; i <= 11; i++) { + kartendeck.add(i); + } + Collections.shuffle(kartendeck); + } + + public ArrayList getKartendeck() { + return kartendeck; + } + + 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 false; } - public boolean bestimmEinsätze(BlackJack spieler) { + public boolean einsatzBestimmen(BlackJack spieler) { erlaubteEinsätze.add(5); erlaubteEinsätze.add(10); erlaubteEinsätze.add(25); 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€]"); - wähleEinsatz = scan.nextInt(); - if (!erlaubteEinsätze.contains(wähleEinsatz)) { - System.out.println("Falsche Eingabe"); + boolean einsatzAkzeptiert = false; + view.zeigeNachricht( + "Hallo " + spieler.getSpielerName() + ", dein aktuelles Guthaben: " + spieler.getGuthaben() + "€"); + while (!einsatzAkzeptiert) { + if (spieler.getGuthaben() < 5) { + if (guthabenAufladen(spieler)) { + continue; + } else { + return false; + } + } + + int einsatz = view.frageEinsatz(); + if (!erlaubteEinsätze.contains(einsatz)) { + view.zeigeNachricht("Falsche Eingabe. Bitte versuche es erneut."); continue; } - if (wähleEinsatz > spieler.getGuthaben()) { - if (guthabenAufladen(spieler)) + + if (einsatz > spieler.getGuthaben()) { + if (guthabenAufladen(spieler)) { continue; - else + } else { 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; + if (erlaubteEinsätze.contains(einsatz)) { + spieler.setSpeichereEinsatz(einsatz); + spieler.subtrahiereGuthaben(einsatz); + view.zeigeNachricht("Neues Guthaben: " + spieler.getGuthaben() + "€"); + einsatzAkzeptiert = true; } - } - return check; + return einsatzAkzeptiert; } - public void giveTwoRandomKarts() { - // Karten für Spieler 1 - int speicher1 = zieheZweiKarten(spieler1); - System.out.println(spieler1.getName() + " hat " + speicher1 + " Punkte."); + public void zweiKartenZiehen() { + int punkte1 = zieheZweiKarten(spieler1); + view.zeigeNachricht(spieler1.getSpielerName() + " hat " + punkte1 + " Punkte."); - // Karten für Spieler 2 - int speicher2 = zieheZweiKarten(spieler2); - System.out.println(spieler2.getName() + " hat " + speicher2 + " Punkte."); + int punkte2 = zieheZweiKarten(spieler2); + view.zeigeNachricht(spieler2.getSpielerName() + " hat " + punkte2 + " Punkte."); } private int zieheZweiKarten(BlackJack spieler) { - int ersteKarte = KartenSpiellist.get(random.nextInt(KartenSpiellist.size())); - int zweiteKarte = KartenSpiellist.get(random.nextInt(KartenSpiellist.size())); + int ersteKarte = kartendeck.get(random.nextInt(kartendeck.size())); + int zweiteKarte = kartendeck.get(random.nextInt(kartendeck.size())); int summe = ersteKarte + zweiteKarte; - spieler.setHandKartenAnzahl(summe); + spieler.addPunkte(summe); return summe; } - public void checkGewinner(BlackJack gewinner1, BlackJack gewinner2) { - int speicher = 0; - if (gewinner1.getHandKartenAnzahl() < 22) - if (gewinner1.getHandKartenAnzahl() > gewinner2.getHandKartenAnzahl() - || gewinner2.getHandKartenAnzahl() > 21) { - speicher = gewinner1.getspeicherErstEinsatz() * 2;// 100 - gewinner1.setspeicherErstEinsatz(speicher);// hier = 100 - gewinner1.setGuthaben(gewinner1.getspeicherErstEinsatz()); - System.out.println(gewinner1.getName() + " hat gewonnen!"); - System.out.println(gewinner1.getName() + " neue Guthaben " + gewinner1.getspeicherErstEinsatz()); - System.out.println(gewinner2.getName() + " neue Guthaben " + gewinner2.getGuthaben()); + public void gewinnerPrüfen(BlackJack spieler1, BlackJack spieler2) { + if (spieler1.getPunkte() < 22 && (spieler1.getPunkte() > spieler2.getPunkte() || spieler2.getPunkte() > 21)) { + int gewinn = spieler1.getSpeichereEinsatz() * 2; + spieler1.addGuthaben(gewinn); + view.zeigeNachricht( + spieler1.getSpielerName() + " hat gewonnen! Neues Guthaben: " + spieler1.getGuthaben() + "€"); + } else if (spieler2.getPunkte() < 22 + && (spieler2.getPunkte() > spieler1.getPunkte() || spieler1.getPunkte() > 21)) { + int gewinn = spieler2.getSpeichereEinsatz() * 2; + spieler2.addGuthaben(gewinn); + view.zeigeNachricht( + spieler2.getSpielerName() + " hat gewonnen! Neues Guthaben: " + spieler2.getGuthaben() + "€"); + } else { + view.zeigeNachricht("Unentschieden!"); + } + } - return; + 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; + } } - - 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 eineKarteZiehen(BlackJack spieler) { + int karte = kartendeck.get(random.nextInt(kartendeck.size())); + spieler.addPunkte(karte); + view.zeigeNachricht(spieler.getSpielerName() + " hat " + spieler.getPunkte() + " Punkte."); } - public void printAlleKartenspiele() { - for (int i : KartenSpiellist) - System.out.print(i); + public void spielerPunkteAnzeigen(BlackJack spieler) { + view.zeigeNachricht(spieler.getSpielerName() + " hat " + spieler.getPunkte() + " Punkte."); } - public ArrayList 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"); - } } diff --git a/Programmierung2/src/Übungen/BlackJack/JunitTest.java b/Programmierung2/src/Übungen/BlackJack/JunitTest.java new file mode 100644 index 0000000..2ed1442 --- /dev/null +++ b/Programmierung2/src/Übungen/BlackJack/JunitTest.java @@ -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 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(); + } + +} diff --git a/Programmierung2/src/Übungen/BlackJack/Test.java b/Programmierung2/src/Übungen/BlackJack/Test.java index f3be450..fd8a40a 100644 --- a/Programmierung2/src/Übungen/BlackJack/Test.java +++ b/Programmierung2/src/Übungen/BlackJack/Test.java @@ -5,82 +5,31 @@ import java.util.Scanner; public class Test { public static void main(String[] args) { - - BlackJack spieler1 = new BlackJack("Obai", 50); - BlackJack spieler2 = new BlackJack("Lena", 100); 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(spieler2); System.out.println(); - boolean bestimmespieler; - Spiel newSpiel = new Spiel(spieler1, spieler2); - bestimmespieler = newSpiel.bestimmEinsätze(spieler1); - if (bestimmespieler) - bestimmespieler = newSpiel.bestimmEinsätze(spieler2); + Spiel newSpiel = new Spiel(spieler1, spieler2,spiel1); + boolean bestimmespieler; + + bestimmespieler = newSpiel.einsatzBestimmen(spieler1); + if (bestimmespieler) + bestimmespieler = newSpiel.einsatzBestimmen(spieler2); - - if (bestimmespieler) { - System.out.println("Willkommen im Blackjack-Spiel:"); - newSpiel.giveTwoRandomKarts(); - 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; - - 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; - } - } + newSpiel.zweiKartenZiehen(); + newSpiel.bestimmeSpieabluaf(spieler1); } - - scan.close(); // Scanner schließen + + spiel1.schließeScanner(); } }