From ee6f9170b4081bd0500dd4f1eb475971fb215ae3 Mon Sep 17 00:00:00 2001
From: bosskkev <kossivikevin29@gmail.com>
Date: Mon, 6 Nov 2023 16:18:50 +0100
Subject: [PATCH] =?UTF-8?q?Rajout=20interface=20Engine=20et=20son=20impl?=
 =?UTF-8?q?=C3=A9mentation=20dans=20les=20diff=C3=A9rents=20moteurs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/java/engine/Kernel.java              | 44 +++++++++----------
 .../{Grid.java => graphic/GraphicEngine.java} |  8 ++--
 .../engine/{ => graphic}/ImageComponent.java  |  4 +-
 .../engine/{ => physic}/Coordinates2D.java    |  2 +-
 src/main/java/engine/{ => physic}/Entity.java |  4 +-
 .../java/engine/{ => physic}/Movable.java     |  4 +-
 .../java/engine/{ => physic}/NotMovable.java  |  5 ++-
 src/main/java/engine/physic/PhysicEngine.java | 31 +++++++++++++
 src/main/java/pong/PongApp.java               |  6 +--
 src/main/java/pong/PongBall.java              |  2 +-
 src/main/java/pong/PongObject.java            |  2 +-
 src/main/java/pong/PongRacket.java            |  2 +-
 src/main/java/sprint2_demo/Grid.java          |  1 +
 src/main/java/sprint2_demo/Hero.java          |  2 +-
 src/test/java/engine/PongObjectTest.java      |  2 +
 15 files changed, 78 insertions(+), 41 deletions(-)
 rename src/main/java/engine/{Grid.java => graphic/GraphicEngine.java} (86%)
 rename src/main/java/engine/{ => graphic}/ImageComponent.java (94%)
 rename src/main/java/engine/{ => physic}/Coordinates2D.java (97%)
 rename src/main/java/engine/{ => physic}/Entity.java (96%)
 rename src/main/java/engine/{ => physic}/Movable.java (94%)
 rename src/main/java/engine/{ => physic}/NotMovable.java (92%)
 create mode 100644 src/main/java/engine/physic/PhysicEngine.java

diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index 3782c35..7a13747 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -1,5 +1,10 @@
 package engine;
 
+import engine.graphic.GraphicEngine;
+import engine.physic.Coordinates2D;
+import engine.physic.Entity;
+import engine.physic.Movable;
+import engine.physic.PhysicEngine;
 import pong.PongApp;
 import pong.PongObject;
 
