Chessistics/docs/GDD_prototype.md
Samuel Bouchet e6eaae43ab Initial commit: Chessistics prototype v0.3
Black box sim engine (commands in, events out) with 3 piece types
(Rook, Bishop, Knight), cargo transfer system with social status
priority, collision detection, and victory/defeat conditions.

57 tests covering rules, simulation, loading, and solvability.
Godot 4 presentation layer scaffolding.
2026-04-10 14:58:03 +02:00

25 KiB

Chessistics — Game Design Document (Prototype)

"Et si la logistique etait contrainte par les echecs ?"

Version : 0.3 — Prototype Scope : 3 niveaux jouables, mecaniques de base uniquement


1. Vision

Chessistics est un jeu de logistique ou le joueur construit des chaines de transport sur un damier. Les unites de transport sont des pieces d'echecs : chacune fait un unique aller-retour entre deux cases, selon ses regles de mouvement. Le joueur assemble des pieces bout a bout pour former des convois qui acheminent des cargaisons des productions vers les demandes.

Chaque piece est un maillon de convoyeur. La strategie est dans la composition des chaines : quelles pieces, ou, dans quel ordre. Les contraintes de mouvement des echecs creent des puzzles de routage emergents — le joueur n'a pas a les "resoudre" explicitement, il developpe une intuition pour les forces de chaque piece.

Core loop :

OBSERVER la situation (productions, demandes, terrain, pieces disponibles)
    |
