Edit main_page.md

This commit is contained in:
2025-09-29 16:56:25 +00:00
parent f527903a7f
commit 2b60103cde

View File

@@ -1,69 +1,118 @@
# Table des Matières
- 🇫🇷 French
1. [Rapport](#rapport)
2. [Modélisation du jeu et décision de structure](#modélisation-du-jeu-et-décision-de-structure)
3. [Comment lancer le jeu ?](#comment-lancer-le-jeu-)
4. [Les contrôles](#les-contrôles)
5. [Pour aller plus loin](#pour-aller-plus-loin)
- 🇬🇧 English
1. [Report](#report)
2. [Game Modeling and Design Decisions](#game-modeling-and-design-decisions)
3. [How to Run the Game?](#how-to-run-the-game)
4. [Controls](#controls)
5. [Going Further](#going-further)
# Rapport # Rapport
Nous avons choisi d'utiliser doxygen pour faire une documentation de notre code. La majorité de ce pdf est la documentation de notre code. ## Modélisation du jeu et décision de structure
## 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 parti sur un tableau 2d de `char`afin de représenter notre plateau. Nous avons utiliser 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, ...).
des `char` car on sait qu'on a pas besoin de plus de possibilité de nombre que un octet. On a fait des `define`
qui permettent de definir quelles nombres correspondent à quel objet dans le jeu (joueur , caisse, mur, ...).
Nous avons ensuite créer une structure `coor` qui est une structure representant des coordonnées x et y. 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.
Cela est pratique pour naviger dans le tableau 2d par exemple.
Nous utilisons une structure de score qui prend comme variable ce qu'il y a besoin pour calculer le score a la 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.
fin de la partie. Il y a le temps avant la partie et apres (pour obtenir le temps passer dans la partie), ensuite
on a le nombre de déplacement fait par le joueur ainsi que les déplacement fait par les caisses.
Pour finir on a fais uns structure `dis` qui est une structure possédant tout ce qu'il faut 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.
pour faire l'affichage `SDL`. En effet on a la `window`, le `renderer`, on a la taille de la fenêtre,
la taille des boites ainsi que la taille du menu.
Nous avons fait en sorte que pour n'importe quel écran la fenêtre s'adapte à celle-ci.
## Comment lancer le jeu ? ## Comment lancer le jeu ?
Il vous faut installer SDL2, SDL2 Mixer, SDL2 Image, SDL2 ttf, make, gcc. Il vous faut installer SDL2, SDL2 Mixer, SDL2 Image, SDL2 TTF, `make` et `gcc`.
```bash ```bash
make all make all
./sokoban ./sokoban
``` ```
## Les contrôles:
- zqsd pour se déplacer ## Les contrôles
- échap pour sortir du niveau
- entrée pour sélectioner le niveau à jouer * `zqsd` pour se déplacer
* `Échap` pour sortir du niveau
* `Entrée` pour sélectionner le niveau à jouer
## Pour aller plus loin ## Pour aller plus loin
(1) Tout nos niveau sont stocké dans des fichier .txt dans le dossier map. Les fichier nommé original_X sont au nombre de trois, et repésente des niveau que nous avons construit. 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é.
Les fichier nommé custom_X sont les niveau crée avec l'éditeur de niveau. 2. Nous avons fait un affichage de score en fin de niveau prenant en compte :
Nous chargement donc les niveaux depuis leurs fichier texte, de cette manièrere nous pouvons assez simplement ajouter ou retirer des niveau.
(2) Nous avons fait un affichage de score en fin de niveau, qui prends en compte: * le temps passé
- le temps passé dans le niveau. * le nombre de mouvements du joueur
- le nombre de mouvements du personnage. * le nombre de mouvements des caisses
- le nombre de mouvements des caisses. * la réussite du niveau
- 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é :
(3) Nous avons donc un affichage en temps réel du chronomètre, ainsi que le nombre de déplacement du joueur et le nombre de déplacement des caisses. * Déplacement du personnage avec `zqsd`
* Clic gauche pour placer un objet, clic droit pour placer lobjet précédent
(4) Nous avons fait un menu dans lequel le joueur doit se déplacer sur un niveau, puis faire entré afin de lancer le niveau. * Sauvegarde automatique lors de la sortie, niveau ajouté au menu principal
Les niveau originaux sont imagé avec un escalier de couleur blanche tandis que les niveau crée avec l'éditeur sont imagé avec un escalier de couleur noir. * 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
(5) La partie s'arrete automatiquement si le joueur ne peut plus gagner, dans ce cas il peut alors observer son score.
(+) L'éditeur de niveau:
Nous avons créer un outil de création de niveau dans notre jeux, afin de créer des niveau plus rapidement.
L'éditeur se trouve tout à droite du menu.
Un fois rentrer dedans un fichier texte (custom_X.txt) va etre créer.
Dans cette éditeur vous pouvez déplacer le personnages avec z,q,s,d,
vous pouvez également modifier le plateau en faisant soit un clic gauche (sur la case voulue) pour placer un objet suivant,
ou vous pouvez faire un clic droit pour placer l'objet précedent.
Enfin il vous suffira de faire échape ou fermer le programme afin de sauvegarder le niveau. Il apparaitra donc en tant que niveau custom dans le menu principal.
Attention : une fois un niveau enregistrer il n'est plus possible de le modifier via le programme, il vous faudra aller dans le dossier maps et modifier à la main les charactère.
(+) nous avons ajouter aussi quelques effet visuel... (génération avec seed de la végétation au sol, différents sprites pour le personnage suivant la direction ou encore un menu des titres)
Bon jeu ! 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`.
```bash
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!