MouleHunter est une intelligence artificielle sophistiquĂ©e dĂ©veloppĂ©e pour jouer au jeu compĂ©titif de la "PĂȘche aux Moules". L'IA utilise des algorithmes de pathfinding avancĂ©s, notamment un parcours en largeur modifiĂ© (BFS), pour naviguer efficacement dans un environnement de type labyrinthe, collecter des moules et optimiser l'utilisation de bonus stratĂ©giques.
Score = (Valeur_Moule à 10) + (Bonus_Collectés) - (Distance à 0.3) - (Ressources_Utilisées)
Cette formule permet d'évaluer chaque objectif potentiel en tenant compte de multiples facteurs pour une décision optimale.
MouleHunter/
â
âââ main.py # Point d'entrĂ©e principal de l'application
âââ .env # Configuration (non versionnĂ©, Ă crĂ©er)
âââ .example.env # Template de configuration
âââ .gitignore # Fichiers exclus du versioning
âââ _config.yml # Configuration Jekyll (documentation web)
âââ README.md # Documentation utilisateur
âââ LICENSE # Licence MIT
â
âââ .github/
â âââ workflows/ # CI/CD GitHub Actions
â
âââ docs/ # Documentation complĂ©mentaire
Responsable du parsing et de la gestion de l'environnement de jeu :
Cerveau décisionnel du bot comportant :
parcourt_largeur_avec_frites() - Navigation avec capacité de sautparcourt_largeur_avec_biere() - Navigation avec mouvements multiplesevaluer_objectif() pour scorer chaque cible potentiellechoisir_coup() pour sélectionner le meilleur mouvement
âââââââââââââââââââ
â Serveur de Jeu â
â (TCP/IP) â
ââââââââââŹâââââââââ
â
â Socket Connection
â (IP:PORT)
â
âŒ
âââââââââââââââââââ
â MouleHunter â
â Client â
â â
â âââââââââââââ â
â â Labyrintheâ â
â â Parser â â
â âââââââŹââââââ â
â â â
â ⌠â
â âââââââââââââ â
â â IA â â
â â Engine â â
â âââââââŹââââââ â
â â â
â ⌠â
â âââââââââââââ â
â â Decision â â
â â Maker â â
â âââââââââââââ â
âââââââââââââââââââ
| Composant | Requis Minimum | Recommandé |
|---|---|---|
| Processeur | 1 GHz single-core | 2 GHz dual-core ou plus |
| Mémoire RAM | 512 MB | 2 GB ou plus |
| Espace Disque | 100 MB | 500 MB |
| Réseau | Connexion internet stable | Connexion filaire avec faible latence |
python --version ou python3 --versionLe projet utilise uniquement les bibliothĂšques standard de Python :
socket - Communication réseauos - Gestion des variables d'environnementcollections - Structures de données (deque pour BFS)random - Génération de mouvements aléatoires| ParamÚtre | Description |
|---|---|
| Protocole | TCP/IP |
| Port | Configurable (défini dans .env) |
| Firewall | Autoriser les connexions sortantes vers le serveur de jeu |
| Latence | < 100ms recommandé pour une performance optimale |
# Cloner le repository
git clone https://github.com/Thenoob24/MouleHunter.git
# Naviguer dans le dossier
cd MouleHunter
https://github.com/Thenoob24/MouleHunter
# Copier le template de configuration
cp .example.env .env
# Sous Windows :
copy .example.env .env
Ăditer le fichier .env avec vos paramĂštres :
# Configuration du serveur de jeu
SERVEUR_IP=192.168.1.100
SERVEUR_PORT=5555
NOM_EQUIPE=MouleHunter_Team
| ParamĂštre | Description | Exemple |
|---|---|---|
SERVEUR_IP |
Adresse IP du serveur de jeu | 192.168.1.100 ou localhost |
SERVEUR_PORT |
Port TCP du serveur | 5555 (valeur typique) |
NOM_EQUIPE |
Nom d'identification de votre équipe | MouleHunter_Team |
.env ne doit PAS ĂȘtre versionnĂ© (il est dans .gitignore)
# Vérifier la version Python
python --version
# ou
python3 --version
# Devrait afficher : Python 3.8.x ou supérieur
# Lister les fichiers du projet
ls -la
# ou sous Windows :
dir
AprĂšs installation et configuration, votre dossier devrait contenir :
MouleHunter/
âââ main.py â Script principal
âââ .env â Votre configuration (créé)
âââ .example.env â Template
âââ README.md â Documentation
âââ LICENSE â Licence MIT
âââ docs/ â Documentation supplĂ©mentaire
python main.py
# ou si nécessaire :
python3 main.py
Un démarrage réussi affiche :
đź ConnectĂ© â MouleHunter_Team (Joueur 0)
En attente du début de la partie...
# Créer une session screen
screen -S moulehunter
# Lancer l'application
python3 main.py
# Détacher la session : Ctrl+A puis D
# Réattacher : screen -r moulehunter
# Créer une session tmux
tmux new -s moulehunter
# Lancer l'application
python3 main.py
# Détacher : Ctrl+B puis D
# Réattacher : tmux attach -t moulehunter
Créer le fichier /etc/systemd/system/moulehunter.service :
[Unit]
Description=MouleHunter IA Bot
After=network.target
[Service]
Type=simple
User=votre_utilisateur
WorkingDirectory=/chemin/vers/MouleHunter
ExecStart=/usr/bin/python3 /chemin/vers/MouleHunter/main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Commandes de gestion du service :
# Recharger systemd
sudo systemctl daemon-reload
# Activer le service au démarrage
sudo systemctl enable moulehunter
# Démarrer le service
sudo systemctl start moulehunter
# Vérifier le statut
sudo systemctl status moulehunter
# Voir les logs
sudo journalctl -u moulehunter -f
Créer un Dockerfile :
FROM python:3.10-slim
WORKDIR /app
COPY . /app
CMD ["python", "main.py"]
Construction et exécution :
# Construire l'image
docker build -t moulehunter .
# Exécuter le conteneur
docker run -d --name moulehunter-bot \
--env-file .env \
--restart unless-stopped \
moulehunter
python main.py
đź ConnectĂ© â GodMoules2025 (Joueur 0)
đź Tour Ă (5, 3) | đ 2 | đș 1
đŻ StratĂ©gie FRITES: 4 coups, 1 frites nĂ©cessaires
Bonus en route: đ 1 | đș 0
đ UTILISE FRITE ! (reste 1)
â đ +1 frite (total: 2)
â đ +5 moules
âĄïž JOUE: Bs-N
| Message | Signification |
|---|---|
đź ConnectĂ© â Nom (Joueur X) |
Connexion réussie, numéro de joueur assigné |
En attente du début de la partie... |
En attente d'autres joueurs ou du démarrage |
| ĂlĂ©ment | Description |
|---|---|
Tour Ă (x, y) |
Position actuelle du bot |
đ X |
Nombre de frites disponibles |
đș X |
Nombre de biĂšres disponibles |
đŻ StratĂ©gie XXX |
Stratégie choisie (NORMALE, FRITES, BIERE) |
âĄïž JOUE: XXX |
Mouvement effectué |
L'IA envoie des commandes au serveur sous forme de chaßnes de caractÚres spécifiques. Voici les principaux formats :
| Commande | Description | Exemple | Coût / Effet |
|---|---|---|---|
N / S / E / O |
Mouvement cardinal normal (1 case) | N |
1 tour |
Bs- |
Utilise une frite pour sauter un mur dans la direction indiquée | Bs-N |
1 frite + 1 tour |
Bp- |
Utilise une biÚre pour effectuer jusqu'à 3 mouvements consécutifs | Bp-N-S-E |
1 biĂšre + 1 tour (3 cases) |
C |
Attente / Passer son tour (utilisé en mode exploration ou blocage) | C |
1 tour perdu |
Bp-) doivent ĂȘtre valides et ne pas traverser de mur sans frite. L'IA simule toujours les chemins avant envoi.
L'algorithme central est un Breadth-First Search adapté aux contraintes du jeu :
parcourt_largeur_avec_frites() : autorise un saut de mur si frite disponibleparcourt_largeur_avec_biere() : simule des séquences de 2 ou 3 cases en un coupexploration_aléatoire_pondérée() : backup quand aucune cible n'est visibleà chaque tour, l'IA :
evaluer_objectif()
# Aller dans le dossier du projet
cd MouleHunter
# Récupérer les derniÚres modifications
git pull origin main
# Relancer le bot
python3 main.py
python3 main.py >> logs/moulehunter_$(date +%Y%m%d_%H%M).log 2>&1
tail -f logs/moule*.log
htop, ss -tuln (connexions), journalctl -u moulehunter (si systemd)Conservez toujours une copie de votre .env en lieu sûr (ne jamais le commiter).
| ProblĂšme | Cause probable | Solution |
|---|---|---|
| Connection refused | Serveur non lancé / mauvais IP:port | Vérifier .env + démarrer le serveur + tester avec telnet IP PORT |
| Déconnexions fréquentes / timeout | Latence réseau / firewall | Tester ping, utiliser connexion filaire, augmenter timeout si modifiable |
| IA reste immobile / envoie C en boucle | Aucune cible viable trouvée | Vérifier visibilité moules/bonus, relancer partie, debug grille |
| Erreur parsing grille | Protocole serveur modifié | Comparer avec version serveur synave/peche_aux_moules |
| Python version trop ancienne | Python < 3.8 | Mettre Ă jour Python |
print(grille) dans le parser ou activer mode verbose dans le code.
.env
# ââââââââââââââââââââââââââââââââââââââââââââââââ
# MouleHunter - Fichier .env
# ââââââââââââââââââââââââââââââââââââââââââââââââ
SERVEUR_IP=127.0.0.1
SERVEUR_PORT=12345
NOM_EQUIPE=GodMoules2026
Mu / # : Mur0-9 : Moule (valeur)Bs : Bonus FritesBp : Bonus BiĂšreTe : Case vide / traversable