From 25577227e019a64bc5976331e67ec9e69afd8384 Mon Sep 17 00:00:00 2001 From: Louis MALTERRE <malterre.louis@laposte.net> Date: Wed, 23 Nov 2022 19:56:21 +0100 Subject: [PATCH] methode deplacements changee, y'a plus d'argument a lui donner j'ai fait qq modifs sur certains attributs, notamment passer l'attribut hitbox en attribut de la classe Entity car chaque Entity a une hitbox. j'ai laisse en comm l'ancienne version du deplacement dans jeu si jamais LM --- MAVENProject/PlanUML.puml | 4 + .../src/main/java/engine/GameController.java | 1 - .../main/java/engine/GameEngineGraphical.java | 1 - .../src/main/java/entity/Character.java | 74 ++++++++++++++----- MAVENProject/src/main/java/entity/Entity.java | 7 +- MAVENProject/src/main/java/jeu/Jeu.java | 30 ++++++-- 6 files changed, 89 insertions(+), 28 deletions(-) diff --git a/MAVENProject/PlanUML.puml b/MAVENProject/PlanUML.puml index 0e292a2..7a4c29e 100644 --- a/MAVENProject/PlanUML.puml +++ b/MAVENProject/PlanUML.puml @@ -59,8 +59,12 @@ class engine.GameEngineGraphical { class entity.Character { - masse - impulsionSaut +- tableCommand + void deplacements() ++ void resetCommand() ++ void getGameCommand() + void attaque() ++ void evolveCharacter() } class entity.Monster{ + Coordonnees positions diff --git a/MAVENProject/src/main/java/engine/GameController.java b/MAVENProject/src/main/java/engine/GameController.java index 8b62d1a..b4f8e56 100644 --- a/MAVENProject/src/main/java/engine/GameController.java +++ b/MAVENProject/src/main/java/engine/GameController.java @@ -1,7 +1,6 @@ package engine; import java.awt.event.KeyListener; -import java.util.ArrayList; import java.util.HashMap; /** diff --git a/MAVENProject/src/main/java/engine/GameEngineGraphical.java b/MAVENProject/src/main/java/engine/GameEngineGraphical.java index e1c454e..e82d395 100644 --- a/MAVENProject/src/main/java/engine/GameEngineGraphical.java +++ b/MAVENProject/src/main/java/engine/GameEngineGraphical.java @@ -1,6 +1,5 @@ package engine; -import java.util.ArrayList; import java.util.HashMap; /** diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 3aab51a..b7c696d 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -1,5 +1,8 @@ package entity; +import java.util.HashMap; +import java.util.Map; + import environnement.Coordonnees; import environnement.HitBox; import environnement.Physique; @@ -11,47 +14,84 @@ public class Character extends Entity{ private double vitesseActuZ = 0; private final double impulsionSaut; private double masse; - private HitBox charaterHitBox; - private final double entityWIDTH = 30; - private final double entityHEIGHT= 60; + private int alpha = 1; // gere les collisions avec le sol + private final double characterWIDTH = 30; // pour l'instant je les ai renommes, ca peut changer + private final double characterHEIGHT= 60; + private Map<String,Double> tableCommande; //table des commandes du perso + public Character(Coordonnees c,double vitesseMax,double m,double impSaut){ - super(c,vitesseMax); + super(c,vitesseMax,null); // comme tous les entities ont une hitbox, j'ai factorise this.masse = m; this.impulsionSaut = impSaut; - this.charaterHitBox = new HitBox(c,entityHEIGHT,entityWIDTH); + this.hitBox = new HitBox(c,characterHEIGHT,characterWIDTH); + this.tableCommande = new HashMap<String,Double>(); + tableCommande.put("CommandX",(double)0); + tableCommande.put("CommandZ",(double)0); + } @Override - public void deplacements(double commandX,double commandZ,int alpha){ // alpha indique si il est au sol ou non, il vaut 0 ou 1 en fonction + public void deplacements(){ // alpha indique si il est au sol ou non, il vaut 0 ou 1 en fonction + getGameCommand(); double delta = Math.pow(10, -3); // pas de temps remis en secondes //on actualise les positions double newX,newZ; - newX = commandX*delta + this.getCoord().getX(); // frottements enleves (le perso finissait par freiner tout seul donc tant que y'a pas d'interet je les enleve, j'ai tjr les equations de cote) + newX = tableCommande.get("CommandX")*delta + this.getCoord().getX(); // frottements enleves (le perso finissait par freiner tout seul donc tant que y'a pas d'interet je les enleve, j'ai tjr les equations de cote) - if ((commandZ == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = Jeu.getCoordSol().getZ(); - else newZ = ((1-alpha)*Physique.g - commandZ)/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ(); + if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = Jeu.getCoordSol().getZ(); + else newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ(); System.out.println("écart de hauteur: "+Math.abs(this.getCoord().getZ()-newZ)); this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees //on actualise les vitesses - vitesseActuX = commandX; + vitesseActuX = tableCommande.get("CommandX"); - if ((commandZ == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ())) vitesseActuZ = 0; - else vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - commandZ)*delta; + if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ())) vitesseActuZ = 0; + else vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta; - System.out.println("vitesse z: "+vitesseActuZ); + System.out.println("vitesse z: "+vitesseActuZ); + resetCommand(); } @Override public void attaque(){ } - public void evolveCharacter(double commandX,double commandZ,int alpha){ - deplacements(commandX, commandZ, alpha); + public void getGameCommand(){ + Map<String,Boolean> commandeJeu = Jeu.getDirectionJeu(); + if (commandeJeu.get("Right") && commandeJeu.get("Left")){} + else if (commandeJeu.get("Right")) tableCommande.replace("CommandX", vitesseMax); + else if (commandeJeu.get("Left")) tableCommande.replace("CommandX", -vitesseMax); + if (commandeJeu.get("Jump")) { + if (this.getCoord().getZ() < Jeu.getCoordSol().getZ())alpha = 0; + else if (this.getVitesseActuZ() == 0){tableCommande.replace("CommandZ", impulsionSaut);/*A.add(charac.getCoord().getZ());n++;*/} + } + else { + tableCommande.replace("CommandZ", (double)0); + if (this.getCoord().getZ() < Jeu.getCoordSol().getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer + alpha = 0; + } + else{ + alpha = 1; + } + + } + + + } + + void resetCommand(){ + for (String key : tableCommande.keySet()){ + tableCommande.replace(key, (double)0); + } + } + + public void evolveCharacter(){ + deplacements(); } public double getVitesseMax() { @@ -74,11 +114,11 @@ public class Character extends Entity{ } @Override public double getEntityWIDTH() { - return this.entityWIDTH; + return this.characterWIDTH; } @Override public double getEntityHEIGHT() { - return this.entityHEIGHT; + return this.characterHEIGHT; } } diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java index 8ac1a15..928320c 100644 --- a/MAVENProject/src/main/java/entity/Entity.java +++ b/MAVENProject/src/main/java/entity/Entity.java @@ -1,19 +1,22 @@ package entity; import environnement.Coordonnees; +import environnement.HitBox; public abstract class Entity { private Coordonnees coord; final double vitesseMax; + protected HitBox hitBox; private final double entityWIDTH = 10; private final double entityHEIGHT = 10; - public Entity(Coordonnees c,double vitesseMax){ + public Entity(Coordonnees c,double vitesseMax,HitBox hitBox){ this.coord = c; this.vitesseMax = vitesseMax; + this.hitBox = hitBox; } - public void deplacements(double commandX, double commandZ, int alpha){} + public void deplacements(){} public void attaque(){} public Coordonnees getCoord(){ return this.coord; diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index d692f10..42142ea 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -3,8 +3,8 @@ package jeu; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; import entity.Character; import engine.Game; @@ -14,6 +14,9 @@ public class Jeu implements Game{ private static Coordonnees coordSol = new Coordonnees(200,700); //coordonnees du sol (en realite juste Z nous interesse) static Character charac; + private static Map<String,Boolean> directionJeu; + + public Jeu(String source) { BufferedReader helpReader; @@ -32,6 +35,12 @@ public class Jeu implements Game{ } catch (IOException e) { System.out.println("Help not available"); } + + directionJeu = new HashMap<String,Boolean>(); + directionJeu.put("Right", false); + directionJeu.put("Left", false); + directionJeu.put("Jump", false); + } @Override @@ -39,13 +48,16 @@ public class Jeu implements Game{ System.out.println("Execute "+command); System.out.println(charac.getCoord().getX()); System.out.println(charac.getCoord().getZ()); - double comX,comZ; + /*double comX,comZ; int a = 1; comX = 0; - comZ = 0; + comZ = 0;*/ - boolean Right = command.get("Right"); + directionJeu.replace("Right", command.get("Right")); + directionJeu.replace("Left", command.get("Left")); + directionJeu.replace("Jump", command.get("Jump")); + /*Boolean Right = command.get("Right"); boolean Left = command.get("Left"); boolean Jump = command.get("Jump"); @@ -58,7 +70,7 @@ public class Jeu implements Game{ } if (Jump) { if (charac.getCoord().getZ() < coordSol.getZ())a = 0; - else if (charac.getVitesseActuZ() == 0){comZ = charac.getImpulsionSaut();/*A.add(charac.getCoord().getZ());n++;*/} + else if (charac.getVitesseActuZ() == 0){comZ = charac.getImpulsionSaut();/*A.add(charac.getCoord().getZ());n++;/} } else { if (charac.getCoord().getZ() < coordSol.getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer @@ -68,8 +80,8 @@ public class Jeu implements Game{ a = 1; } - } - charac.deplacements(comX, comZ, a); + }*/ + charac.evolveCharacter(); } @Override @@ -85,5 +97,9 @@ public class Jeu implements Game{ public static Coordonnees getCoordSol(){ return coordSol; } + + public static Map<String, Boolean> getDirectionJeu() { + return directionJeu; + } } \ No newline at end of file -- GitLab