Files
Sokoban/README.md
2025-09-29 16:57:06 +00:00

5.3 KiB
Raw Blame History

Table des Matières

Rapport

Modélisation du jeu et décision de structure

Nous avons choisi d'utiliser Doxygen pour faire une documentation de notre code. La majorité de ce PDF est la documentation de notre code.

Nous sommes partis sur un tableau 2D de char afin de représenter notre plateau. Nous avons utilisé des char car on sait qu'on n'a pas besoin de plus de possibilités de nombre qu'un octet. Nous avons fait des define qui permettent de définir quels nombres correspondent à quel objet dans le jeu (joueur, caisse, mur, ...).

Nous avons ensuite créé une structure coor qui représente des coordonnées x et y. Cela est pratique pour naviguer dans le tableau 2D.

Nous utilisons une structure de score qui contient tout ce qu'il faut pour calculer le score à la fin de la partie : le temps avant et après la partie (pour obtenir le temps passé), le nombre de déplacements du joueur ainsi que ceux des caisses.

Pour finir, nous avons créé une structure dis contenant tout ce qu'il faut pour l'affichage SDL : window, renderer, taille de la fenêtre, taille des boîtes et taille du menu. La fenêtre s'adapte à n'importe quel écran.

Comment lancer le jeu ?

Il vous faut installer SDL2, SDL2 Mixer, SDL2 Image, SDL2 TTF, make et gcc.

make all
./sokoban

Les contrôles

  • zqsd pour se déplacer
  • Échap pour sortir du niveau
  • Entrée pour sélectionner le niveau à jouer

Pour aller plus loin

  1. Tous nos niveaux sont stockés dans des fichiers .txt dans le dossier map. Les fichiers original_X sont au nombre de trois et représentent des niveaux construits manuellement. Les fichiers custom_X sont les niveaux créés avec l'éditeur intégré.

  2. Nous avons fait un affichage de score en fin de niveau prenant en compte :

    • le temps passé
    • le nombre de mouvements du joueur
    • le nombre de mouvements des caisses
    • la réussite du niveau
  3. Affichage en temps réel du chronomètre, des déplacements du joueur et des caisses.

  4. Menu permettant de sélectionner un niveau et de le lancer. Les niveaux originaux sont représentés par un escalier blanc, les niveaux créés par léditeur par un escalier noir.

  5. La partie sarrête automatiquement si le joueur ne peut plus gagner. Il peut alors observer son score.

  6. Éditeur de niveau intégré :

    • Déplacement du personnage avec zqsd
    • Clic gauche pour placer un objet, clic droit pour placer lobjet précédent
    • Sauvegarde automatique lors de la sortie, niveau ajouté au menu principal
    • Pour modifier un niveau après sauvegarde, il faut éditer le fichier .txt manuellement
  7. Effets visuels supplémentaires : végétation générée avec seed, sprites différents selon direction du personnage, menu des titres

Bon jeu !


Report

Game Modeling and Structure Decisions

We chose to use Doxygen to create a documentation of our code. Most of this PDF is the code documentation itself.

We used a 2D char array to represent our game board. We chose char since we dont need more values than a byte. We defined constants (#define) to map numbers to game objects (player, box, wall, etc.).

We then created a coor structure to represent x and y coordinates, which is useful for navigating the 2D array.

We also have a score structure that tracks everything needed to compute the score at the end of the game: start and end time (to get total duration), number of player moves, and number of box moves.

Finally, we created a dis structure to hold all SDL display elements: window, renderer, window size, box size, and menu size. The window adapts to any screen size.

How to Run the Game

You need SDL2, SDL2 Mixer, SDL2 Image, SDL2 TTF, make, and gcc.

make all
./sokoban

Controls

  • zqsd to move
  • Escape to exit the level
  • Enter to select and start the level

Going Further

  1. All levels are stored in .txt files in the map folder. Files original_X are three manually created levels. Files custom_X are levels created with the built-in editor.

  2. End-of-level score display includes:

    • time spent
    • player moves
    • box moves
    • level completion
  3. Real-time display of timer, player moves, and box moves

  4. Menu for selecting and starting a level. Original levels use a white staircase icon; custom levels use a black staircase icon

  5. The game ends automatically if the player can no longer win, allowing them to view their score

  6. Built-in level editor:

    • Move character with zqsd
    • Left click to place an object, right click to revert previous object
    • Automatic save on exit; level added to main menu
    • To edit a saved level, modify the .txt file manually
  7. Additional visual effects: ground vegetation generated via seed, different sprites for character directions, title menu

Enjoy the game!