Update Readme
This commit is contained in:
parent
ca79095672
commit
939698b21a
126
README.md
126
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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue