parent
f340e2f095
commit
d4c3e1b0fd
|
@ -0,0 +1,8 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/BlackJack.iml" filepath="$PROJECT_DIR$/.idea/BlackJack.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CommitMessageInspectionProfile">
|
||||
<profile version="1.0">
|
||||
<inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
</profile>
|
||||
</component>
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,48 @@
|
|||
package de.deversmann;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BlackJackSpiel {
|
||||
private final Kartenstapel stapel;
|
||||
private final List<Karte> hand;
|
||||
|
||||
public BlackJackSpiel(Kartenstapel stapel) {
|
||||
this.stapel = stapel; // Verwendet den übergebenen Kartenstapel
|
||||
hand = new ArrayList<>();
|
||||
// Zieht die ersten zwei Karten für die Hand des Spielers
|
||||
hand.add(stapel.zieheKarte());
|
||||
hand.add(stapel.zieheKarte());
|
||||
}
|
||||
|
||||
|
||||
public void zieheWeitereKarte() {
|
||||
if (getPunkte() < 21) {
|
||||
hand.add(stapel.zieheKarte());
|
||||
}
|
||||
}
|
||||
|
||||
public int getPunkte() {
|
||||
int punkte = 0;
|
||||
int assAnzahl = 0;
|
||||
|
||||
for (Karte karte : hand) {
|
||||
punkte += karte.getPunkte();
|
||||
if ("Ass".equals(karte.wert())) {
|
||||
assAnzahl++;
|
||||
}
|
||||
}
|
||||
|
||||
while (punkte > 21 && assAnzahl > 0) {
|
||||
punkte -= 10; // Ass von 11 auf 1 Punkt reduzieren
|
||||
assAnzahl--;
|
||||
}
|
||||
|
||||
return punkte;
|
||||
}
|
||||
|
||||
public List<Karte> getHand() {
|
||||
return hand;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package de.deversmann;
|
||||
|
||||
import java.util.Scanner;
|
||||
|
||||
public class BlackJackUI {
|
||||
public static void main(String[] args) {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
// Initialisiert den Kartenstapel einmal für alle Spiele
|
||||
Kartenstapel stapel = new Kartenstapel();
|
||||
|
||||
while (true) {
|
||||
// Prüft, ob genügend Karten für ein neues Spiel vorhanden sind
|
||||
if (stapel.getVerbleibendeKarten() < 4) { // Geht davon aus, dass mindestens 4 Karten für ein Spiel benötigt werden
|
||||
System.out.println("Nicht genügend Karten im Stapel für ein weiteres Spiel. Spiel beendet.");
|
||||
break;
|
||||
}
|
||||
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(stapel); // Verwendet den existierenden Stapel für das neue Spiel
|
||||
System.out.println("Neues Spiel gestartet. Viel Glück!");
|
||||
|
||||
while (true) {
|
||||
System.out.println("Aktuelle Hand: " + spiel.getHand() + ". Aktuelle Punkte: " + spiel.getPunkte());
|
||||
|
||||
if (spiel.getPunkte() >= 21) {
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.print("Möchten Sie eine weitere Karte ziehen? (j/n): ");
|
||||
String eingabe = scanner.nextLine();
|
||||
|
||||
if ("j".equalsIgnoreCase(eingabe)) {
|
||||
spiel.zieheWeitereKarte();
|
||||
} else if ("n".equalsIgnoreCase(eingabe)) {
|
||||
break;
|
||||
} else {
|
||||
System.out.println("Ungültige Eingabe. Bitte antworten Sie mit 'j' für ja oder 'n' für nein.");
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Spielende. Ihre finale Hand: " + spiel.getHand() + ". Ihre Punkte: " + spiel.getPunkte());
|
||||
if (spiel.getPunkte() > 21) {
|
||||
System.out.println("Sie haben verloren. Mehr als 21 Punkte.");
|
||||
} else if (spiel.getPunkte() == 21) {
|
||||
System.out.println("Glückwunsch, Blackjack!");
|
||||
} else {
|
||||
System.out.println("Spiel beendet. Vielen Dank fürs Spielen.");
|
||||
}
|
||||
|
||||
System.out.print("Möchten Sie noch eine Runde spielen? (j/n): ");
|
||||
String erneutSpielen = scanner.nextLine();
|
||||
if (!"j".equalsIgnoreCase(erneutSpielen)) {
|
||||
break; // Beendet die Schleife und das Programm
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Danke fürs Spielen. Auf Wiedersehen!");
|
||||
scanner.close();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package de.deversmann;
|
||||
|
||||
public record Karte(String farbe, String wert) {
|
||||
|
||||
public int getPunkte() {
|
||||
switch (wert) {
|
||||
case "Ass" -> {
|
||||
return 11; // Standardwert, Anpassung an die Hand erfolgt später
|
||||
}
|
||||
case "Bube", "Dame", "König" -> {
|
||||
return 10;
|
||||
}
|
||||
default -> {
|
||||
return Integer.parseInt(wert);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return wert + " " + farbe;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package de.deversmann;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Stack;
|
||||
|
||||
public class Kartenstapel {
|
||||
private final Stack<Karte> stapel;
|
||||
|
||||
public Kartenstapel() {
|
||||
stapel = new Stack<>();
|
||||
String[] farben = {"Kreuz", "Pik", "Herz", "Karo"};
|
||||
String[] werte = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Bube", "Dame", "König", "Ass"};
|
||||
|
||||
for (String farbe : farben) {
|
||||
for (String wert : werte) {
|
||||
stapel.push(new Karte(farbe, wert));
|
||||
}
|
||||
}
|
||||
|
||||
Collections.shuffle(stapel);
|
||||
}
|
||||
|
||||
public Karte zieheKarte() {
|
||||
if (stapel.isEmpty()) {
|
||||
throw new RuntimeException("Alle Karten wurden bereits gezogen.");
|
||||
}
|
||||
return stapel.pop();
|
||||
}
|
||||
public int getVerbleibendeKarten() {
|
||||
return stapel.size();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
import de.deversmann.BlackJackSpiel;
|
||||
import de.deversmann.Karte;
|
||||
import de.deversmann.Kartenstapel;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class BlackJackSpielTest {
|
||||
|
||||
@Mock
|
||||
private Kartenstapel mockStapel;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetHandGibtKorrekteHandZurueck() {
|
||||
// Konfigurieren des Mocks, um spezifische Karten zurückzugeben
|
||||
when(mockStapel.zieheKarte())
|
||||
.thenReturn(new Karte("Herz", "10"))
|
||||
.thenReturn(new Karte("Karo", "Ass"));
|
||||
|
||||
// Initialisieren des Spiels mit dem gemockten Kartenstapel
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(mockStapel);
|
||||
|
||||
// Überprüfen, ob die Hand des Spielers die erwarteten Karten enthält
|
||||
assertEquals(2, spiel.getHand().size());
|
||||
assertEquals("Herz", spiel.getHand().get(0).farbe());
|
||||
assertEquals("10", spiel.getHand().get(0).wert());
|
||||
assertEquals("Karo", spiel.getHand().get(1).farbe());
|
||||
assertEquals("Ass", spiel.getHand().get(1).wert());
|
||||
}
|
||||
@Test
|
||||
void testGetHandGibtKorrekteHandMit3KartenZurueck() {
|
||||
// Konfigurieren des Mocks, um spezifische Karten zurückzugeben
|
||||
when(mockStapel.zieheKarte())
|
||||
.thenReturn(new Karte("Herz", "9"))
|
||||
.thenReturn(new Karte("Karo", "Ass"))
|
||||
.thenReturn(new Karte("Pik", "Ass"));
|
||||
|
||||
// Initialisieren des Spiels mit dem gemockten Kartenstapel
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(mockStapel);
|
||||
spiel.zieheWeitereKarte();
|
||||
|
||||
// Überprüfen, ob die Hand des Spielers die erwarteten Karten enthält
|
||||
assertEquals(3, spiel.getHand().size());
|
||||
assertEquals("Herz", spiel.getHand().get(0).farbe());
|
||||
assertEquals("9", spiel.getHand().get(0).wert());
|
||||
assertEquals("Karo", spiel.getHand().get(1).farbe());
|
||||
assertEquals("Ass", spiel.getHand().get(1).wert());
|
||||
assertEquals("Pik", spiel.getHand().get(2).farbe());
|
||||
assertEquals("Ass", spiel.getHand().get(2).wert());
|
||||
assertEquals(21, spiel.getPunkte());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBlackjackMitZweiKarten() {
|
||||
when(mockStapel.zieheKarte()).thenReturn(new Karte("Herz", "Ass"), new Karte("Pik", "König"));
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(mockStapel);
|
||||
assertEquals(21, spiel.getPunkte());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testUeber21MitMehrerenKarten() {
|
||||
when(mockStapel.zieheKarte())
|
||||
.thenReturn(new Karte("Herz", "10"), new Karte("Pik", "8"), new Karte("Karo", "4"));
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(mockStapel);
|
||||
spiel.zieheWeitereKarte(); // Zieht die dritte Karte
|
||||
assertTrue(spiel.getPunkte() > 21);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testAssWertAnpassung() {
|
||||
when(mockStapel.zieheKarte())
|
||||
.thenReturn(new Karte("Herz", "Ass"), new Karte("Pik", "9"), new Karte("Karo", "Ass"));
|
||||
BlackJackSpiel spiel = new BlackJackSpiel(mockStapel);
|
||||
spiel.zieheWeitereKarte(); // Zieht die dritte Karte
|
||||
assertEquals(21, spiel.getPunkte());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
import de.deversmann.Karte;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class KarteTest {
|
||||
|
||||
@Test
|
||||
void karteErstellenUndWertePruefen() {
|
||||
Karte karte = new Karte("Herz", "10");
|
||||
assertEquals("Herz", karte.farbe());
|
||||
assertEquals("10", karte.wert());
|
||||
}
|
||||
|
||||
@Test
|
||||
void punkteFuerZahlenkarten() {
|
||||
Karte zwei = new Karte("Karo", "2");
|
||||
assertEquals(2, zwei.getPunkte());
|
||||
|
||||
Karte zehn = new Karte("Pik", "10");
|
||||
assertEquals(10, zehn.getPunkte());
|
||||
}
|
||||
|
||||
@Test
|
||||
void punkteFuerBildkarten() {
|
||||
Karte bube = new Karte("Kreuz", "Bube");
|
||||
assertEquals(10, bube.getPunkte());
|
||||
|
||||
Karte dame = new Karte("Herz", "Dame");
|
||||
assertEquals(10, dame.getPunkte());
|
||||
}
|
||||
|
||||
@Test
|
||||
void punkteFuerAss() {
|
||||
Karte ass = new Karte("Pik", "Ass");
|
||||
assertEquals(11, ass.getPunkte());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToString() {
|
||||
Karte karte = new Karte("Herz", "Ass");
|
||||
|
||||
String erwarteterString = "Ass Herz";
|
||||
assertEquals(erwarteterString, karte.toString());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
import de.deversmann.Karte;
|
||||
import de.deversmann.Kartenstapel;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class KartenstapelTest {
|
||||
|
||||
@Test
|
||||
void stapelErstellenUndKarteZiehen() {
|
||||
Kartenstapel stapel = new Kartenstapel();
|
||||
Karte karte = stapel.zieheKarte();
|
||||
assertNotNull(karte); // Einfacher Test, um sicherzustellen, dass eine Karte gezogen wird
|
||||
}
|
||||
|
||||
@Test
|
||||
void alleKartenZiehen() {
|
||||
Kartenstapel stapel = new Kartenstapel();
|
||||
for (int i = 0; i < 52; i++) { // Zieht alle 52 Karten
|
||||
assertNotNull(stapel.zieheKarte());
|
||||
}
|
||||
|
||||
// Versucht, eine 53. Karte zu ziehen, was eine RuntimeException auslösen sollte
|
||||
assertThrows(RuntimeException.class, stapel::zieheKarte);
|
||||
}
|
||||
|
||||
@Test
|
||||
void verbleibendeKarten() {
|
||||
Kartenstapel stapel = new Kartenstapel();
|
||||
stapel.zieheKarte(); // Zieht eine Karte
|
||||
assertEquals(51, stapel.getVerbleibendeKarten()); // Erwartet 51 verbleibende Karten
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue