Skip to content

jnoundu89/PySokoban

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sokoban

Un jeu de puzzle Sokoban complet développé en Python avec une approche modulaire pour la création de niveaux et de nombreuses fonctionnalités améliorées.

Description

Sokoban ("gardien d'entrepôt" en japonais) est un jeu de puzzle classique où le joueur doit pousser des boîtes jusqu'à des emplacements cibles dans un entrepôt. Ce projet implémente le jeu avec:

  • Un système de menu central (hub) pour naviguer entre les différentes fonctionnalités
  • Un mode terminal pour jouer dans la console
  • Un mode GUI utilisant Pygame pour une expérience graphique
  • Un éditeur de niveaux graphique avec fonctionnalité drag-and-drop
  • Un système de skins/sprites pour personnaliser l'apparence du jeu
  • Un système de validation de niveaux pour vérifier qu'ils sont jouables
  • Une structure modulaire permettant d'étendre facilement le jeu
  • Support pour différentes dispositions de clavier (QWERTY et AZERTY)

Structure du projet

Le projet est organisé de manière modulaire:

  • src/ - Package principal contenant tout le code source
    • core/ - Contient les classes de base et les constantes
    • renderers/ - Contient les différents renderers (terminal, GUI)
    • level_management/ - Gestion des niveaux et collections
    • editors/ - Éditeurs de niveaux
    • ui/ - Interface utilisateur et système de menu
    • generation/ - Génération procédurale de niveaux
    • main.py - Point d'entrée unique pour toutes les versions du jeu
  • levels/ - Répertoire contenant les fichiers de niveaux
  • skins/ - Répertoire contenant les différents thèmes visuels

Nouvelles fonctionnalités

Système de Menu (Hub)

Le système de menu central permet aux joueurs de naviguer facilement entre les différentes fonctionnalités du jeu:

  • Jouer au jeu
  • Éditer des niveaux
  • Changer les paramètres
  • Sélectionner des skins
  • Voir les crédits

Éditeur de Niveaux Graphique

L'éditeur de niveaux graphique offre une interface intuitive pour créer et modifier des niveaux:

  • Interface drag-and-drop pour placer les éléments
  • Validation des niveaux pour s'assurer qu'ils sont jouables
  • Test en direct des niveaux
  • Sauvegarde et chargement des niveaux

Système de Skins/Sprites

Le système de skins permet de personnaliser l'apparence du jeu:

  • Chargement de différents thèmes visuels
  • Création de nouveaux thèmes
  • Application des thèmes en temps réel

Comment jouer

Le jeu dispose désormais d'un point d'entrée unique via le module src.main ou le script launch_game.py. Vous pouvez lancer différentes versions du jeu en utilisant l'option --mode.

Mode Amélioré (Recommandé)

Pour lancer le jeu avec toutes les fonctionnalités améliorées (mode par défaut):

python launch_game.py

ou

python -m src.main

ou explicitement:

python -m src.main --mode enhanced

Mode Terminal

Pour jouer en mode terminal:

python -m src.main --mode terminal

Mode GUI (Interface graphique)

Pour jouer avec l'interface graphique:

python -m src.main --mode gui

Éditeur de Niveaux

Pour lancer l'éditeur de niveaux graphique:

python -m src.main --mode editor

Options supplémentaires

Vous pouvez spécifier un répertoire de niveaux différent:

python -m src.main --levels chemin/vers/niveaux

Pour choisir une disposition de clavier spécifique (qwerty ou azerty):

python -m src.main --keyboard azerty

Toutes les options peuvent être combinées:

python -m src.main --mode gui --levels chemin/vers/niveaux --keyboard azerty

Pour voir toutes les options disponibles:

python -m src.main --help

Contrôles

Dans le jeu

Disposition QWERTY (par défaut):

  • Flèches directionnelles ou WASD: Déplacer le joueur
  • R: Réinitialiser le niveau
  • U: Annuler le dernier mouvement
  • N: Niveau suivant (si le niveau actuel est terminé)
  • P: Niveau précédent
  • H: Afficher l'aide
  • Q: Quitter le jeu
  • J: Résoudre automatiquement le niveau (utilise le solveur Sokolution)
  • F11: Basculer en mode plein écran
  • G: Afficher/masquer la grille

