From 3d13bea7947c311023ac2998f2d57deda45da167 Mon Sep 17 00:00:00 2001 From: Louis <malterre.louis@laposte.net> Date: Sat, 10 Dec 2022 19:23:28 +0100 Subject: [PATCH] perso qui attaque a distance implemente LM --- Backlog sprint 3 | 10 +-- .../src/main/java/entity/Character.java | 6 ++ MAVENProject/src/main/java/entity/Kunai.java | 81 +++++++++++++++++++ .../main/java/entity/ShootingCharacter.java | 32 ++++++++ MAVENProject/src/main/java/jeu/Jeu.java | 17 +++- MAVENProject/src/main/java/jeu/Painter.java | 16 ++++ 6 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 MAVENProject/src/main/java/entity/Kunai.java create mode 100644 MAVENProject/src/main/java/entity/ShootingCharacter.java diff --git a/Backlog sprint 3 b/Backlog sprint 3 index 5b4896b..789130f 100644 --- a/Backlog sprint 3 +++ b/Backlog sprint 3 @@ -1,10 +1,10 @@ --Avoir des collisions fonctionnelles --Création des monstres +-Avoir des collisions fonctionnelles + +-Création des monstres + -Création des coffres et des clés --Création des vies --Création de la caméra +-Création des vies + +-Création de la caméra + -Création du niveau --Implémenter une musique +-Implémenter une musique + diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index de78864..dd3c9ac 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -208,4 +208,10 @@ public class Character extends Entity{ public Boolean death(){ return nbLifePoints == 0; } + + public Map<String, Double> getTableCommande() { + return tableCommande; + } + + } diff --git a/MAVENProject/src/main/java/entity/Kunai.java b/MAVENProject/src/main/java/entity/Kunai.java new file mode 100644 index 0000000..6035ee8 --- /dev/null +++ b/MAVENProject/src/main/java/entity/Kunai.java @@ -0,0 +1,81 @@ +package entity; + +import java.util.List; + +import environnement.Coordonnees; +import environnement.HitBox; +import static jeu.Jeu.getMonsterList; + +public class Kunai { + private final int direction; //1 si vers la droite, -1 si vers la gauche + private final int damage; + private final double vitesse = 5; + private HitBox hitBox; + private Coordonnees coord; + private final Coordonnees coordInit; //coordonnees initiales + private boolean disappear = false; //variable disant si le kunai doit disparaitre ou non + private static final int sideLength = 16; + + public Kunai(int dir,int dmg,Coordonnees c){ + coord = c; + coordInit = coord; + damage = dmg; + direction = dir; + hitBox = new HitBox(coord,sideLength,sideLength); + } + + public void deplacement(){ //deplacement du kunai + double newX = coord.getX() + direction*vitesse; + this.coord = new Coordonnees(newX, this.coord.getZ()); + } + + public void updateHitBox(){ //on update la hitbox du kunai + hitBox = new HitBox(coord,sideLength,sideLength); + } + + public void dealsDamage(Entity entity){ + if (HitBox.collision(hitBox, entity.getHitBox())){ + if (entity.nbFramesInvincible == 0){ + entity.setNbLifePoints(Math.max(entity.getNbLifePoints()-damage,0)); + entity.nbFramesInvincible = entity.nbMaxFramesInvicible;//l'entity devient invincible qq frames + } + disappear = true; //disparait apres choc avec un monstre + } + } + + private void evolveKunai(){ + deplacement(); + updateHitBox(); + for (Monster monster : getMonsterList()){ + dealsDamage(monster); + if (disappear)break; //si le kunai a disparu on arrete de regarder les autres monstres + + } + if (Math.abs(coordInit.getX()-coord.getX()) >= 500) disappear = true; //au bout d'une certaine distance parcourue, il disparait + } + + public static void evolveAllKunais(List<Kunai> liste){ + for (Kunai kunai : liste){ + kunai.evolveKunai(); + } + int k = 0; + while (k < liste.size()){ + if (liste.get(k).disappear) liste.remove(liste.get(k)); + else k++; + } + } + + public Coordonnees getCoord() { + return coord; + } + + public HitBox getHitBox() { + return hitBox; + } + + public static int getSideLength() { + return sideLength; + } + + +} diff --git a/MAVENProject/src/main/java/entity/ShootingCharacter.java b/MAVENProject/src/main/java/entity/ShootingCharacter.java new file mode 100644 index 0000000..f46ba8c --- /dev/null +++ b/MAVENProject/src/main/java/entity/ShootingCharacter.java @@ -0,0 +1,32 @@ +package entity; + +import java.util.List; + +import environnement.Coordonnees; +import jeu.Jeu; + +public class ShootingCharacter extends Character{ + + private int hasAttacked = 0; //varialbe disant si il a deja attaque, il ne peut attaque que toutes les deux frames, ainsi il ne peut attaquer que si = 0 + public ShootingCharacter(Coordonnees c, double vitesseMax, double m, double impSaut){ + super(c, vitesseMax, m, impSaut); + } + + public void attaque(){ + if (this.getTableCommande().get("CommandAttack") != 0 && hasAttacked == 0){ //on ajoute un kunai dans la liste + List<Kunai> temp = Jeu.getKunaiList(); + Coordonnees coordKunai = new Coordonnees(coord.getX()+direction*Kunai.getSideLength()/2+direction*this.getEntityWIDTH()/2, coord.getZ()); + temp.add(new Kunai(direction, attackStat, coordKunai)); + Jeu.setKunaiList(temp); + hasAttacked++; + } + } + + public void evolveCharacter(){ + super.evolveCharacter(); + if (hasAttacked > 0){ + hasAttacked++; + if (hasAttacked > 50)hasAttacked = 0; + } + } +} diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index 1e6a2df..ab5301c 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -10,7 +10,9 @@ import java.util.List; import java.util.Map; import entity.Character; +import entity.Kunai; import entity.Monster; +import entity.ShootingCharacter; import engine.Game; import environnement.Coordonnees; import environnement.HitBox; @@ -58,6 +60,7 @@ public class Jeu implements Game{ private static List<Obstacle> obstacleTable = new ArrayList<>(); private static List<Monster> monsterList = new ArrayList<>(); + private static List<Kunai> kunaiList = new ArrayList<>(); //private static List<Coffre> coffreTable = new ArrayList<>(); @@ -111,8 +114,8 @@ public class Jeu implements Game{ monsterList.add(new Monster(new Coordonnees(300, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5)); //on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite") - gameCharacterLoader = new CharacterLoader(characterSkinPath,new Character(new Coordonnees(300, 300), 1500, 1,600000)); - gameCharacter = new Character(new Coordonnees(xdebut, zdebut), 1500, 1,600000); + gameCharacterLoader = new CharacterLoader(characterSkinPath,new ShootingCharacter(new Coordonnees(300, 300), 1500, 1,600000)); + gameCharacter = new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000); //on remplit la map des frames Map<String,Integer> tempMap = gameCharacterLoader.getPathTable(); @@ -149,6 +152,8 @@ public class Jeu implements Game{ gameCharacter.evolveCharacter(); //monstres evoluent dans le jeu Monster.evolveAllMonsters(monsterList); + //kunais evoluent dans le jeu + Kunai.evolveAllKunais(kunaiList); //animation du perso dans le jeu (definir la bonne frame a cet instant) animation(Attack, Right, Left); @@ -231,6 +236,14 @@ public class Jeu implements Game{ return monsterList; } + public static List<Kunai> getKunaiList() { + return kunaiList; + } + + public static void setKunaiList(List<Kunai> kunaiList) { + Jeu.kunaiList = kunaiList; + } + } \ No newline at end of file diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index f07b223..605b289 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -1,6 +1,7 @@ package jeu; import engine.GamePainter; +import entity.Kunai; import entity.Monster; import environnement.Coordonnees; import environnement.HitBox; @@ -49,6 +50,7 @@ public class Painter implements GamePainter{ drawObstacleBis(crayon,test,"plateforme.png"); // A changer drawLifePoints(crayon); drawMonsters(crayon); + drawKunais(crayon); } @@ -170,6 +172,20 @@ public class Painter implements GamePainter{ } } + private void drawKunais(Graphics2D crayon){ + int x; + int z; + crayon.setColor(Color.blue); + for (Kunai kunai : getKunaiList()){ + crayon.setColor(Color.blue); + + x = (int)kunai.getCoord().getX(); + z = (int)kunai.getCoord().getZ(); + if (HitBox.collision(gameCharacter.getHitBox(),kunai.getHitBox()))crayon.setColor(Color.red); + crayon.fillRect(x-Kunai.getSideLength()/2 - xCam, z-Kunai.getSideLength()/2 - zCam, Kunai.getSideLength(), Kunai.getSideLength()); + } + } + @Override public int getWidth() { return WIDTH; -- GitLab