Update README.md

This commit is contained in:
2025-10-23 15:00:58 +02:00
parent 14cc802cfa
commit 1cc754b7e7

171
README.md
View File

@@ -1,2 +1,171 @@
# blackjack # Blackjack Game Design Document
## 1. Flowchart (Spielablauf)
```mermaid
flowchart TD
A([Start]) --> B[Deck erstellen und mischen]
B --> C[Spieler und Dealer erhalten je 2 Karten]
C --> D{Blackjack?}
D -->|Ja| E[Gewinner sofort ermitteln]
D -->|Nein| F[Spielerzug: Hit oder Stand]
F --> G{Bust?}
G -->|Ja| H[Dealer gewinnt]
G -->|Nein| F
F --> I[Spieler steht]
I --> J[Dealer zieht bis >= 17]
J --> K{Bust?}
K -->|Ja| L[Spieler gewinnt]
K -->|Nein| M[Vergleich der Punkte]
M --> N{Wer näher an 21?}
N -->|Spieler| O[Spieler gewinnt]
N -->|Dealer| P[Dealer gewinnt]
N -->|Gleichstand| Q[Push]
O --> R[Ergebnis anzeigen]
P --> R
Q --> R
R --> S{Neues Spiel?}
S -->|Ja| B
S -->|Nein| T([Ende])
```
## 2. UML-Klassendiagramm
```mermaid
classDiagram
class Card {
- rank: str
- suit: str
- value: int
+ __str__(): str
}
class Deck {
- cards: List[Card]
+ shuffle(): void
+ deal_card(): Card
}
class Hand {
- cards: List[Card]
- value: int
- aces: int
+ add_card(card: Card): void
+ calculate_value(): int
+ adjust_for_ace(): void
}
class Player {
- name: str
- chips: int
- hand: Hand
+ hit(deck: Deck): void
+ stand(): void
}
class Dealer {
+ play(deck: Deck): void
}
class Game {
- deck: Deck
- player: Player
- dealer: Dealer
+ play_round(): void
+ compare_hands(): str
+ show_cards(): void
}
Player <|-- Dealer
Game --> Player
Game --> Dealer
Game --> Deck
Player --> Hand
Hand --> Card
Deck --> Card
```
## 3. Implementierungs-Roadmap mit Tests
### Phase 1: Grundstruktur
- **Ziel:** Klassen anlegen, ohne Logik.
- Dateien: `card.py`, `deck.py`, `hand.py`, `player.py`, `dealer.py`, `game.py`, `main.py`.
- Methoden-Signaturen definieren.
**Test:** Importiere alle Klassen in `main.py` und prüfe, ob keine Fehler auftreten.
---
### Phase 2: Card
- `__init__`: Speichert Rang, Farbe, Wert.
- `__str__`: Gibt z.B. "K♠" zurück.
**Test:**
```python
card = Card("A", "")
print(card) # Erwartet: A♠
```
---
### Phase 3: Deck
- `__init__`: Erzeugt 52 Karten.
- `shuffle()`: Mischt die Karten.
- `deal_card()`: Gibt eine Karte zurück und entfernt sie.
**Test:**
- Prüfe, ob `len(deck.cards) == 52` nach Erstellung.
- Nach `deal_card()`: Länge = 51.
---
### Phase 4: Hand
- `add_card(card)`: Fügt Karte hinzu.
- `calculate_value()`: Summiert Werte.
- `adjust_for_ace()`: Reduziert Ass von 11 auf 1, wenn nötig.
**Test:**
- Hand mit Ass + 9 → Wert = 20.
- Hand mit Ass + 9 + 5 → Wert = 15.
---
### Phase 5: Player & Dealer
- `Player.hit(deck)`: Karte ziehen.
- `Dealer.play(deck)`: Zieht bis Wert ≥ 17.
**Test:**
- Spieler zieht Karte → Handgröße +1.
- Dealer zieht automatisch bis ≥ 17.
---
### Phase 6: Game
- `play_round()`: Ablauf wie im Flowchart.
- `compare_hands()`: Gewinner bestimmen.
- `show_cards()`: Karten anzeigen.
**Test:**
- Simuliere eine Runde:
- Spieler steht sofort.
- Dealer spielt.
- Ergebnis wird angezeigt.
---
### Phase 7: Erweiterungen
- Chips & Einsätze.
- Mehrere Spieler.
- Features wie Split, Double Down.
**Test:**
- Chips reduzieren sich nach Einsatz.
- Gewinn/Verlust korrekt berechnet.
---
### Teststrategie
- **Unit-Tests** für jede Klasse (z.B. mit `pytest`).
- **Integrationstest**: Komplette Runde simulieren.
- **Edge Cases**:
- Mehrere Asse.
- Spieler oder Dealer hat Blackjack.
- Beide haben denselben Wert.