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
|
||||
|
||||
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
|
||||
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 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éer une structure `coor` qui est une structure representant des coordonnées x et y.
|
||||
Cela est pratique pour naviger dans le tableau 2d par exemple.
|
||||
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 prend comme variable ce qu'il y a besoin pour calculer le score a la
|
||||
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.
|
||||
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 on a fais uns structure `dis` qui est une structure possédant tout ce qu'il faut
|
||||
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.
|
||||
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, gcc.
|
||||
Il vous faut installer SDL2, SDL2 Mixer, SDL2 Image, SDL2 TTF, `make` et `gcc`.
|
||||
|
||||
```bash
|
||||
make all
|
||||
./sokoban
|
||||
```
|
||||
## Les contrôles:
|
||||
|
||||
- zqsd pour se déplacer
|
||||
- échap pour sortir du niveau
|
||||
- entrée pour sélectioner le niveau à jouer
|
||||
## Les contrôles
|
||||
|
||||
## Pour aller plus loin
|
||||
* `zqsd` pour se déplacer
|
||||
* `Échap` pour sortir du niveau
|
||||
* `Entrée` pour sélectionner le niveau à jouer
|
||||
|
||||
(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.
|
||||
Les fichier nommé custom_X sont les niveau crée avec l'éditeur de niveau.
|
||||
Nous chargement donc les niveaux depuis leurs fichier texte, de cette manièrere nous pouvons assez simplement ajouter ou retirer des niveau.
|
||||
## Pour aller plus loin
|
||||
|
||||
(2) Nous avons fait un affichage de score en fin de niveau, qui prends en compte:
|
||||
- le temps passé dans le niveau.
|
||||
- le nombre de mouvements du personnage.
|
||||
- le nombre de mouvements des caisses.
|
||||
- la réussite du niveau.
|
||||
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 :
|
||||
|
||||
(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.
|
||||
* 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 s’arrête automatiquement si le joueur ne peut plus gagner. Il peut alors observer son score.
|
||||
6. Éditeur de niveau intégré :
|
||||
|
||||
(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.
|
||||
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.
|
||||
* Déplacement du personnage avec `zqsd`
|
||||
* Clic gauche pour placer un objet, clic droit pour placer l’objet 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
|
||||
|
||||
(5) La partie s'arrete automatiquement si le joueur ne peut plus gagner, dans ce cas il peut alors observer son score.
|
||||
Bon jeu !
|
||||
|
||||
(+) 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)
|
||||
# Report
|
||||
|
||||
Bon jeu !
|
||||
## 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