Edit main_page.md
This commit is contained in:
@@ -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 s’arrê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 l’objet 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 don’t 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!
|
||||||
|
|||||||
Reference in New Issue
Block a user