diff --git a/src/main/java/engine/Engine.java b/src/main/java/engine/Engine.java index 049c92211cd7650036233a13921339b183442f73..b01463f4d833bddf6c9d68dd59785e99e551291d 100644 --- a/src/main/java/engine/Engine.java +++ b/src/main/java/engine/Engine.java @@ -2,4 +2,5 @@ package engine; public interface Engine { void update(); + void restart(); } diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java index 04268859f7fe5c548e75ce21e38ed07c34608bcf..2c3bc966e9ee2f9c281dff0cac21ec7acb0174e0 100644 --- a/src/main/java/engine/Kernel.java +++ b/src/main/java/engine/Kernel.java @@ -24,8 +24,7 @@ public class Kernel { //public HashMap<PongObject, ImageComponent> pongObjectImageComponentHashMap = new HashMap<>(); public static ArrayList<PongObject> gameObjects; - public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>(); - Movable movable; + public HashMap<PongObject, Entity> pongObjectEntityHashMap; public Kernel(String gameName, int width, int height, ArrayList<PongObject> gameObjects) throws IOException { @@ -51,11 +50,15 @@ public class Kernel { * @throws IOException */ public void start() throws IOException { - Random random = new Random(); // For random speed - - graphicEngine.update(); + } + public void restart() throws IOException { + for (Engine engine: engines + ) { + engine.restart(); + } + //pongObjectEntityHashMap = physicEngine.pongObjectEntityHashMap; } diff --git a/src/main/java/engine/graphic/GraphicEngine.java b/src/main/java/engine/graphic/GraphicEngine.java index ae3fed1457d35a8984e902329feaab0a7b538c68..551b88ca9a3c62475b0db2787e1883023c6a4fab 100644 --- a/src/main/java/engine/graphic/GraphicEngine.java +++ b/src/main/java/engine/graphic/GraphicEngine.java @@ -52,6 +52,13 @@ public class GraphicEngine extends JFrame implements Engine { revalidate(); } + @Override + public void restart() { + getContentPane().removeAll(); + update(); + drawRect(); //TODO: Trouver un moyen de ne pas avoir à redessiner le rectangle à chaque restart et rendre le restart plus générique + } + public void drawRect(){ this.getContentPane().add(new RectangleComponent(100, 100, PongApp.rectWidth, PongApp.rectHeight)); } diff --git a/src/main/java/engine/physic/Movable.java b/src/main/java/engine/physic/Movable.java index 7e841ddd9b5b5095109b615d616eae2b1b2bdcd0..5aef2044a1181df9b7c5e64104e48a7efd36e9bd 100644 --- a/src/main/java/engine/physic/Movable.java +++ b/src/main/java/engine/physic/Movable.java @@ -62,8 +62,13 @@ public class Movable implements Entity { Coordinates2D newPosition = new Coordinates2D(this.position.getX(), this.position.getY()); newPosition.add(this.speed); // Calculating the new position - if (newPosition.getX() <= 100 || newPosition.getX() >= PongApp.rectWidth - this.width + 100) { - this.speed = new Coordinates2D(-speed.getX(), speed.getY()); + if(newPosition.getX() <= 100 && !PongApp.isGoal){ + PongApp.score2 += 1; + PongApp.isGoal = true; + } + if(newPosition.getX() >= PongApp.rectWidth - this.width + 100 && !PongApp.isGoal){ + PongApp.score1 += 1; + PongApp.isGoal = true; } if (newPosition.getY() <= 100 || newPosition.getY() >= PongApp.rectHeight - this.height + 100) { // -20 à cause de la barre verticale de la fenêtre this.speed = new Coordinates2D(speed.getX(), -speed.getY()); diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java index 4d4cec73f722194347e4bbdce8a95283e92c7126..cb371dc4888765ac395986d653acf96ac6fca36b 100644 --- a/src/main/java/engine/physic/PhysicEngine.java +++ b/src/main/java/engine/physic/PhysicEngine.java @@ -58,6 +58,20 @@ public class PhysicEngine implements Engine { } } + @Override + public void restart() { + for (PongObject pongObject: Kernel.gameObjects) { + Coordinates2D speed = new Coordinates2D(0, 0); + if(pongObject.getName().equals("Ball")){ + speed = new Coordinates2D(2, 2); + } + //Coordinates2D speed = new Coordinates2D(random.nextInt(2) - 1, random.nextInt(2) - 1); + pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), speed, new Coordinates2D(0, 0), pongObject.getWidth(), pongObject.getHeight())); + positions.put(pongObject.getPosition(), pongObject); + + } + } + public boolean checkCollision(Entity firstObject, Entity secondObject){ Coordinates2D pos1 = firstObject.getPosition(); Coordinates2D pos2 = secondObject.getPosition(); diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java index c87c3ab0bd30db64f18498befdad416ed974b065..45c22734dcab60cf04d9ac4ef4c658bfa9a35c38 100644 --- a/src/main/java/pong/PongApp.java +++ b/src/main/java/pong/PongApp.java @@ -10,9 +10,15 @@ import java.util.ArrayList; public class PongApp { + public static int numberOfMatchs = 5; + public static int score1 = 0; + public static int score2 = 0; + + public static boolean isGoal = false; + public static ArrayList<PongObject> components = new ArrayList<PongObject>(); - public static int width = 1000; - public static int height = 800; + public static int width = 800; + public static int height = 600; public static int widthDiff = 100; public static int heightDiff = 100; @@ -25,12 +31,12 @@ public class PongApp { public static void main(String[] args) throws IOException { - int racketWidth = 30; + int racketWidth = 20; int racketHeight = 120; int ballWidth = 32; - String son = "src/main/resources/Sound/son.wav"; + String son = "src/main/resources/Sound/minecraft_butdrill.wav"; Sound.playMusic(son); PongRacket leftRacket = new PongRacket("Left racket", "src/main/resources/pong/raquette.png", new Coordinates2D(widthDiff + 5, 100), racketWidth, racketHeight); components.add(leftRacket); @@ -53,6 +59,12 @@ public class PongApp { long lastIterationTime = System.currentTimeMillis(); //Initialize the last iteration time while (true) { + if(isGoal){ + System.out.println(score1 + " : " + score2); + restart(); + kernel.setGameObject(components); + kernel.restart(); + } kernel.update(); // Updating the kernel and the game state @@ -69,5 +81,14 @@ public class PongApp { lastIterationTime = System.currentTimeMillis(); // Update the last iteration time with the current time } + + } + + /** + * Restart the game + */ + public static void restart(){ + isGoal = false; + components.get(2).setPosition(new Coordinates2D(width/2, height/2)); } } diff --git a/src/main/resources/Sound/minecraft_butdrill.wav b/src/main/resources/Sound/minecraft_butdrill.wav new file mode 100644 index 0000000000000000000000000000000000000000..7758d4512a17ec7c8ab5c8efad212ee6628b091f Binary files /dev/null and b/src/main/resources/Sound/minecraft_butdrill.wav differ diff --git a/src/main/resources/Sound/minecraft_drill.mp3 b/src/main/resources/Sound/minecraft_drill.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b44bcde314e3c075faeaee13858e0d0938987116 Binary files /dev/null and b/src/main/resources/Sound/minecraft_drill.mp3 differ