From 939698b21ad13a00ff2388335a7649bb131d2efe Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 10 Apr 2020 20:38:13 +0200 Subject: [PATCH] Update Readme --- README.md | 126 +++++++++++++++++- .../leveleditor/game/mobs/MobBreaker.scala | 2 +- .../leveleditor/game/mobs/MobHealer.scala | 2 +- .../leveleditor/game/mobs/MobSpeeder.scala | 2 +- 4 files changed, 124 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 09df135..6979fac 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ --- title: Projet programmation 2 -author: Yohann D'ANELLO +author: Yohann D'ANELLO, Édouard Némery --- # The Game @@ -30,7 +30,7 @@ Une tour contient également diverses propriétés : * Des dégâts par tir * Une vitesse de tir * Un prix -* Une fonction permettant de récupérer les mobs sur lesquels tirer +* Une fonction indiquant ce qu'il se passe lorsque la tour tire Le jeu fonctionne par tick. Toutes les 50 millisecondes a lieu un tick. Toutes les tours sont mises à jour, puis les mobs se déplacent éventuellement. La vitesse des tours et des mobs influe sur le fait de faire quelque chose pendant le @@ -43,6 +43,122 @@ 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. +### Différents mobs + +Il existe différents types de mobs. Ils contiennent 3 propriétés : points de vie (dégâts nécessaires pour être tués), +lenteur (nombre de ticks de jeu nécessaires à déclencher un tick chez le mob), butin (nombre de pièces ramassé par +le joueur lorsque le mob est tué). + +À chaque tick de mob, une fonction de tick spécifique au mob est appelée, qui permet des actions supplémentaires. + +Les mobs peuvent être gelés, si tel est le cas le nombre de ticks d'attente est multiplié par 2. Par ailleurs, un facteur +aléatoire compris entre 0.95 et 1.05 est appliqué. + +#### Mob1 + +Ne fait rien de spécial. + +* Points de vie : 2 +* Lenteur : 50 +* Butin : 10 + +#### Mob2 + +Ne fait rien de spécial. + +* Points de vie : 6 +* Lenteur : 20 +* Butin : 20 + +#### MobStrong + +Ne fait rien de spécial. + +* Points de vie : 50 +* Lenteur : 100 +* Butin : 100 + +#### MobHealer + +Soigne de 2 points de vie à chacun de ses ticks tous les mobs à 3 blocs à la ronde, à l'exception de lui-même. + +* Points de vie : 20 +* Lenteur : 60 +* Butin : 20 + +#### MobSpeeder + +Accélère d'un facteur 3 les ticks des mobs à 3 blocs à la ronde, à l'exception de lui-même. + +* Point de vie : 25 +* Lenteur : 60 +* Butin : 30 + +#### MobBreaker + +Casse les tours sur son passage (à tuer à distance) + +* Points de vie : 110 +* Lenteur : 120 +* Butin : 70 + +### Différentes tours + +Différentes tours sont à la disposition du joueur, avec des prix différents (rendant toutes les tours non accessibles +au début du jeu). Elles ont toutes un nombre de dégât indicatif, un nombre de ticks à attendre entre 2 tirs, et si +elle est améliorée ou non (voir UpgradeTower). Elles disposent aussi d'une fonction `shot` précisant l'action de la tour +à chaque tir. + +#### BasicTower + +Cette tour tire sur une unique cible aléatoire à 3 blocs à la ronde. + +* Période : 5 +* Prix : 10 +* Dégâts : 1 (3 si améliorée) + +#### WallTower + +Cette tour ne fait rien, agit uniquement comme un mur empêchant les mobs de passer par là. + +* Période : +infini +* Prix : 5 +* Dégâts : 0 + +#### FreezeTower + +Cette tour ne faît aucun dégât et gêle pendant 40 ticks (2 secondes), 100 ticks (5 secondes) si améliorée, tous les mobs +à 3 blocs à la ronde. + +* Période : 10 +* Prix : 40 +* Dégâts : 0 (1 si améliorée) + +#### ExploderTower + +Cette tour lance des projectiles explosifs, qui inflige le double des dégâts à la cible ainsi que des dégâts aux mobs +présents à 3 blocs à la ronde de ce mob. La portée est de 5 blocs. + +* Période : 20 +* Prix : 70 +* Dégâts : 3 (7 si améliorée) + +#### UpgradeTower + +Cette tour améliore de façon permanente toutes les tours à 5 blocs à la ronde (sauf elle-même). + +* Période : 60 +* Prix : 65 +* Dégâts : 0 (1 si améliorée) + +#### LaserTower + +Cette tour tire des rayons laser dans les quatre directions et chaque mob reçoit des dégâts. + +* Période : 40 +* Prix : 80 +* Dégâts : 3 + ## 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 @@ -67,10 +183,10 @@ 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`. +une classe héritant de `Mob`. -Il en est de même pour les tours, avec `BasicTower`, `WallTower` et `AutoTower`. +Il en est de même pour les tours, qui hérite de `Tower`. 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. +par exemple) est de pouvoir mieux personnaliser les fonctions, par exemple en intégrant les dégâts aléatoires. diff --git a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobBreaker.scala b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobBreaker.scala index d783797..c533556 100644 --- a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobBreaker.scala +++ b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobBreaker.scala @@ -3,7 +3,7 @@ package fr.ynerant.leveleditor.game.mobs import fr.ynerant.leveleditor.game.GameFrame class MobBreaker extends Mob { - override def getMaxHP = 40 + override def getMaxHP = 110 override def _getSlowness = 120 diff --git a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobHealer.scala b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobHealer.scala index 22ee208..c8a6ef5 100644 --- a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobHealer.scala +++ b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobHealer.scala @@ -12,6 +12,6 @@ class MobHealer extends Mob { override def getName = "mobhealer" override def _tick(game: GameFrame): Unit = { - game.getMobs.filter(mob => Math.pow(mob.getX - getX, 2) + Math.pow(mob.getY - getY, 2) <= 9).foreach(mob => mob.heal(1)) + game.getMobs.filter(mob => Math.pow(mob.getX - getX, 2) + Math.pow(mob.getY - getY, 2) <= 9).foreach(mob => mob.heal(2)) } } diff --git a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobSpeeder.scala b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobSpeeder.scala index 53df575..2ef1261 100644 --- a/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobSpeeder.scala +++ b/src/main/scala/fr/ynerant/leveleditor/game/mobs/MobSpeeder.scala @@ -12,6 +12,6 @@ class MobSpeeder extends Mob { override def getName = "mobspeeder" override def _tick(game: GameFrame): Unit = { - game.getMobs.filter(mob => Math.pow(mob.getX - getX, 2) + Math.pow(mob.getY - getY, 2) <= 9).foreach(mob => mob.speedup(3)) + game.getMobs.filter(mob => Math.pow(mob.getX - getX, 2) + Math.pow(mob.getY - getY, 2) <= 9 && mob != this).foreach(mob => mob.speedup(3)) } }