From 00a5c229b58110acafc51adba7f45c0357a4bf85 Mon Sep 17 00:00:00 2001 From: Azurlors <florianrichard2001@gmail.com> Date: Sun, 20 Nov 2022 18:32:22 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20impl=C3=A9mentation=20collision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/entity/Character.java | 15 ++++++- MAVENProject/src/main/java/entity/Entity.java | 9 ++++ .../main/java/environnement/Coordonnees.java | 10 ----- .../src/main/java/environnement/HitBox.java | 41 +++++++++++++++++++ .../src/main/java/environnement/Obstacle.java | 16 -------- .../src/main/java/jeu/Controller.java | 23 ++++------- MAVENProject/src/main/java/jeu/Painter.java | 23 +++++++++-- 7 files changed, 90 insertions(+), 47 deletions(-) create mode 100644 MAVENProject/src/main/java/environnement/HitBox.java diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index 0b0d3cc..3aab51a 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -1,6 +1,7 @@ package entity; import environnement.Coordonnees; +import environnement.HitBox; import environnement.Physique; import jeu.Jeu; @@ -10,12 +11,15 @@ 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; public Character(Coordonnees c,double vitesseMax,double m,double impSaut){ super(c,vitesseMax); this.masse = m; this.impulsionSaut = impSaut; - + this.charaterHitBox = new HitBox(c,entityHEIGHT,entityWIDTH); } @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 @@ -68,6 +72,13 @@ public class Character extends Entity{ public double getImpulsionSaut() { return impulsionSaut; } - + @Override + public double getEntityWIDTH() { + return this.entityWIDTH; + } + @Override + public double getEntityHEIGHT() { + return this.entityHEIGHT; + } } diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java index dd73764..8ac1a15 100644 --- a/MAVENProject/src/main/java/entity/Entity.java +++ b/MAVENProject/src/main/java/entity/Entity.java @@ -6,6 +6,9 @@ public abstract class Entity { private Coordonnees coord; final double vitesseMax; + private final double entityWIDTH = 10; + private final double entityHEIGHT = 10; + public Entity(Coordonnees c,double vitesseMax){ this.coord = c; this.vitesseMax = vitesseMax; @@ -18,5 +21,11 @@ public abstract class Entity { public void setCoord(Coordonnees coord) { this.coord = coord; } + public double getEntityWIDTH() { + return entityWIDTH; + } + public double getEntityHEIGHT() { + return entityHEIGHT; + } } diff --git a/MAVENProject/src/main/java/environnement/Coordonnees.java b/MAVENProject/src/main/java/environnement/Coordonnees.java index 9ae4f99..35f8e8e 100644 --- a/MAVENProject/src/main/java/environnement/Coordonnees.java +++ b/MAVENProject/src/main/java/environnement/Coordonnees.java @@ -23,14 +23,4 @@ public class Coordonnees { public double getZ() { return z; } - - public void evolveX(double var){ - // evolution des coordonnees en x - this.x += var; - } - - public void evolveZ(double var){ - // evolution des coordonnees en z - this.z += var; - } } diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java new file mode 100644 index 0000000..dba83a7 --- /dev/null +++ b/MAVENProject/src/main/java/environnement/HitBox.java @@ -0,0 +1,41 @@ +package environnement; + +import java.util.HashMap; + +public class HitBox { + //private final Coordonnees centre; + private HashMap<String, Coordonnees> extremites = new HashMap<String,Coordonnees>(); + private static double defaultUnit = 10; + + public HitBox(Coordonnees c){ + extremites.put("HautDroite",new Coordonnees(c.getX()+defaultUnit/2,c.getZ()-defaultUnit/2)); + extremites.put("BasDroite",new Coordonnees(c.getX()+defaultUnit/2,c.getZ()+defaultUnit/2)); + extremites.put("HautGauche",new Coordonnees(c.getX()-defaultUnit/2,c.getZ()-defaultUnit/2)); + extremites.put("BasGauche",new Coordonnees(c.getX()-defaultUnit/2,c.getZ()+defaultUnit/2)); + } + + public HitBox(Coordonnees c , double Height , double Width){ + extremites.put("HautDroite",new Coordonnees(c.getX()+Width/2,c.getZ()-Height/2)); + extremites.put("BasDroite",new Coordonnees(c.getX()+Width/2,c.getZ()+Height/2)); + extremites.put("HautGauche",new Coordonnees(c.getX()-Width/2,c.getZ()-Height/2)); + extremites.put("BasGauche",new Coordonnees(c.getX()-Width/2,c.getZ()+Height/2)); + } + + public static int getDefaultUnit() { + return (int)defaultUnit; + } + + public static Boolean Collision(HitBox A, HitBox B){ // lignes sautées pour raison de lisibilité + return A.extremites.get("HautDroite").getX() >= B.extremites.get("BasGauche").getX() + && A.extremites.get("HautDroite").getZ() <= B.extremites.get("BasGauche").getZ() + || + A.extremites.get("BasDroite").getX() >= B.extremites.get("HautGauche").getX() + && A.extremites.get("BasDroite").getZ() >= B.extremites.get("HautGauche").getZ() + || + A.extremites.get("HautGauche").getX() <= B.extremites.get("BasDroite").getX() + && A.extremites.get("HautGauche").getZ() <= B.extremites.get("BasDroite").getZ() + || + A.extremites.get("BasGauche").getX() <= B.extremites.get("HautDroite").getX() + && A.extremites.get("BasGauche").getZ() >= B.extremites.get("HautDroite").getZ(); + } +} diff --git a/MAVENProject/src/main/java/environnement/Obstacle.java b/MAVENProject/src/main/java/environnement/Obstacle.java index 570904d..ddea563 100644 --- a/MAVENProject/src/main/java/environnement/Obstacle.java +++ b/MAVENProject/src/main/java/environnement/Obstacle.java @@ -1,22 +1,6 @@ package environnement; -import java.util.HashMap; public class Obstacle { - //private final Coordonnees centre; - private HashMap<String, Coordonnees> extremites; - private static int defaultUnit = 10; - - public Obstacle(Coordonnees c){ - HashMap<String, Coordonnees> extremites = new HashMap<String,Coordonnees>(); - extremites.put("DH",new Coordonnees(c.getX()+(double)defaultUnit/2,c.getZ()-(double)defaultUnit/2)); - extremites.put("DB",new Coordonnees(c.getX()+(double)defaultUnit/2,c.getZ()+(double)defaultUnit/2)); - extremites.put("GH",new Coordonnees(c.getX()-(double)defaultUnit/2,c.getZ()-(double)defaultUnit/2)); - extremites.put("GB",new Coordonnees(c.getX()-(double)defaultUnit/2,c.getZ()+(double)defaultUnit/2)); - } - - public int getDefaultUnit() { - return defaultUnit; - } } diff --git a/MAVENProject/src/main/java/jeu/Controller.java b/MAVENProject/src/main/java/jeu/Controller.java index 0e7a39e..0f16ab1 100644 --- a/MAVENProject/src/main/java/jeu/Controller.java +++ b/MAVENProject/src/main/java/jeu/Controller.java @@ -3,12 +3,12 @@ package jeu; import engine.GameController; import java.awt.event.KeyEvent; -import java.util.ArrayList; import java.util.HashMap; public class Controller implements GameController{ private boolean isRightPressed, isLeftPressed, isSpacePressed; + private HashMap<String,Boolean> cmd = new HashMap<String,Boolean>(); /* * commande en cours */ @@ -25,7 +25,6 @@ public class Controller implements GameController{ */ @Override public HashMap<String,Boolean> getCommand() { - HashMap<String,Boolean> cmd = new HashMap<String,Boolean>(); cmd.put("Right",isRightPressed); cmd.put("Left",isLeftPressed); cmd.put("Jump",isSpacePressed); @@ -37,23 +36,17 @@ public class Controller implements GameController{ switch (e.getKeyCode()) { // si on appuie sur une touche ci dessous le boolean devient vraie. - case KeyEvent.VK_RIGHT: isRightPressed = true; break; - case KeyEvent.VK_LEFT: isLeftPressed = true; break; - case KeyEvent.VK_SPACE: isSpacePressed = true; break; + case KeyEvent.VK_RIGHT -> isRightPressed = true; + case KeyEvent.VK_LEFT -> isLeftPressed = true; + case KeyEvent.VK_SPACE -> isSpacePressed = true; } } @Override public void keyReleased(KeyEvent e) { - switch(e.getKeyCode()) { - case KeyEvent.VK_RIGHT: - isRightPressed = false; - break; - case KeyEvent.VK_LEFT: - isLeftPressed = false; - break; - case KeyEvent.VK_SPACE: - isSpacePressed = false; - break; + switch (e.getKeyCode()) { + case KeyEvent.VK_RIGHT -> isRightPressed = false; + case KeyEvent.VK_LEFT -> isLeftPressed = false; + case KeyEvent.VK_SPACE -> isSpacePressed = false; } } @Override diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 0a63a12..0c48be8 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -1,10 +1,13 @@ package jeu; import engine.GamePainter; +import entity.Character; import environnement.Obstacle; import java.awt.*; import java.awt.image.BufferedImage; + +import static environnement.HitBox.getDefaultUnit; import static jeu.Jeu.charac; import static jeu.Jeu.getCoordSol; @@ -21,8 +24,10 @@ public class Painter implements GamePainter{ public void draw(BufferedImage im) { Graphics2D crayon = (Graphics2D) im.getGraphics(); crayon.setColor(Color.blue); - drawCharacter(crayon); + drawCharacter(crayon, charac); drawSol(crayon); + crayon.setColor(Color.red); + //drawQuadrillage(crayon); } @Override @@ -35,10 +40,10 @@ public class Painter implements GamePainter{ return HEIGHT; } - private void drawCharacter(Graphics2D crayon){ + private void drawCharacter(Graphics2D crayon, Character charac){ int x = (int) charac.getCoord().getX(); int y = (int) charac.getCoord().getZ(); - crayon.fillRect(x-15,y-30,30,60); + crayon.fillRect(x-15,y-30, (int) charac.getEntityWIDTH(),(int) charac.getEntityHEIGHT()); } private void drawObstacle(Graphics2D crayon, Obstacle obstacle){ @@ -46,6 +51,16 @@ public class Painter implements GamePainter{ } private void drawSol(Graphics2D crayon){ - crayon.drawLine(0,(int) getCoordSol().getZ(),getWidth(),(int) getCoordSol().getZ()); + crayon.drawLine(0,(int) getCoordSol().getZ(),WIDTH,(int) getCoordSol().getZ()); + } + + private void drawQuadrillage(Graphics2D crayon){ //pour le test de la classe obstacle + int taille = getDefaultUnit(); + for (int i=1;i<(double) HEIGHT/taille;i++) { + crayon.drawLine(0, i * taille, WIDTH, i * taille); + } + for (int j =0;j<(double) WIDTH/taille;j++) { + crayon.drawLine(j * taille, 0, j * taille,HEIGHT ); + } } } -- GitLab