Files
blackjack/docs/class_tasks.md

77 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2025-10-26 11:18:08 +01:00
# 🛠️ 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. |