PLACER des pieces sur le plateau (point de depart + point d'arrivee)
    |
LANCER la simulation — les pieces font leurs allers-retours,
les colis se transmettent automatiquement entre pieces adjacentes
    |
    +---> Le debit est insuffisant ? Observer les goulets, reorganiser
    +---> Le debit est atteint ? Optimiser ou niveau suivant

Ce qui distingue Chessistics :

  • La logistique (macro) : le joueur compose des chaines, choisit sa flotte, gere l'espace
  • Le puzzle chess (micro) : les contraintes de mouvement creent des enigmes de couverture et d'espacement emergentes
  • Le systeme de transfert automatique + statut social elimine toute programmation — le joueur pense reseau, pas code

2. Le plateau

2.1 La grille

Le plateau est un damier avec des cases claires et sombres alternees. Chaque case est identifiee par des coordonnees (colonne, ligne) : a1, b2, etc.

Taille par niveau :

  • Niveaux tutoriels : 4x4 a 6x6
  • Niveaux standard (post-proto) : 8x8+

2.2 Types de cases

Case Visuel Effet
Case claire Carre clair du damier Traversable normalement
Case sombre Carre sombre du damier Traversable (les Fous sont limites a une couleur)
Mur Case barree, gris fonce Bloque toutes les pieces sauf le Cavalier (qui saute)
Production Icone ressource + nom (ex: "Scierie") Produit 1 cargaison tous les N coups. Donne automatiquement a une piece adjacente disponible.
Demande Icone cible + nom (ex: "Depot") + jauge Recoit la cargaison d'une piece adjacente qui arrive avec un colis compatible.

2.3 Cargaison

Pour le prototype, deux types de cargaison (le niveau 3 en utilise deux, les niveaux 1-2 un seul) :

  • Bois (icone buche, couleur brune)
  • Pierre (icone bloc, couleur grise)

Une piece ne peut porter qu'une cargaison a la fois.


3. Les pieces

3.1 Concept fondamental : 1 piece = 1 maillon

Chaque piece fait un unique mouvement en aller-retour perpetuel entre deux cases :

Coup 1: [Depart] ═══► [Arrivee]    (transporte le colis si elle en a un)
Coup 2: [Depart] ◄═══ [Arrivee]    (revient a vide ou avec un colis)
Coup 3: [Depart] ═══► [Arrivee]    (repart)
...a l'infini

Le joueur place une piece en choisissant :

  1. Sa case de depart
  2. Sa case d'arrivee (parmi les cases atteignables en 1 mouvement legal)

C'est tout. Pas de programmation, pas de route multi-etapes. La piece fait l'aller-retour automatiquement.

3.2 Pieces disponibles dans le prototype

3 types, niveau unique :

Tour (niveau II)

        X
        X
  X X [Tour] X X
        X
        X
  • Se deplace de 1 ou 2 cases en ligne droite (horizontal ou vertical)
  • Ne peut pas traverser les murs ni les autres pieces
  • Statut social : 5

Fou (niveau II)

  X           X
    X       X
      [Fou]
    X       X
  X           X
  • Se deplace de 1 ou 2 cases en diagonale
  • Ne peut atteindre que les cases de sa couleur de depart (parite)
  • Ne peut pas traverser les murs ni les autres pieces
  • Statut social : 3

Cavalier

    X   X
  X       X
    [Cav]
  X       X
    X   X
  • Se deplace en L (2+1 ou 1+2 cases)
  • Saute par-dessus les murs et les autres pieces
  • Statut social : 3

A statut egal (Fou et Cavalier = 3), la piece la plus proche de la production a la priorite. Si egalite parfaite, la piece la plus anciennement placee a la priorite.

3.3 Occupation et blocage

  • Chaque piece occupe sa case actuelle (depart ou arrivee selon le coup)
  • Une piece bloque le passage des autres pieces (sauf le Cavalier qui saute)
  • Deux pieces ne peuvent jamais occuper la meme case au meme coup

4. Systeme de transfert

4.1 Le principe

Les colis se transmettent automatiquement entre entites adjacentes (4-connecte : haut, bas, gauche, droite). Le joueur ne gere pas les transferts — il gere l'espace.

Les transferts se produisent entre :

  • Production → Piece : la production donne a une piece adjacente sans colis
  • Piece → Piece : une piece avec colis donne a une piece adjacente sans colis
  • Piece → Demande : une piece avec colis compatible donne a une demande adjacente

4.2 Quand le transfert a lieu

Un transfert se produit quand, a la fin d'un coup (une fois que toutes les pieces ont bouge) :

  • Une entite avec colis et une entite sans colis (ou une demande) sont sur des cases adjacentes (4-connecte)
  • Le colis est compatible (la demande accepte ce type de cargaison)

Le transfert est instantane : le colis passe d'une entite a l'autre entre deux coups.

4.3 Priorite par statut social

Quand plusieurs transferts sont possibles au meme point, le statut social determine l'ordre :

Regle de don : parmi les pieces avec colis adjacentes a un meme receveur, celle de statut le plus eleve donne en premier.

Regle de reception : parmi les pieces sans colis adjacentes a un meme donneur, celle de statut le plus eleve recoit en premier.

Hierarchie de statut social (proto) :
  Tour      5
  Fou       3
  Cavalier  3

Exemple :

  Tour (colis) ─adjacent─ case vide ─adjacent─ Cavalier (vide)
                                     ─adjacent─ Tour (vide)

La Tour avec colis donne. Deux receveurs possibles : Cavalier (3) et Tour (5). La Tour recoit (statut 5 > 3).

4.4 Pourquoi c'est un outil de design

Le statut social n'est pas une regle abstraite — c'est un outil de routage pour le joueur :

  • Aux croisements, le joueur choisit le TYPE de piece pour controler ou va le colis
  • Une Tour "capte" un colis avant un Cavalier — le joueur met une Tour sur la route prioritaire
  • Un Cavalier sur une route secondaire ne prend que les colis que personne d'autre ne veut

Le joueur n'ecrit pas de logique conditionnelle. Il compose sa flotte pour que le flux aille ou il veut.

4.5 Le puzzle d'espacement

Les pieces qui ne doivent PAS interagir doivent etre espacees d'au moins 2 cases. Sinon un transfert involontaire se produit.

PROBLEME — deux chaines trop proches, les colis se melangent :

  ──Tour A──►    ◄──Tour B──    (chaine 1 : bois)
  ──Tour C──►    ◄──Tour D──    (chaine 2 : pierre)
              ↕ adjacentes = transfert involontaire !

SOLUTION — espacer les chaines :

  ──Tour A──►    ◄──Tour B──    (chaine 1)
  .  .  .  .  .  .  .  .        (1 case d'ecart)
  ──Tour C──►    ◄──Tour D──    (chaine 2)

Gerer l'espace sur le plateau pour eviter les interferences EST le puzzle. Le joueur doit router ses chaines en tenant compte des contraintes de mouvement (echecs) ET de l'espacement (logistique).


5. Deroulement d'un coup

5.1 Sequence d'un coup

A chaque coup, dans cet ordre :

1. MOUVEMENT : toutes les pieces bougent simultanement
   (chaque piece avance de Depart→Arrivee ou de Arrivee→Depart)

2. DETECTION DE COLLISION : si deux pieces sont sur la meme case → erreur

3. TRANSFERTS : tous les transferts automatiques se resolvent
   (productions → pieces, pieces → pieces, pieces → demandes)
   En respectant l'ordre de statut social

4. PRODUCTION : les cases de production generent un colis
   (si elles n'en ont pas deja un en attente)

5.2 Collisions

Deux pieces ne peuvent pas occuper la meme case au meme coup. Si cela arrive :

  • Les deux pieces clignotent en rouge
  • La simulation se met en pause
  • Le joueur doit reorganiser ses pieces (revenir en mode edition)

Les collisions sont le signal que les chaines sont mal agencees. Le joueur doit repenser l'espacement ou le timing (pieces de portees differentes arrivent a des moments differents).

5.3 Condition de victoire

Le niveau est reussi quand toutes les demandes ont ete satisfaites selon leur objectif.

Chaque demande specifie : "recevoir N colis de type X en Y coups ou moins".

Exemple : "Le Depot Royal demande 3 livraisons de Bois en 30 coups."

Le compteur de coups tourne en temps reel. Le joueur voit sa progression.


6. Les metriques

A la completion d'un niveau, 3 metriques sont affichees :

Metrique Description Ce que ca mesure
Pieces Nombre de pieces deployees Economie de flotte
Coups Nombre de coups pour atteindre l'objectif Efficacite du reseau
Espace Nombre de cases du plateau utilisees (occupees par une piece au moins 1 coup) Compacite du reseau

Chaque metrique a un histogramme montrant la distribution des solutions de tous les joueurs.

Proto : histogrammes avec donnees fictives pour tester l'UI.

Triangle d'optimisation :

  • Moins de pieces = chaines courtes = couverture limitee → plus de coups
  • Moins de coups = pieces puissantes ou nombreuses → plus de pieces, plus d'espace
  • Moins d'espace = chaines compactes = risque d'interferences → plus difficile a router

Affichage en jeu (pendant la simulation) :

  Coup: 12/30    Depot Royal: 2/3 Bois ✓    Forge: 0/2 Pierre ✗

7. Interface utilisateur

7.1 Ecran de jeu — layout

Le plateau est le centre. L'interface est minimale.

+---------------------------------------------------------------+
|  CHESSISTICS        La Scierie Royale           [≡]  [?]  [←] |
+---------------------------------------------------------------+
|                                              |                 |
|                                              |  OBJECTIF        |
|                                              |  Depot Royal     |
|                                              |  3x Bois / 30c  |
|           P L A T E A U                      |                 |
|         (damier interactif)                  |  ─────────       |
|                                              |                 |
|    Les pieces et leurs trajets               |  PIECES          |
|    sont visibles sur le plateau              |  [Tour II]  x3   |
|                                              |  [Fou II]   x1   |
|                                              |  [Cavalier] x1   |
|                                              |                 |
+---------------------------------------------------------------+
|  [▶ PLAY]  [⏩ x2]  [⏸]  [⏹ STOP]     Coup: --      |
+---------------------------------------------------------------+

7.2 Placement d'une piece

Le flux de placement est en 2 clics :

  1. Le joueur selectionne un type de piece dans le panneau de droite
  2. Il clique une case du plateau → c'est le point de depart. Les cases d'arrivee possibles s'affichent en surbrillance.
  3. Il clique une case en surbrillance → c'est le point d'arrivee. La piece est placee.
  4. Un trait apparait entre depart et arrivee, montrant le trajet.
  Placement d'une Tour II :

  1. Clic sur (a1)         2. Cases atteignables      3. Clic sur (c1)
                               en surbrillance

  .  .  .  .               .  .  .  .                .  .  .  .
  .  .  .  .               .  .  .  .                .  .  .  .
  .  .  .  .               [.][.] .  .                .  .  .  .
  [T] .  .  .              [T][■][■] .                [T]══════[·]
                            ^  a1 a2                   a1       c1
                            haut1 haut2 aussi

Interactions :

  • Clic sur une piece placee → la selectionne, affiche son trajet, panneau de detail
  • Clic droit sur une piece → la retire du plateau (retourne dans le stock)
  • Glisser une piece → deplace son point de depart (recalcule les arrivees possibles)

7.3 Visualisation des trajets

Chaque piece placee affiche son trajet sur le plateau :

  • Trait semi-transparent entre depart et arrivee (couleur unique par piece)
  • Fleches indiquant le sens du mouvement
  • La piece oscille visuellement entre ses deux cases pendant la simulation

Quand plusieurs chaines sont en place, le joueur voit le reseau complet :

  [S]═══Tour A═══[·]  [·]═══Tour B═══[·]  [·]═══Tour C═══[D]
   Scierie         relais              relais              Depot

7.4 Panneau de detail (contextuel)

Quand une piece est selectionnee :

+---------------------------+
| TOUR A (Tour II)          |
| Trajet: a1 ↔ c1 (2 cases)|
| Statut social: 5          |
| Porte: [Bois]             |
| [Retirer]                 |
+---------------------------+

7.5 Phases de jeu

Phase EDIT (temps arrete)

  • Placer, deplacer, retirer des pieces
  • Pas de limite de temps
  • Les trajets sont visibles comme des traits sur le plateau

Phase EXEC (simulation)

  • Les pieces font leurs allers-retours simultanement
  • Les colis se transmettent automatiquement aux points de contact
  • Compteur de coups et progression des objectifs en temps reel
  • Controles : pause, step-by-step, vitesse x1/x2/x4, stop (retour a EDIT)
  • En cas de collision → pause auto, pieces en erreur surlignees

Le joueur peut arreter la simulation a tout moment, reorganiser, et relancer.

7.6 Feedback visuel

Pieces :

  • Glissement fluide d'une case a l'autre (~0.3s)
  • Cavalier : arc leger pendant le saut (~0.4s)
  • Cargaison visible sur la piece (petit cube colore au-dessus)
  • Piece sans colis = silhouette normale. Piece avec colis = silhouette + cube.

Transferts :

  • Quand un colis passe d'une piece a l'autre : animation de "lancer-rattraper" entre les deux (le cube glisse d'une piece a l'autre, ~0.2s)
  • Flash subtil sur le receveur

Productions et demandes :

  • Les productions pulsent quand elles generent un colis
  • Les demandes ont une jauge de progression (ex: "2/3")
  • Jauge verte = objectif atteint. Jauge rouge = pas encore.

Erreurs :

  • Collision : flash rouge + shake des deux pieces
  • Simulation en pause automatiquement

Victoire :

  • Toutes les jauges au vert → animation sobre (les trajets scintillent en dore)
  • Overlay des metriques + histogrammes

8. Les 3 niveaux du prototype

Niveau 1 — "Premier Convoi"

Intention : apprendre a placer une piece et voir la chaine fonctionner. Le joueur decouvre que les pieces sont des maillons.

  4  .  .  .  .
  3  .  .  .  .
  2  .  .  .  .
  1 [S] .  .  [D]

     a  b  c  d
  • Plateau : 4x4
  • S = Scierie (a1, produit du Bois tous les 2 coups)
  • D = Depot Royal (d1, objectif : recevoir 3 Bois en 30 coups)
  • Pieces disponibles : 3x Tour II

Le probleme : La Scierie est en a1, le Depot en d1. Distance : 3 cases. Une Tour II ne se deplace que de 2 cases max. Aucune piece seule ne peut couvrir le trajet.

Le joueur doit enchainer 2 Tours minimum :

  [S]═══Tour A═══[·]───Tour B───[D]
   a1             c1              d1
        (2 cases)     (1 case)

Tour A : a1 ↔ c1 (2 cases). Tour B : c1 ↔ d1 (1 case).

Mais c1 est l'arrivee de Tour A ET le depart de Tour B. Les deux pieces se croisent en c1 → le colis se transmet automatiquement.

Probleme : Tour A et Tour B ne peuvent pas etre sur c1 au meme coup (collision). Le joueur decouvre que les pieces doivent etre decalees :

  • Tour A est en a1 → Tour B est en d1 (pas de conflit)
  • Tour A avance en c1 → Tour B avance en c1 → collision !

Solution : Tour A couvre a1↔c1, Tour B couvre d1↔c1 (meme case mais direction opposee). Coup 1 : A va en c1, B va en c1 → collision. Il faut decaler.

Vraie solution : Tour A couvre a1↔b1 (1 case). Tour B couvre b1↔d1 (2 cases). Decales dans le temps, ils ne sont jamais sur b1 en meme temps car A est en b1 quand B est en d1, et inversement.

Ou : Tour A couvre a1↔c1 (2 cases), Tour B couvre c1↔d1 (1 case). Ils ne sont jamais sur c1 ensemble si les arrivees alternent. A verifier dans la simulation.

Note de design : ce premier niveau est volontairement simple en apparence mais contient deja le puzzle fondamental du jeu — l'espacement et le timing des maillons. Si le joueur place naïvement, ca collisionne. Il apprend en observant.

Objectif pedagogique :

  • Placer une piece (2 clics : depart + arrivee)
  • Comprendre qu'une piece = un maillon, pas un convoi complet
  • Decouvrir le transfert automatique entre pieces adjacentes
  • Premiere rencontre avec le probleme de collision/timing

Niveau 2 — "Deux Clients"

Intention : premier choix logistique. Le joueur decide comment organiser 2 chaines a partir d'une seule source.

  6  .  .  .  .  .  .
  5  .  .  .  .  . [D2]  Caserne — 2 Bois en 30 coups
  4  .  .  .  .  .  .
  3  .  .  .  .  .  .
  2  .  .  .  .  .  .
  1 [S] .  .  .  . [D1]  Depot Royal — 2 Bois en 30 coups

     a  b  c  d  e  f
  • Plateau : 6x6
  • S = Scierie (a1, produit du Bois tous les 2 coups)
  • D1 = Depot Royal (f1, objectif : 2 Bois en 30 coups)
  • D2 = Caserne (f5, objectif : 2 Bois en 30 coups)
  • Pieces disponibles : 4x Tour II, 1x Fou II

L'enjeu :

  • S→D1 : 5 cases en ligne droite. Faisable avec une chaine de Tours.
  • S→D2 : trajet en angle (droite + haut). Plusieurs routes possibles.
  • La Scierie ne produit qu'un colis tous les 2 coups. Les deux chaines partagent la meme source.
  • Le joueur doit decider : comment repartir les colis entre les deux destinations ?

Le statut social entre en jeu : Si le joueur place une Tour (statut 5) vers D1 et un Fou (statut 3) vers D2, tous deux adjacents a la Scierie → la Tour recoit le colis en priorite. D1 est servie en premier, D2 attend.

Le joueur peut inverser la priorite en mettant le Fou vers D1 et la Tour vers D2.

Ou il espace ses chaines pour que chaque direction ait son propre premier maillon adjacent a la Scierie, et alterne naturellement.

Le Fou en diagonale : Le Fou peut couvrir des trajets diagonaux que les Tours ne peuvent pas. Pour atteindre D2 (f5), une route diagonale via le Fou pourrait etre plus courte. Mais le Fou ne peut atteindre que les cases de sa couleur — le joueur decouvre cette contrainte par l'experimentation.

Objectif pedagogique :

  • Premiere decision logistique : repartir le flux
  • Decouvrir le statut social comme outil de routage
  • Decouvrir la contrainte de parite du Fou
  • Gerer deux chaines simultanees partageant une source
  • Sensation de "je concois MON reseau"

Niveau 3 — "Le Col"

Intention : un vrai reseau avec terrain, 2 types de cargaison, et le Cavalier comme solution aux obstacles.

  6 [D2] .  .  .  . [D1]   Depot Royal — 2 Bois en 40 coups
  5  .  .  #  #  #  .      Forge — 2 Pierre en 40 coups
  4  .  .  #  .  .  .
  3  .  .  #  .  .  .
  2  .  .  .  .  .  .
  1 [S1] .  .  .  . [S2]   Scierie (Bois)
                            Carriere (Pierre)
     a  b  c  d  e  f
  • Plateau : 6x6
  • S1 = Scierie (a1, Bois, tous les 2 coups)
  • S2 = Carriere (f1, Pierre, tous les 2 coups)
  • D1 = Depot Royal (f6, objectif : 2 Bois en 40 coups)
  • D2 = Forge (a6, objectif : 2 Pierre en 40 coups)
  • Murs : c3, c4, c5, d5, e5 (barriere en L)
  • Pieces disponibles : 4x Tour II, 1x Fou II, 2x Cavalier

L'enjeu logistique :

Le mur en L coupe le plateau. Les deux routes (S1→D1 et S2→D2) traversent le plateau en diagonale et doivent contourner ou franchir le mur.

Route S1(Bois) → D1(Depot) : a1 → f6

  • Par le bas : a1→f1→f6. Chaine de Tours le long du bord. Long mais faisable.
  • Via le Cavalier : le Cavalier saute le mur. Plus court mais statut social 3, il perd la priorite face aux Tours.

Route S2(Pierre) → D2(Forge) : f1 → a6

  • Meme probleme en miroir, sens inverse.
  • Les deux routes se croisent → risque de transferts involontaires !

Le puzzle de croisement : Si les chaines Bois et Pierre passent par les memes cases intermediaires, les colis risquent de partir dans la mauvaise direction. Le joueur doit :

  • Soit espacer les chaines (routes differentes, chaines separees)
  • Soit utiliser le statut social pour diriger les colis (une Tour capte avant un Cavalier)
  • Soit decaler temporellement les chaines (pieces de portees differentes)

Le Cavalier comme pont : Le Cavalier saute le mur en L. Il peut connecter les deux cotes du plateau la ou les Tours et Fous sont bloques. C'est la piece "speciale" de ce niveau — chere en slot mais indispensable pour certaines routes.

Objectif pedagogique :

  • 2 types de cargaison = flux separes a ne pas melanger
  • Le mur force des choix de flotte non triviaux
  • Le Cavalier comme outil unique (saut)
  • Le puzzle de croisement : gerer les interferences entre chaines
  • Le joueur sent qu'il gere un reseau de transport complet

9. Direction artistique (prototype)

Le prototype vise la lisibilite.

Palette :

  • Damier : beige clair (#F0D9B5) / brun (#B58863)
  • Murs : gris fonce (#555555)
  • Productions : vert doux avec pulsation
  • Demandes : or/jaune avec jauge
  • Trajets : couleur unique par piece (bleu, rouge, violet, orange)
  • Fond : gris neutre (#2D2D2D)

Pieces :

  • Silhouettes 2D classiques des pieces d'echecs (vectorielles)
  • Couleur correspondant au trajet
  • Cargaison = petit cube colore au-dessus (brun = Bois, gris = Pierre)

Trajets sur le plateau :

  • Trait semi-transparent entre depart et arrivee
  • Fleches directionnelles
  • Le trait pulse legerement quand la piece est en mouvement

Animations :

  • Tour/Fou : glissement lineaire (~0.3s)
  • Cavalier : arc de saut (~0.4s)
  • Transfert de colis : le cube glisse d'une piece a l'autre (~0.2s)
  • Collision : flash rouge + shake
  • Victoire : trajets scintillent en dore

10. Choix technique : Godot 4 + C#

Pourquoi Godot 4

Critere Godot 4 MonoGame
Licence MIT (libre) MIT (libre)
Langage C# (.NET) C# (.NET)
Systeme UI Nodes Control natifs A construire from scratch
TileMap Integre A implementer
Tweens Natifs A implementer
Export Win, Linux, Mac, Web Win, Linux, Mac

Architecture suggeree

Chessistics/
  scenes/
    Main.tscn
    Board/
      Board.tscn             — Le damier
      Cell.tscn              — Une case
    Pieces/
      Piece.tscn             — Scene piece (silhouette + cube cargaison)
      TrajectView.tscn       — Trait visuel du trajet (Line2D)
    UI/
      ObjectivePanel.tscn    — Objectifs + stock de pieces
      DetailPanel.tscn       — Detail piece selectionnee
      ControlBar.tscn        — Play / pause / stop / vitesse
      MetricsOverlay.tscn    — Resultats post-victoire
      LevelSelect.tscn       — Selection de niveau
  scripts/
    Core/
      Board.cs               — Grille, cases, adjacence
      Cell.cs                — Type de case, contenu
      Piece.cs               — Type, statut, mouvement, cargaison
      PieceType.cs           — Enum + regles de mouvement + statut social
      TransferResolver.cs    — Logique de transfert (adjacence, priorite, statut)
      Executor.cs            — Moteur de simulation (coups, collisions, transferts)
    Data/
      Level.cs               — Definition d'un niveau
      LevelLoader.cs         — Chargement JSON
    UI/
      PiecePlacer.cs         — Logique du placement 2 clics
      ControlBar.cs          — Play/pause/stop/vitesse
      ProgressDisplay.cs     — Compteur de coups + progression objectifs
  data/
    levels/
      level_01.json
      level_02.json
      level_03.json

Format d'un niveau (JSON)

{
  "id": 1,
  "name": "Premier Convoi",
  "description": "Acheminez du bois de la scierie au depot.",
  "width": 4,
  "height": 4,
  "productions": [
    { "x": 0, "y": 0, "name": "Scierie", "cargo": "wood", "interval": 2 }
  ],
  "demands": [
    { "x": 3, "y": 0, "name": "Depot Royal", "cargo": "wood", "amount": 3, "deadline": 30 }
  ],
  "walls": [],
  "pieces": [
    { "type": "rook", "level": 2, "count": 3 }
  ]
}

11. Risques et questions ouvertes

Question Options Decision proto
Adjacence pour transfert ? 4-connecte (bords) vs 8-connecte (bords + coins) 4-connecte — plus de contrainte = plus de puzzle
La piece tourne a vide ? Oui (aller-retour permanent) vs attend un colis Oui, tourne en permanence — plus visuel, plus simple
Collision = erreur stricte ? Stricte (pause) vs tolerante Stricte — le joueur voit et corrige. Plus simple a implementer.
Sources infinies ? Oui (production periodique sans stock) vs stock limite Production periodique infinie — le proto teste le reseau, pas la gestion de stock
Pieces fixes par niveau ? Fixes (catalogue impose) vs achat libre Fixes — plus facile a designer. L'achat/fabrication est post-proto.
Egalite de statut social ? Proximite > anciennete Proximite puis anciennete — intuitif, pas de regle arbitraire