Projet ZZ1 : Labyrinthe

Ghost Maze

But du jeu

Un noble chevalier fut envoyé dans le sous-sol d'un chateau afin de chasser un fantome. Le chevalier est équipé d'une épée mais ce n'est pas ce qui va tuer le fantome car en effet, il ne craint que la lumière. Ce chevalier possède un artéfact magique qui lui permet de voir la pièce ou il se trouve en échange d'énergie, aussi appellée mana. Mais dans ce labyrinthe se trouvent des cristaux qui permettent au chevalier de recharger plus vite son mana. D'autres chevaliers peuvent arriver afin de preter main forte.

Le fantome quant à lui ne va pas se laisser faire et va donc tenter d'éliminer le chevalier. Il possède la capacité de traverser les murs en échange de mana mais ne peut pas ramasser de cristaux.

Mise en place générale

Nous avons déja notre labyrinthe qui nous sert de base auquel nous avons rajouté des salles. Ces salles sont générés aléatoirement et leur nombre est proportionnel au nombre de cases. Par exemple, pour 100 cases (et donc un labyrinthe de 10x10), il y a 3 salles.

Nous avons ensuite besoin de nos chevaliers. Ils existent en 9 couleurs, chaque joueur aura donc une couleur différente. Chaque chevalier possède une torche qui éclaire autour de lui mais principalement devant lui (ce qui, je le conçois, n'est pas forcément très réaliste). Il faudra donc pour tuer le fantome, qu'il se trouve juste devant notre chevalier. On a utilisé un masque pour l'affichage de la lumière et créer l'effet d'une lampe (une image noire mais avec de la transparence au milieu pour laisser apparaitre le personnage en dessous). Enfin, la caméra est proche du chevalier, il n'a pas besoin d'avoir une vision globale car sa vision est réduite.

Notre fantome quant à lui, voit le labyrinthe en entier, sans masque qui lui bloque la vision. Il se déplace de la meme façon qu'un chevalier et inflige des dégats s'il touche un chevalier. Il prend des dégats s'il se trouve face à face avec un chevalier.

Les cristaux sont générés dans le labyrinthe. Si un cristal est ramassé par un chevalier, il disparait et la regénération du mana du chevalier en question augmente (dans la partique, on diminue le temps minimum entre 2 utilisations).

Pour finir, le fantome et les chevalier possèdent chacun une barre de vie, un indicateur pour la disponibilité de leur pouvoir et donc un pouvoir spécial qui ne prend effet que pour un joueur en particulier. Lorsque l'on appuie sur la touche S, le pouvoir spécial est en effet géré en fonction de l'id du joueur.

Organisation du code

Notre jeu est découpé en de nombreux fichiers, ce qui nous permet de s'organiser efficacement et de mieux s'y retrouver.

Notre moteur de jeu se trouve dans le fichier game.c qui est appelé par le main. Chaque entité possède ses propres fichiers pour la gestion de l'entité en question et son affichage. Ces entités nécessitent pour leur bon fonctionneement, l'utilisation de modules. Ces modules correspondent aussi bien aux structures sur lesquelles nous avons travaillé précédemment comme les tas et les graphes mais aussi d'autres outils pour les collisions, obtenir les coordonnées d'une case à partir de son numéro, ...

On retrouve également dans des dossiers à part, les différentes images et les fichiers pour le son.

Gameplay

L'écran de démarrage du jeu :



Le gameplay du côté du fantome :



L'animation du fantome :



Le pouvoir du fantome :



Le gameplay du côté des chevaliers :



Le gameplay du côté des chevaliers, avec la lampe torche, sa barre de vie et l'étoile pour indiquer que le mana est rechargé au maximum :



Le pouvoir des chevaliers :



L'animation de gameover :



Le mode spéctateur qui permet de regarder la fin de la partie :



Multijoueur

Gestion du multijoueur avec un serveur et plusieurs clients qui se connectent.

Le gameplay à deux joueurs, un fantome et un chevalier :



Gestion du multijoueur avec un serveur et plusieurs clients qui se connectent.

À plusieurs pour tester la resistance du serveur :




Debug

Voir le labyrinthe sans les textures :



Voir les hitboxs de collisions :