3.4 KiB
3.4 KiB
🛠️ Detaillierte Aufgabenverteilung der Blackjack-Klassen
Diese Aufschlüsselung dient als erweiterter Bauplan für die Implementierung der einzelnen Klassen und ihrer Verantwortlichkeiten.
1. 🎴 Card (Karte)
Die Card-Klasse ist ein reiner Datenhalter und kennt nur ihren eigenen, festen Wert.
| Attribut | Aufgabe |
|---|---|
rank (Rang) |
Speichert den Wert der Karte als Text ('2', '10', 'J', 'A'). |
suit (Farbe) |
Speichert die Farbe ('Herz', 'Pik', 'Kreuz', 'Karo'). |
value (Wert) |
Speichert den initialen numerischen Wert im Blackjack: J/Q/K sind 10, Ass ist 11. |
__str__ |
Methode zur lesbaren Darstellung der Karte (z.B. "Dame von Kreuz"). |
2. 📦 Deck (Kartenstapel)
Die Deck-Klasse ist der Verwalter und die Quelle aller Karten.
| Methode | Aufgabe |
|---|---|
| Konstruktor | Erzeugt alle 52 Card-Objekte (13 Ränge \times 4 Farben) und speichert sie in der internen Liste cards. |
shuffle() |
Mischt die Reihenfolge der Card-Objekte in der internen Liste zufällig durch. |
deal_card() |
Gibt die oberste (oder letzte) Card aus der Liste zurück und entfernt sie gleichzeitig aus dem Stapel. |
3. ✋ Hand (Spielerhand)
Die Hand-Klasse ist der Kern der Blackjack-Regeln, da sie den Wert dynamisch anpasst.
| Attribut/Methode | Aufgabe |
|---|---|
cards |
Liste der Card-Objekte, die aktuell in der Hand gehalten werden. |
value |
Der aktuelle berechnete Blackjack-Wert der Hand. |
aces |
Zähler für die Anzahl der Asse in der Hand. |
add_card(card) |
Fügt die Karte zu cards hinzu, aktualisiert value und aces. Muss anschließend adjust_for_ace() aufrufen. |
adjust_for_ace() |
Die Ass-Logik: Solange der Gesamtwert (value) über 21 ist UND Asse (aces > 0) vorhanden sind, reduziere value um 10 und aces um 1. |
4. 🧑 Player & 🤵 Dealer (Akteure)
Diese Klassen stellen die interagierenden Teilnehmer dar. Dealer erbt die Basisfunktionen von Player.
Player
| Attribut/Methode | Aufgabe |
|---|---|
chips |
Speichert das Guthaben des Spielers. |
hand |
Enthält ein Hand-Objekt. |
hit(deck) |
Zieht eine Karte vom Deck und fügt sie der eigenen Hand hinzu (self.hand.add_card(...)). |
stand() |
Setzt einen Zustand (z.B. eine Eigenschaft $is\_standing$), um den Zug des Spielers zu beenden. |
Dealer (erbt von Player)
| Methode | Aufgabe |
|---|---|
play(deck) |
Führt die automatisierten Züge des Dealers durch: Ruft hit(deck) so lange auf, bis der Handwert 17 oder höher ist. |
5. 🎮 Game (Spielsteuerung)
Die Game-Klasse ist der Orchestrator, der den Spielfluss, die Benutzerinteraktion und die Ergebnisverwaltung koordiniert.
| Attribut/Methode | Aufgabe |
|---|---|
| Konstruktor | Erstellt die zentralen Komponenten: Deck, Player und Dealer. |
play_round() |
Steuert den Rundenablauf: Mischen, Einsatz, Austeilen, Spielerzüge, Dealerzüge, Ergebnisauswertung. |
show_cards() |
Zeigt die Hand des Spielers und die erste aufgedeckte Karte des Dealers an (bis der Vergleich erfolgt). |
compare_hands() |
Bestimmt den Gewinner nach den Regeln (Blackjack, Bust, höherer Wert, Push) und passt die chips des Spielers entsprechend an. |