Triple-triad
A terminal-based Python implementation of the classic Triple Triad card game from Final Fantasy VIII, complete card collection with the classical rules
✨ Features
- 110 cards from FFVIII
- Chiptune music — Retro-style background music generated with NumPy and played through pygame-ce
- Interactive deck builder — Browse, filter, and sort all cards before picking your hand
🎮 How to Play
Triple Triad is a 2-player card game played on a 3×3 grid. Each player has 5 cards. Players take turns placing one card on the board. When a card is placed adjacent to an opponent's card, the touching sides are compared — if the attacker's value is higher, the defender's card is captured. The player with the most cards on the board at the end wins.
┌──────────────────┬──────────────────┬──────────────────┐
│ │ │ │
│ [ 1 ] │ [ 2 ] │ [ 3 ] │
│ │ │ │
├──────────────────┼──────────────────┼──────────────────┤
│ ■Ifrit │ │ │
│ ▲ 9 │ [ 5 ] │ [ 6 ] │
│ ◀ 5 Ice 8 ▶ │ │ │
│ ▼ 6 │ │ │
├──────────────────┼──────────────────┼──────────────────┤
│ □Shiva │ │ │
│ ▲ 6 │ [ 8 ] │ [ 9 ] │
│ ◀ 6 Ice 9 ▶ │ │ │
│ ▼ 7 │ │ │
└──────────────────┴──────────────────┴──────────────────┘
- ■ = Your card
- □ = CPU's card
- Numbers inside empty cells = board position (1–9)
🚀 Getting Started
Prerequisites
- Python 3.13+
- NumPy (for audio synthesis)
- pygame-ce (for audio playback)
Installation from PyPI
Using pip:
pip install triple-triad-ff8
Using uv:
uv pip install triple-triad-ff8
Installation from Source
git clone https://github.com/fernando24164/triple-triad-ff8.git
cd triple-triad-ff8
uv sync --locked
Run the Game
python -m triple_triad
or
uv run triple-triad
or if installed via pip:
triple-triad
Help and Tutorial
To view the game tutorial and learn how to play:
triple-triad --help
or
triple-triad -h
This displays a comprehensive guide covering game rules, card mechanics, and gameplay tips.
🎵 Audio
The game includes a built-in chiptune soundtrack synthesized entirely in software:
- Generated with NumPy — no audio files required
- Played through pygame-ce — if pygame-ce is unavailable, the game runs silently
🧩 Rules
| Rule | Description |
|---|---|
| Open | CPU's hand is visible to the player |
| Same | If 2+ adjacent cards share equal values, all are captured |
| Plus | If 2+ adjacent cards share equal value sums, all are captured |
| Random | Cards are dealt randomly from the full pool |
🛠 Development
Install Dev Dependencies
uv sync --locked
Run Tests
uv run pytest
Lint
uv run ruff check .
🌐 Multiplayer (P2P)
Triple Triad supports direct peer-to-peer multiplayer over TCP.
How it works
- Host starts a lobby on a chosen port (default
64000). - Guest connects using the host's IP address and port.
- The game synchronises rules, board elements, and decks before starting.
⚠️ NAT / Firewall Limitations
The current P2P implementation uses direct TCP connections
| Scenario | Works? |
|---|---|
| Both players on the same local network | ✅ |
| Host has a public IP or port forwarding configured | ✅ |
Workarounds:
- Port forwarding — Configure your router to forward the chosen port (default
64000) to the host machine. - LAN play — Both players on the same local network work without any configuration.
- VPN — Use a VPN (e.g. Tailscale, ZeroTier, Hamachi) to create a virtual LAN.
🤝 Contributing
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch —
git checkout -b feature/my-feature - Make your changes — follow the existing code style
- Run tests —
pytest - Submit a pull request
Please open an issue first for major changes to discuss the approach.
Build
uv build
twine upload dist/*
📄 License
This project is for educational and personal use. Triple Triad is a minigame from Final Fantasy VIII, © Square Enix. All card names and game mechanics are the property of their respective owners.
Release files for triple-triad-ff8 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| triple_triad_ff8-0.1.8.tar.gz | 4.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| triple_triad_ff8-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.6 MB
Release files / triple_triad_ff8-0.1.8.tar.gz
| Download URL | triple_triad_ff8-0.1.8.tar.gz |
|---|---|
| Size | 4.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8c4a0b9975fba20e1ccc2fbd649732ced3c163d5d02e73759a7677a3c7699da1
|
|
BLAKE2b-256 checksum How to use checksums |
6ba99a051a053beaf878d6a442a55ae4a04e785ab386e9eee6fbfd3e1fa693d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.8
|
Release files / triple_triad_ff8-0.1.8-py3-none-any.whl
| Download URL | triple_triad_ff8-0.1.8-py3-none-any.whl |
|---|---|
| Size | 89.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f71b88f3bcfbb57e87da98a74956d700b698b321f24582addcb5d46618590f92
|
|
BLAKE2b-256 checksum How to use checksums |
1fe648b04714f80ea9bae200ffbefdfe72f2fe01959aa93dd1fe8199a1693e89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.8
|