This commit is contained in:
Yohann D'ANELLO 2020-02-26 00:03:02 +01:00
parent 707dd160d6
commit 07d8c480de
2 changed files with 36 additions and 0 deletions

View File

@ -1,3 +1,8 @@
---
title: Projet programmation 2
author: Yohann D'ANELLO
---
# The Game
## Présentation globale
@ -38,3 +43,34 @@ Si un mob doit se déplacer, un chemin est calculé jusqu'au bord de la fenêtre
de collisions est en effet géré, empêchant 2 mobs ou tours de se trouver au même endroit. Si un tel chemin existe, alors
le mob avance d'une case selon ce chemin. Sinon, il reste sur place.
## Implémentation
Le projet est intégralement fait en Java. On ne détaillera pas ici la partie éditeur de niveau, bien qu'elle soit
conséquente.
Une fois que l'utilisateur a choisi la carte à utilisateur via un menu de sélection, le jeu se lance dans une fenêtre
distincte, gérée par la classe `fr.ynerant.leveleditor.game.GameFrame`.
Le coeur du jeu est géré dans un Thread en boucle infinie, une boucle attendant 50 ms avant de passer à l'itération suivante.
Le fonctionnement est détaillé plus haut.
L'affichage du jeu est quant à lui géré dans un `JPanel` dédié, avec la fonction `paintComponent` réécrite.
Dès que le panel est paint, on demande à ce qu'il soit repaint pour s'assurer que l'affichage est correct.
Dans l'ordre, on dessine les sprites de la carte (couche 1, couche 2 puis couche 3), puis les différents mobs et les tours
via leurs sprites.
La carte est composée d'une longueur, d'une largeur et de la liste des cases.
Une case est une position et 3 sprites (couche 1, couche 2, couche 3).
Un sprite est une image de taille 16x16, qui contient des informations sur l'endroit où le chercher.
Un Mob est une classe abstraite contenant des informations abstraites (détaillées plus haut). Un type de mob sera donc
une classe héritant de `Mob`, telles que `Mob1`, `Mob2` et `MobCancer`.
Il en est de même pour les tours, avec `BasicTower`, `NullTower` et `AutoTower`.
L'intérêt de l'héritage par rapport à un type donné à une classe Mob (paramètres donnés dans une enumération `MobType`
par exemple) est de pouvoir mieux personnaliser les fonctions, par exemple en imaginant des dégâts aléatoires.

BIN
README.pdf Normal file

Binary file not shown.