diff --git a/Backlog sprint 3 b/Backlog sprint 3 index 5b4896b74d1e4c1e2e420b175d5fa844a3a967b9..789130f70770515fd8ac70a2e8699c8576534a6b 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 de78864a43d271e6e34398455c2cf2afc5b65a3e..dd3c9acc510a15def0b998054cafaab95a280e89 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 0000000000000000000000000000000000000000..6035ee899497d5f96e5872b820826824e31e2d82 --- /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 0000000000000000000000000000000000000000..f46ba8cc702c3a0a1eeeae131ff0878a79df7005 --- /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 1e6a2df26fc01212df5da6c0a135cb232ae1ef1d..ab5301cf53d65e8a138ae20363acb0ba9c29afbd 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 f07b22332739557ec4a89c1f105acd00c9cfec3f..605b289ce83fa0e631d9f029bc80ebdde89321ac 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;