main
Marco Angelo Palmieri 2024-03-26 15:46:15 +01:00
commit 18c40b22ca
5 changed files with 233 additions and 0 deletions

View File

@ -0,0 +1,55 @@
package Uni.semester03.BlackJack;
import java.util.Scanner;
public class BlackJackSpiel {
private Kartenstapel kartenstapel;
private Hand hand;
public BlackJackSpiel() {
kartenstapel = new Kartenstapel();
hand = getNeueHand();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("Deine aktuelle Hand: \n" + hand);
System.out.println("Du hast aktuell " + hand.getPunkte() + " Punkte.");
if (hand.isBlackJack()) {
System.out.println("JA!! BLACKJACK!!");
System.out.println("Du beendest mit " + hand.getPunkte() + " Punkten.");
break;
}
System.out.println("Soll eine weitere Karte gezogen werden? (j/n)");
String antwort = sc.nextLine().toLowerCase();
if (antwort.equals("j")) {
Karte neueKarte = kartenstapel.getKarte();
hand.addWeitereKarte(neueKarte);
System.out.println("Neue Karte gezogen: " + neueKarte);
if (hand.getPunkte() > 21) {
System.out.println("Überkauft! Du hast verloren.");
break;
}
} else if (antwort.equals("n")) {
System.out.println("Du beendest mit " + hand.getPunkte() + " Punkten.");
break;
} else {
System.out.println("Ungültige Eingabe. Bitte 'j' oder 'n' eingeben.\n");
}
}
sc.close();
}
public Hand getNeueHand() {
return new Hand(kartenstapel);
}
public static void main(String[] args) {
new BlackJackSpiel();
}
}

58
Hand.java 100644
View File

@ -0,0 +1,58 @@
package Uni.semester03.BlackJack;
import java.util.ArrayList;
public class Hand {
private ArrayList<Karte> hand;
protected Hand(Kartenstapel ks) {
hand = createHand(ks);
}
private ArrayList<Karte> createHand(Kartenstapel ks) {
ArrayList<Karte> neueHand = new ArrayList<>();
neueHand.add(ks.getKarte());
neueHand.add(ks.getKarte());
return neueHand;
}
public void addWeitereKarte(Karte karte) {
hand.add(karte);
}
public int getPunkte() {
int punkte = 0;
int anzahlAss = 0;
// Durchlaufe die Karten in der Hand
for (Karte karte : hand) {
punkte += karte.getPunkte(); // Addiere die Punkte der aktuellen Karte zur Gesamtpunktzahl
// Wenn die aktuelle Karte ein Ass ist, erhöhe den Zähler
if (karte.getKarte().equals("ASS")) {
anzahlAss++;
}
}
// Berücksichtige die möglichen Werte für Asse
// Füge 10 Punkte für jedes Ass hinzu, solange der Gesamtwert der Hand (ohne Asse) plus 10 nicht über 21 liegt
while (anzahlAss > 0 && punkte + 10 <= 21) {
punkte += 10;
anzahlAss--;
}
return punkte;
}
public boolean isBlackJack() {
return hand.size() == 2 && getPunkte() == 21;
}
public String toString() {
String ausgabe = "";
for (Karte karte : hand) {
ausgabe += karte.toString() + "\n";
}
return ausgabe;
}
}

39
Karte.java 100644
View File

@ -0,0 +1,39 @@
package Uni.semester03.BlackJack;
public class Karte {
private String farbe;
private String karte;
protected Karte(String farbe, String karte) {
this.farbe = farbe;
this.karte = karte;
}
public String getKarte() {
return karte;
}
public int getPunkte() {
switch (karte) {
case "ASS": return 1;
case "2": return 2;
case "3": return 3;
case "4": return 4;
case "5": return 5;
case "6": return 6;
case "7": return 7;
case "8": return 8;
case "9": return 9;
case "10":
case "J":
case "Q":
case "K": return 10;
default:
throw new RuntimeException("Wert der Karte ist ungültig");
}
}
public String toString() {
return "Karte: " + this.karte + " " + this.farbe;
}
}

34
KarteTest.java 100644
View File

@ -0,0 +1,34 @@
package Uni.semester03.BlackJack;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class KarteTest {
@Test
void testValidGetPunkte() {
Karte karteAss = new Karte("Karo", "ASS");
assertEquals(1, karteAss.getPunkte());
Karte karteZwei = new Karte("Herz", "2");
assertEquals(2, karteZwei.getPunkte());
Karte karteZehn = new Karte("Pik", "10");
assertEquals(10, karteZehn.getPunkte());
Karte karteBube = new Karte("Kreuz", "J");
assertEquals(10, karteBube.getPunkte());
}
@Test
void testToString() {
Karte karte = new Karte("Karo", "3");
assertEquals("Karte: 3 Karo", karte.toString());
}
@Test
void testUngueltigeKarte() {
// Überprüfe, ob eine Exception geworfen wird, wenn eine ungültige Karte erstellt wird
assertThrows(RuntimeException.class, () -> new Karte("Herz", "13").getPunkte());
}
}

47
Kartenstapel.java 100644
View File

@ -0,0 +1,47 @@
package Uni.semester03.BlackJack;
import java.util.ArrayList;
import java.util.Collections;
public class Kartenstapel {
private ArrayList<Karte> karten;
protected Kartenstapel() {
karten = createStapel();
}
public Karte getKarte() {
Karte neachsteKarte = karten.getFirst();
karten.removeFirst();
return neachsteKarte;
}
public int getZahlUebrigerKarten() {
return karten.size();
}
public static ArrayList<Karte> createStapel() {
ArrayList<Karte> stapel = new ArrayList<>();
String[] farben = {"Karo", "Herz", "Pik", "Kreuz"};
String[] karten = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "ASS"};
for (String farbe : farben) {
for (String karte : karten) {
Karte neueKarte = new Karte(farbe, karte);
stapel.add(neueKarte);
}
}
Collections.shuffle(stapel);
return stapel;
}
public String toString() {
String ausgabe = "Kartenstapel: \n";
for (Karte karte : karten) {
ausgabe += karte.toString() + "\n";
}
return ausgabe;
}
}