@@ -12,12 +17,12 @@ import java.util.Random;
 public class Kernel {
 
     ArrayList<Engine> engines = new ArrayList<Engine>();
-    engine.Grid grid;
+    GraphicEngine graphicEngine;
 
     //public HashMap<PongObject, ImageComponent> pongObjectImageComponentHashMap = new HashMap<>();
 
-    protected static ArrayList<PongObject> gameObjects;
-    protected HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
+    public static ArrayList<PongObject> gameObjects;
+    public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
     Movable movable;
 
     public Kernel(String gameName, int width, int height, ArrayList<PongObject> gameObjects) throws IOException {
@@ -25,13 +30,15 @@ public class Kernel {
         this.setGameObject(gameObjects);
         System.out.println("Model created");
 
-        this.grid = new Grid(); // Will create a new grid and a new kernel
-        grid.init(gameName, width, height); // Will start the kernel and set the keys listeners
+        this.graphicEngine = new GraphicEngine(); // Will create a new grid and a new kernel
+        graphicEngine.init(gameName, width, height); // Will start the kernel and set the keys listeners
 
-        engines.add(this.grid);//
+        engines.add(this.graphicEngine);//
+
+        engines.add(new PhysicEngine());
 
         this.start();
-        this.setKeysListeners((JPanel) this.grid.getContentPane());
+        this.setKeysListeners((JPanel) this.graphicEngine.getContentPane());
     }
 
     /**
@@ -42,17 +49,9 @@ public class Kernel {
     public void start() throws IOException {
         Random random = new Random(); // For random speed
 
-        for (PongObject pongObject: PongApp.components) {
-            Coordinates2D speed = new Coordinates2D(0, 0);
-            if(pongObject.getName().equals("Ball")){
-                speed = new Coordinates2D(1, 1);
-            }
-            //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()));
 
+        graphicEngine.update();
 
-            }
-        grid.update();
     }
 
 
@@ -62,15 +61,14 @@ public class Kernel {
     public void update() {
         System.out.println("One step");
         // Updating all objects positions
-        for (PongObject pongObject: PongApp.components) {
-            pongObjectEntityHashMap.get(pongObject).updatePosition(); // Updating of the associated movable position
 
-            pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
+        for (Engine engine: engines
+             ) {
+            engine.update();
         }
-        grid.update();
         // Repainting the grid
-        grid.repaint();
-        grid.revalidate();
+        graphicEngine.repaint();
+        graphicEngine.revalidate();
     }
 
     /**
@@ -100,6 +98,6 @@ public class Kernel {
     }
 
     public void setGameObject(ArrayList<PongObject> gameObject) {
-        this.gameObjects = gameObject;
+        gameObjects = gameObject;
     }
 }
diff --git a/src/main/java/engine/Grid.java b/src/main/java/engine/graphic/GraphicEngine.java
similarity index 86%
rename from src/main/java/engine/Grid.java
rename to src/main/java/engine/graphic/GraphicEngine.java
index 7b18698..c284e0a 100644
--- a/src/main/java/engine/Grid.java
+++ b/src/main/java/engine/graphic/GraphicEngine.java
@@ -1,14 +1,16 @@
-package engine;
+package engine.graphic;
 
+import engine.Engine;
+import engine.Kernel;
 import pong.PongObject;
 
 import javax.swing.*;
 import java.awt.*;
 import java.io.IOException;
 
-public class Grid extends JFrame implements Engine  {
+public class GraphicEngine extends JFrame implements Engine {
 
-    public Grid() throws IOException {
+    public GraphicEngine() throws IOException {
     }
 
     public void init(String windowTitle, int width, int height) throws IOException {
diff --git a/src/main/java/engine/ImageComponent.java b/src/main/java/engine/graphic/ImageComponent.java
similarity index 94%
rename from src/main/java/engine/ImageComponent.java
rename to src/main/java/engine/graphic/ImageComponent.java
index 436f46b..fd98476 100644
--- a/src/main/java/engine/ImageComponent.java
+++ b/src/main/java/engine/graphic/ImageComponent.java
@@ -1,4 +1,6 @@
-package engine;
+package engine.graphic;
+
+import engine.physic.Coordinates2D;
 
 import javax.swing.*;
 import java.awt.*;
diff --git a/src/main/java/engine/Coordinates2D.java b/src/main/java/engine/physic/Coordinates2D.java
similarity index 97%
rename from src/main/java/engine/Coordinates2D.java
rename to src/main/java/engine/physic/Coordinates2D.java
index 7cb1119..d9870e7 100644
--- a/src/main/java/engine/Coordinates2D.java
+++ b/src/main/java/engine/physic/Coordinates2D.java
@@ -1,4 +1,4 @@
-package engine;
+package engine.physic;
 
 public class Coordinates2D {
     private int x;
diff --git a/src/main/java/engine/Entity.java b/src/main/java/engine/physic/Entity.java
similarity index 96%
rename from src/main/java/engine/Entity.java
rename to src/main/java/engine/physic/Entity.java
index c9a2460..578ef15 100644
--- a/src/main/java/engine/Entity.java
+++ b/src/main/java/engine/physic/Entity.java
@@ -1,4 +1,6 @@
-package engine;
+package engine.physic;
+
+import engine.physic.Coordinates2D;
 
 /**
  * Interface for all entities in the game
diff --git a/src/main/java/engine/Movable.java b/src/main/java/engine/physic/Movable.java
similarity index 94%
rename from src/main/java/engine/Movable.java
rename to src/main/java/engine/physic/Movable.java
index d085131..beb4b7e 100644
--- a/src/main/java/engine/Movable.java
+++ b/src/main/java/engine/physic/Movable.java
@@ -1,4 +1,4 @@
-package engine;
+package engine.physic;
 
 import pong.PongApp;
 
@@ -13,7 +13,7 @@ public class Movable implements Entity {
     private Coordinates2D acceleration;
 
 
-    Movable(int weight, Coordinates2D position, Coordinates2D speed, Coordinates2D acceleration, int width, int height) {
+    public Movable(int weight, Coordinates2D position, Coordinates2D speed, Coordinates2D acceleration, int width, int height) {
         this.weight = weight;
         this.speed = speed;
         this.position = position;
diff --git a/src/main/java/engine/NotMovable.java b/src/main/java/engine/physic/NotMovable.java
similarity index 92%
rename from src/main/java/engine/NotMovable.java
rename to src/main/java/engine/physic/NotMovable.java
index 55d882e..f6ecdb1 100644
--- a/src/main/java/engine/NotMovable.java
+++ b/src/main/java/engine/physic/NotMovable.java
@@ -1,4 +1,7 @@
-package engine;
+package engine.physic;
+
+import engine.physic.Coordinates2D;
+import engine.physic.Entity;
 
 /**
  * Class for all obstacles in the game.
diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java
new file mode 100644
index 0000000..0261f5a
--- /dev/null
+++ b/src/main/java/engine/physic/PhysicEngine.java
@@ -0,0 +1,31 @@
+package engine.physic;
+
+import engine.Engine;
+import engine.Kernel;
+import pong.PongApp;
+import pong.PongObject;
+
+import java.util.HashMap;
+
+public class PhysicEngine implements Engine {
+    public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
+    public PhysicEngine(){
+        for (PongObject pongObject: Kernel.gameObjects) {
+            Coordinates2D speed = new Coordinates2D(0, 0);
+            if(pongObject.getName().equals("Ball")){
+                speed = new Coordinates2D(1, 1);
+            }
+            //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()));
+
+
+        }
+    }
+    @Override
+    public void update(){
+        for (PongObject pongObject: Kernel.gameObjects) {
+            pongObjectEntityHashMap.get(pongObject).updatePosition(); // Updating of the associated movable position
+            pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
+        }
+    }
+}
diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java
index 8d06861..5040f2d 100644
--- a/src/main/java/pong/PongApp.java
+++ b/src/main/java/pong/PongApp.java
@@ -1,12 +1,8 @@
 package pong;
 
-import engine.Coordinates2D;
-import engine.Grid;
-import engine.ImageComponent;
+import engine.physic.Coordinates2D;
 import engine.Kernel;
-import sprint2_demo.Hero;
 
-import javax.swing.*;
 import java.io.IOException;
 import java.util.ArrayList;
 
diff --git a/src/main/java/pong/PongBall.java b/src/main/java/pong/PongBall.java
index 0bd4008..2f8daf4 100644
--- a/src/main/java/pong/PongBall.java
+++ b/src/main/java/pong/PongBall.java
@@ -1,6 +1,6 @@
 package pong;
 
-import engine.Coordinates2D;
+import engine.physic.Coordinates2D;
 
 import java.awt.*;
 
diff --git a/src/main/java/pong/PongObject.java b/src/main/java/pong/PongObject.java
index 67be737..e12fdbb 100644
--- a/src/main/java/pong/PongObject.java
+++ b/src/main/java/pong/PongObject.java
@@ -1,6 +1,6 @@
 package pong;
 
-import engine.Coordinates2D;
+import engine.physic.Coordinates2D;
 
 import java.awt.*;
 
diff --git a/src/main/java/pong/PongRacket.java b/src/main/java/pong/PongRacket.java
index 9198ef5..a9b69bb 100644
--- a/src/main/java/pong/PongRacket.java
+++ b/src/main/java/pong/PongRacket.java
@@ -1,6 +1,6 @@
 package pong;
 
-import engine.Coordinates2D;
+import engine.physic.Coordinates2D;
 
 import java.awt.*;
 
diff --git a/src/main/java/sprint2_demo/Grid.java b/src/main/java/sprint2_demo/Grid.java
index c96e56a..e92f49b 100644
--- a/src/main/java/sprint2_demo/Grid.java
+++ b/src/main/java/sprint2_demo/Grid.java
@@ -1,6 +1,7 @@
 package sprint2_demo;
 
 import engine.*;
+import engine.physic.Coordinates2D;
 
 import javax.swing.*;
 import java.awt.*;
diff --git a/src/main/java/sprint2_demo/Hero.java b/src/main/java/sprint2_demo/Hero.java
index f7a9d7b..24cf15e 100644
--- a/src/main/java/sprint2_demo/Hero.java
+++ b/src/main/java/sprint2_demo/Hero.java
@@ -1,6 +1,6 @@
 package sprint2_demo;
 
-import engine.Coordinates2D;
+import engine.physic.Coordinates2D;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
diff --git a/src/test/java/engine/PongObjectTest.java b/src/test/java/engine/PongObjectTest.java
index fbc681d..4f41b0e 100644
--- a/src/test/java/engine/PongObjectTest.java
+++ b/src/test/java/engine/PongObjectTest.java
@@ -1,5 +1,7 @@
 package engine;
 
+import engine.physic.Coordinates2D;
+import engine.physic.Movable;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
-- 
GitLab