Disposition AZERTY:

  • Flèches directionnelles ou ZQSD: Déplacer le joueur
  • R: Réinitialiser le niveau
  • U: Annuler le dernier mouvement
  • N: Niveau suivant (si le niveau actuel est terminé)
  • P: Niveau précédent
  • H: Afficher l'aide
  • A: Quitter le jeu
  • J: Résoudre automatiquement le niveau (utilise le solveur Sokolution)
  • F11: Basculer en mode plein écran
  • G: Afficher/masquer la grille

Dans l'éditeur de niveaux graphique

  • Clic gauche: Placer l'élément sélectionné
  • Clic droit: Effacer l'élément (mettre un sol)
  • Clic sur la palette: Sélectionner un élément
  • Boutons:
    • New: Créer un nouveau niveau
    • Open: Ouvrir un niveau existant
    • Save: Sauvegarder le niveau
    • Test: Tester le niveau
    • Validate: Vérifier si le niveau est valide
    • Help: Afficher l'aide
    • Exit: Quitter l'éditeur

Création de niveaux

Les niveaux sont stockés sous forme de fichiers texte dans le répertoire levels/. Chaque caractère représente un élément du jeu:

  • # - Mur
  • - Sol vide
  • @ - Joueur
  • $ - Boîte
  • . - Cible
  • + - Joueur sur une cible
  • * - Boîte sur une cible

Vous pouvez créer des niveaux manuellement en éditant ces fichiers ou utiliser l'éditeur de niveaux graphique inclus.

Dépendances

Ce projet nécessite:

  • Python 3.6 ou supérieur
  • Bibliothèque keyboard pour le mode terminal
  • Bibliothèque pygame pour le mode GUI et les fonctionnalités améliorées

Installation des dépendances:

pip install -r requirements.txt

Fonctionnalités clés

  • Architecture modulaire séparant la logique du jeu, le rendu et les entrées utilisateur
  • Système de chargement de niveaux à partir de fichiers texte
  • Système de menu central (hub) pour naviguer entre les fonctionnalités
  • Éditeur de niveaux graphique avec drag-and-drop
  • Système de skins/sprites pour personnaliser l'apparence du jeu
  • Validation des niveaux pour s'assurer qu'ils sont jouables
  • Test en direct des niveaux
  • Deux modes de jeu: terminal et GUI
  • Support pour les dispositions de clavier QWERTY et AZERTY
  • Système d'annulation des mouvements
  • Statistiques de jeu (mouvements, poussées)
  • Détection automatique de la complétion des niveaux
  • Navigation entre les niveaux
  • Solveur automatique de niveaux (Sokolution)
  • Mode plein écran (F11)
  • Affichage de grille optionnel
  • Configuration personnalisable via fichier JSON

Solveur Sokolution

Le jeu intègre un solveur avancé basé sur les techniques de Sokolution:

  • Plusieurs algorithmes de recherche (BFS, DFS, A*, IDA*, Greedy)
  • Modes de recherche avant, arrière et bidirectionnel
  • Heuristique avancée utilisant l'algorithme hongrois (couplage biparti)
  • Table de transposition avec fonction de hachage
  • Élagage PI-Corral
  • Macro-mouvements
  • Détection dynamique des impasses

Pour utiliser le solveur pendant le jeu, appuyez sur la touche J. Le solveur tentera de trouver une solution au niveau actuel et, s'il réussit, exécutera automatiquement les mouvements pour résoudre le niveau.

Configuration

Le jeu utilise un fichier de configuration config.json qui permet de personnaliser divers aspects:

Skin

  • current_skin: Le thème visuel actuel
  • tile_size: Taille des tuiles en pixels

Affichage

  • window_width: Largeur de la fenêtre
  • window_height: Hauteur de la fenêtre
  • fullscreen: Mode plein écran (true/false)

Jeu

  • keyboard_layout: Disposition du clavier (azerty/qwerty)
  • show_grid: Affichage de la grille (true/false)
  • zoom_level: Niveau de zoom
  • movement_cooldown: Délai entre les mouvements (en millisecondes)

Touches

Les touches peuvent être personnalisées dans la section keybindings du fichier de configuration.

About

A simple sokoban engine in Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages