# duploGame Jeu Pygame pour piloter 1 ou 2 trains LEGO DUPLO avec clavier PC ou contrôleurs arcade/joysticks. ## Fonctionnalités - splash screen au démarrage - menu de connexion de 1 ou 2 trains - écran partagé en 2 zones de contrôle indépendantes - support clavier (2 joueurs) + joysticks (1 joystick par joueur) - intégration de `duploController` (asynchrone) pour piloter les trains ## Dépendances - Python 3.10+ - `pygame` - `duploController` : https://gitea.christophe-scaya.fr/scayac/duploController ## Installation Exemple: ```bash python -m venv .venv source .venv/bin/activate pip install pygame pip install git+https://gitea.christophe-scaya.fr/scayac/duploController.git ``` ## Lancement ```bash python main.py ``` ## Export Batocera (.pygame) Un script d'export est disponible pour générer un package `.pygame`: ```bash python tools/export_batocera_pygame.py --name duploGame --entrypoint main.py ``` Le fichier est généré dans `dist/duploGame.pygame`. Par défaut (`--mode folder`), l'export génère le dossier `dist/duploGame/` au format style Retrotrivia avec: - `dist/duploGame/duploGame.pygame` (script lanceur) - les fichiers du jeu et assets à côté - `vendor/` pour les modules Python embarqués Ce format est généralement le plus compatible avec Batocera. Le mode `single-file` reste disponible, mais moins recommandé: ```bash python tools/export_batocera_pygame.py --mode single-file ``` Dans ce mode, l'export génère `dist/duploGame.pygame` et un dossier payload `dist/duploGame/`. Par défaut, le script embarque les modules Python `duplo_controller`, `bleak` et `dbus_fast` dans `vendor/`. Options utiles: ```bash python tools/export_batocera_pygame.py \ --project-dir . \ --output-dir dist \ --name duploGame \ --entrypoint main.py \ --mode folder \ --vendor-module duplo_controller \ --vendor-module bleak \ --vendor-module dbus_fast ``` Si un module vendor n'est pas présent sur la machine de build: ```bash python tools/export_batocera_pygame.py --allow-missing-vendor ``` Ensuite, copier vers Batocera: - mode `folder`: copier le dossier `dist/duploGame/` dans `/userdata/roms/pygame` - mode `single-file`: copier `dist/duploGame.pygame` **et** `dist/duploGame/` dans `/userdata/roms/pygame` ## Contrôles ### Menu - `UP` / `DOWN` (ou joystick) : choisir 1 ou 2 joueurs - `ACTION 1` joueur 1 : connecter/déconnecter train 1 - `ACTION 1` joueur 2 : connecter/déconnecter train 2 (mode 2 joueurs) - `START` joueur 1 : lancer le mode contrôle (si trains requis connectés) - `SELECT` joueur 1 (ou touche `C`) : ouvrir la configuration joystick - `ACTION 2` joueur 1 (ou touche `K`) : ouvrir la configuration clavier ### Configuration joystick - `LEFT/RIGHT` : sélectionner joueur 1 ou 2 - `UP/DOWN` : sélectionner la fonction à mapper (`UP`, `DOWN`, `LEFT`, `RIGHT`, `A1..A6`, `SELECT`, `START`) - `ACTION 1` : entrer en mode capture, puis appuyer sur le bouton physique à associer - `SELECT` : reset mapping par défaut du joueur sélectionné - `START` : retour menu Les mappings sont sauvegardés automatiquement dans `joystick_mappings.json` à la racine du projet, et rechargés au prochain lancement du jeu. Important borne arcade: si votre encodeur expose le stick en boutons (et non en axes/hat), mappez explicitement `UP`, `DOWN`, `LEFT`, `RIGHT` dans cet écran. ### Configuration clavier - `LEFT/RIGHT` : sélectionner joueur 1 ou 2 - `UP/DOWN` : sélectionner la fonction à mapper (`UP`, `DOWN`, `LEFT`, `RIGHT`, `A1..A6`, `SELECT`, `START`) - `ACTION 1` : entrer en mode capture, puis appuyer sur la touche clavier à associer - `SELECT` : reset mapping clavier par défaut du joueur sélectionné - `START` : retour menu Les mappings clavier sont sauvegardés automatiquement dans `keyboard_mappings.json` à la racine du projet, et rechargés au prochain lancement du jeu. ### En jeu - `UP` / `DOWN` : accélérer / freiner - `LEFT` / `RIGHT` : changer la couleur de la lumière - `ACTION 1..5` : sons du train - `ACTION 6` ou `SELECT` : arrêt immédiat - `START` : retour menu - `ESC` : quitter ### Mappings clavier - Joueur 1: - Directions: `W/Z`, `S`, `A/Q`, `D` - Actions 1..6: `1 2 3 4 5 6` - Start: `Entrée` - Select: `Backspace` - Joueur 2: - Directions: `↑ ↓ ← →` - Actions 1..6: `U I O J K L` - Start: `Shift droit` - Select: `Ctrl droit` ### Mappings joystick arcade (par défaut) - Directions: D-Pad (hat) ou axes gauche X/Y - Actions 1..6: boutons `0..5` - Select: bouton `6` - Start: bouton `7` Ces mappings sont modifiables à chaud via l'écran de configuration joystick. > Si `duploController` n'est pas installé, le jeu démarre en mode simulation (sans contrôle BLE réel).