78 lines
1.7 KiB
Markdown
78 lines
1.7 KiB
Markdown
# Card Game Template
|
|
|
|
A starter template for building turn-based card games with Textual.
|
|
|
|
## Features
|
|
|
|
- **Card Widget**: Customizable playing cards with suit, rank, face-up/down state
|
|
- **Hand Container**: Display and manage player hands
|
|
- **Play Area**: Central area for cards in play
|
|
- **Turn System**: Basic turn management
|
|
- **Interactivity**: Card selection and playing with keyboard shortcuts
|
|
|
|
## Running the Template
|
|
|
|
```bash
|
|
python app.py
|
|
```
|
|
|
|
## Key Bindings
|
|
|
|
- `d` - Draw a card
|
|
- `space` - Select/deselect card
|
|
- `p` - Play selected card
|
|
- `n` - Next turn
|
|
- `q` - Quit
|
|
|
|
## Customization
|
|
|
|
### Card Values
|
|
|
|
Modify the `Card` class to add game-specific properties:
|
|
|
|
```python
|
|
class Card(Widget):
|
|
def __init__(self, rank: str, suit: str, power: int = 0, special_ability: str = ""):
|
|
self.power = power
|
|
self.special_ability = special_ability
|
|
# ...
|
|
```
|
|
|
|
### Game Rules
|
|
|
|
Implement game logic in the `CardGameApp` methods:
|
|
- `on_card_played()` - Validate and process card plays
|
|
- `action_draw_card()` - Implement deck management
|
|
- `action_next_turn()` - Add turn-based game logic
|
|
|
|
### Card Appearance
|
|
|
|
Edit `Card.compose()` or the CSS in `app.tcss` to change card styling.
|
|
|
|
### Deck Management
|
|
|
|
Add a `Deck` class to manage card shuffling and drawing:
|
|
|
|
```python
|
|
class Deck:
|
|
def __init__(self):
|
|
self.cards = []
|
|
self.shuffle()
|
|
|
|
def shuffle(self):
|
|
import random
|
|
random.shuffle(self.cards)
|
|
|
|
def draw(self) -> Card | None:
|
|
return self.cards.pop() if self.cards else None
|
|
```
|
|
|
|
## Structure
|
|
|
|
```
|
|
card-game-template/
|
|
├── app.py # Main application
|
|
├── app.tcss # Styles
|
|
└── README.md # This file
|
|
```
|