██╗ ██╗██╗███╗ ██╗ ██████╗ ██████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ██████╗
██║ ██╔╝██║████╗ ██║██╔════╝ ██╔══██╗██╔═══██╗████╗ ████║██║████╗ ██║██╔═══██╗
█████╔╝ ██║██╔██╗ ██║██║ ███╗██║ ██║██║ ██║██╔████╔██║██║██╔██╗ ██║██║ ██║
██╔═██╗ ██║██║╚██╗██║██║ ██║██║ ██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║██║ ██║
██║ ██╗██║██║ ╚████║╚██████╔╝██████╔╝╚██████╔╝██║ ╚═╝ ██║██║██║ ╚████║╚██████╔╝
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ╚═════╝
Build your kingdom, one domino at a time.
Un jeu Kingdomino complet dans votre terminal ! Jouez seul contre des bots ou entre amis, directement depuis la ligne de commande.
- 2 a 4 joueurs — humains et/ou bots
- 4 niveaux de bots — random, greedy, advanced, expert
- Rendu riche en Unicode — terrains emoji (🏰 🌾 🌲 🌊 🌿 🏚 ⛏), couronnes (👑), couleurs
- Interface interactive — navigation clavier, curseur de placement, ghost preview
- Regles extras — configurables dynamiquement selon le mode et le nombre de joueurs
- Ecran de resultats — classement avec medailles 🥇🥈🥉, score anime, mini-royaumes
- Transitions animees — overlay entre joueurs, flash de placement, pulsation du titre
- Replay immediat — rejouez directement depuis l'ecran de resultats
# Via npx (pas d'installation)
npx @pompidup/kingdomino-cli
# Ou installation globale
npm install -g @pompidup/kingdomino-cli
kingdominokingdomino [options]| Option | Description |
|---|---|
--help, -h |
Affiche l'aide |
--version, -v |
Affiche la version |
--debug |
Mode debug (logging verbose du moteur) |
| Ecran | Touches | Action |
|---|---|---|
| Titre | Enter |
Demarrer |
| Config | Tab |
Naviguer entre les champs |
↑ ↓ |
Changer les valeurs | |
Espace |
Activer/desactiver les regles extras | |
Enter |
Lancer la partie | |
| Jeu — Pick | ↑ ↓ |
Selectionner un domino |
Enter |
Choisir le domino | |
| Jeu — Place | ← ↑ ↓ → |
Deplacer le curseur |
R |
Rotation (0° → 90° → 180° → 270°) | |
Enter |
Placer le domino | |
D |
Defausser (si aucun placement valide) | |
Tab |
Voir les royaumes des autres joueurs | |
| Resultats | Enter |
Rejouer |
Q |
Quitter | |
| Global | Ctrl+C |
Quitter |
Le projet suit une Clean Architecture (Ports & Adapters) :
src/
├── domain/ # Types metier, ports (interfaces)
│ ├── types.ts # AppState, ScreenName, GameConfig, CursorState
│ └── ports/ # GamePort, BotPort, StatePort, UIPort
├── application/ # Use cases, orchestration
│ ├── state-manager.ts # Gestion d'etat (dispatch/subscribe)
│ ├── selectors.ts # Selecteurs purs derives du state
│ ├── game-orchestrator.ts # Setup de partie
│ ├── config-validator.ts # Validation de config
│ └── error-feedback.ts # Mapping erreurs → feedback UI
├── infrastructure/ # Adapters concrets
│ ├── engine-adapter.ts # Wraps @pompidup/kingdomino-engine
│ └── bot-adapter.ts # Wraps les strategies bot
├── presentation/ # Fonctions de rendu pures → RenderLine[]
│ ├── terrain.ts # Tuiles, symboles, couleurs
│ ├── kingdom-grid.ts # Grille 9x9 avec ghost preview
│ ├── draft-column.ts # Colonne de selection de dominos
│ ├── turn-info.ts # Barre d'info du tour
│ ├── status-bar.ts # Raccourcis clavier / erreurs
│ ├── transition-overlay.ts # Overlay transition joueur
│ ├── results-screen-render.ts # Ecran de resultats
│ └── ...
├── screens/ # Ecrans interactifs (App + key handlers)
│ ├── title-screen.ts
│ ├── config-screen.ts
│ ├── game-screen.ts
│ └── results-screen.ts
├── cli.ts # Parsing des arguments CLI
└── index.ts # Point d'entree, wiring DI
- Result Pattern — Les adapters retournent
{ ok, value } | { ok, error }, jamais de throw - Immutabilite — Chaque dispatch produit un nouvel etat
- Separation UI/logique — Les composants ne connaissent que leurs props
- Dependency Injection — Tous les adapters sont injectes dans les ecrans
- Node.js >= 18
- pnpm >= 10
pnpm installpnpm build # Build avec tsup
pnpm dev # Build en mode watch
pnpm start # Lancer le jeu (apres build)
pnpm test # Tests unitaires et integration (vitest)
pnpm lint # Type-check (tsc --noEmit)
pnpm lint:check # ESLint
pnpm format # Formatter avec Prettier
pnpm format:check # Verifier le formatage| Outil | Role |
|---|---|
| TypeScript | Langage |
| tsup | Bundler |
| Vitest | Tests |
| ESLint | Linting |
| Prettier | Formatage |
| @pompidup/kingdomino-engine | Moteur de jeu |
| @pompidup/cligrid | Framework TUI |
| Terrain | Emoji | Couleur |
|---|---|---|
| Chateau | 🏰 | Gris |
| Ble | 🌾 | Jaune |
| Foret | 🌲 | Vert fonce |
| Mer | 🌊 | Bleu |
| Prairie | 🌿 | Vert clair |
| Marais | 🏚 | Marron |
| Mine | ⛏ | Gris fonce |
MIT - voir LICENSE