From 239ce354c805a0ca11f210bafe460a249da66578 Mon Sep 17 00:00:00 2001 From: bosskkev <kossivikevin29@gmail.com> Date: Sat, 25 Nov 2023 15:02:19 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20maj=20des=20nouvelles?= =?UTF-8?q?=20directions=20de=20la=20balle=20en=20fonction=20de=20la=20rac?= =?UTF-8?q?ket=20en=20une=20seule=20m=C3=A9thode.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/engine/physic/PhysicEngine.java | 15 +++--- src/main/java/pong/PongBall.java | 47 +++-------------- src/main/java/pong/PongObject.java | 5 +- src/main/java/pong/PongRacket.java | 51 ++++++++++++++----- src/test/java/pong/PongBallTest.java | 9 ---- 5 files changed, 54 insertions(+), 73 deletions(-) diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java index 2341227..72ccd46 100644 --- a/src/main/java/engine/physic/PhysicEngine.java +++ b/src/main/java/engine/physic/PhysicEngine.java @@ -17,13 +17,11 @@ public class PhysicEngine implements Engine { restart(); } @Override - public void update(){ + public void update(){ //TODO: we cannot have the mention of "Ball" here so we need to find a way to do it without mentioning "Ball" for (PongObject pongObject: Kernel.gameObjects) { Coordinates2D previousPosition = pongObjectEntityHashMap.get(pongObject).getPosition(); pongObjectEntityHashMap.get(pongObject).updatePosition();// Updating of the associated movable position if(pongObject.getName().equals("Ball")){ - //System.out.println("Ball position: " + pongObjectEntityHashMap.get(pongObject).getPosition().getX() + " ; " + pongObjectEntityHashMap.get(pongObject).getPosition().getY()); - //System.out.println("Ball init position: " + pongObjectEntityHashMap.get(pongObject).getInitPosition()); for (PongObject po2: pongObjectEntityHashMap.keySet() ) { if(!po2.getName().equals("Ball")){ @@ -34,12 +32,16 @@ public class PhysicEngine implements Engine { Kernel.isCollision = true; System.out.println("Collision " + i); pongObjectEntityHashMap.get(pongObject).setPosition(previousPosition); + //TODO: add a method to Entity to increment the speed if(i % 10 == 0){ pongObjectEntityHashMap.get(pongObject).getSpeed().mul(2); } - pongObject.setSpeed(pongObjectEntityHashMap.get(pongObject).getSpeed()); - //pongObjectEntityHashMap.get(pongObject).getSpeed().mul(-1); - pongObject.updateSpeed(po2.doItHitHalf(pongObject.getPosition()), po2.isLeftRacket()); + pongObject.setSpeed(pongObjectEntityHashMap.get(pongObject).getSpeed()); // Updating of the pong object speed with the latest speed of the entity + + //po2 a racket will process the collision with the ball + po2.processCollision(pongObject); + + //Updating the Entity speed with the new speed of the pong object Ball pongObjectEntityHashMap.get(pongObject).setSpeed(pongObject.getSpeed()); pongObjectEntityHashMap.get(pongObject).updatePosition(); @@ -47,7 +49,6 @@ public class PhysicEngine implements Engine { } } } - //checkCollision(); pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position } } diff --git a/src/main/java/pong/PongBall.java b/src/main/java/pong/PongBall.java index fd7bcbe..e0a2639 100644 --- a/src/main/java/pong/PongBall.java +++ b/src/main/java/pong/PongBall.java @@ -65,44 +65,7 @@ public class PongBall implements PongObject { this.speed = speed; } - /** - * Update the speed of the ball when it hits a paddle. - * If the ball hits the upper half of the paddle, the ball will go up - * If the ball hits the lower half of the paddle, the ball will go down - * @param isUpperHalf - */ - @Override - public void updateSpeed(boolean isUpperHalf, boolean isLeftRacket){ - System.out.println("updateSpeed"); - if(!isLeftRacket){ - System.out.println("isLeftRacket"); - if(isUpperHalf){ - if(this.speed.getY() > 0){ - this.speed.setY(this.speed.getY() * -1); - } - }else{ - if (this.speed.getY() < 0){ - this.speed.setY(this.speed.getY() * -1); - } - } - if (this.speed.getX() > 0){ - this.speed.setX(this.speed.getX() * -1); - } - } else { - if(isUpperHalf){ - if(this.speed.getY() > 0){ - this.speed.setY(this.speed.getY() * -1); - } - }else{ - if (this.speed.getY() < 0){ - this.speed.setY(this.speed.getY() * -1); - } - } - if (this.speed.getX() < 0){ - this.speed.setX(this.speed.getX() * -1); - } - } - } + @Override public String getName() { @@ -114,13 +77,15 @@ public class PongBall implements PongObject { return this.initPosition; } + + @Override - public boolean doItHitHalf(Coordinates2D ballPosition) { + public boolean isLeftRacket() { return false; } @Override - public boolean isLeftRacket() { - return false; + public void processCollision(PongObject po2) { + } } diff --git a/src/main/java/pong/PongObject.java b/src/main/java/pong/PongObject.java index 77a7fac..a927fd9 100644 --- a/src/main/java/pong/PongObject.java +++ b/src/main/java/pong/PongObject.java @@ -16,15 +16,12 @@ public interface PongObject { public void setSpeed(Coordinates2D speed); - void updateSpeed(boolean isUpperHalf, boolean isLeftRacket); - public String getName(); Coordinates2D getInitPosition(); - boolean doItHitHalf(Coordinates2D ballPosition); - boolean isLeftRacket(); + void processCollision(PongObject po); } diff --git a/src/main/java/pong/PongRacket.java b/src/main/java/pong/PongRacket.java index 3d94fdb..d8d5329 100644 --- a/src/main/java/pong/PongRacket.java +++ b/src/main/java/pong/PongRacket.java @@ -66,10 +66,6 @@ public class PongRacket implements PongObject { this.speed = speed; } - @Override - public void updateSpeed(boolean isUpperHalf, boolean isLeftRacket) { - - } @Override public String getName() { @@ -81,17 +77,48 @@ public class PongRacket implements PongObject { return initPosition; } - /** - * @param ballPosition - * @return true if the ball hit the upper half of the racket - */ @Override - public boolean doItHitHalf(Coordinates2D ballPosition) { - return ballPosition.getY() < this.position.getY() + this.height / 2; + public boolean isLeftRacket() { + return isLeftRacket; } + + /** + * Update the speed of the ball when it hits a paddle. + * If the ball hits the upper half of the paddle, the ball will go up + * If the ball hits the lower half of the paddle, the ball will go down + * + */ @Override - public boolean isLeftRacket() { - return isLeftRacket; + public void processCollision(PongObject po2) { + boolean isUpperHalf = po2.getPosition().getY() < this.position.getY() + this.height / 2; + if(!isLeftRacket){ + System.out.println("isLeftRacket"); + if(isUpperHalf){ + if(po2.getSpeed().getY() > 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + }else{ + if (po2.getSpeed().getY() < 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + } + if (po2.getSpeed().getX() > 0){ + po2.getSpeed().setX(po2.getSpeed().getX() * -1); + } + } else { + if(isUpperHalf){ + if(po2.getSpeed().getY() > 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + }else{ + if (po2.getSpeed().getY() < 0){ + po2.getSpeed().setY(po2.getSpeed().getY() * -1); + } + } + if (po2.getSpeed().getX() < 0){ + po2.getSpeed().setX(po2.getSpeed().getX() * -1); + } + } } } diff --git a/src/test/java/pong/PongBallTest.java b/src/test/java/pong/PongBallTest.java index 805ca0b..bd204bc 100644 --- a/src/test/java/pong/PongBallTest.java +++ b/src/test/java/pong/PongBallTest.java @@ -13,15 +13,6 @@ class PongBallTest { */ @Test void testUpdateSpeedUpperHalfHit() { - PongBall pongBall = new PongBall("ball", "src/main/resources/ball.png", new Coordinates2D(0, 0), 10, 10); - pongBall.setSpeed(new Coordinates2D(1, 1)); - pongBall.updateSpeed(true, true); - assertEquals(-1, pongBall.getSpeed().getY()); - assertEquals(-1 , pongBall.getSpeed().getX()); - pongBall.setSpeed(new Coordinates2D(1, -1)); - pongBall.updateSpeed(false, true); - assertEquals(-1, pongBall.getSpeed().getX()); - assertEquals(1 , pongBall.getSpeed().getY()); } } \ No newline at end of file -- GitLab