Update Readme

This commit is contained in:
Yohann D'ANELLO 2020-04-10 20:38:13 +02:00
parent ca79095672
commit 939698b21a
4 changed files with 124 additions and 8 deletions

126
README.md
View File

@ -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.

View File

@ -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

View File

@ -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))
}
}

View File

@ -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))
}
}