From 0b279ab19bb04d22fabda614ef57b22f606cc6c2 Mon Sep 17 00:00:00 2001
From: bosskkev <kossivikevin29@gmail.com>
Date: Mon, 6 Nov 2023 15:41:40 +0100
Subject: [PATCH] Rajout de l'interface Engine.java

---
 src/main/java/engine/Engine.java   |  5 ++++
 src/main/java/engine/Grid.java     | 24 +++++++++--------
 src/main/java/engine/Kernel.java   | 41 ++++++++++++++++++++----------
 src/main/java/pong/PongApp.java    |  8 +++---
 src/main/java/pong/PongBall.java   |  5 ++++
 src/main/java/pong/PongObject.java |  2 ++
 src/main/java/pong/PongRacket.java |  5 ++++
 7 files changed, 64 insertions(+), 26 deletions(-)
 create mode 100644 src/main/java/engine/Engine.java

diff --git a/src/main/java/engine/Engine.java b/src/main/java/engine/Engine.java
new file mode 100644
index 0000000..049c922
--- /dev/null
+++ b/src/main/java/engine/Engine.java
@@ -0,0 +1,5 @@
+package engine;
+
+public interface Engine {
+    void update();
+}
diff --git a/src/main/java/engine/Grid.java b/src/main/java/engine/Grid.java
index 2f2b510..3569a1c 100644
--- a/src/main/java/engine/Grid.java
+++ b/src/main/java/engine/Grid.java
@@ -1,21 +1,15 @@
 package engine;
 
 import pong.PongObject;
-import sprint2_demo.Hero;
 
 import javax.swing.*;
 import java.awt.*;
 import java.io.IOException;
-import java.util.ArrayList;
 
-public class Grid extends JFrame {
+public class Grid extends JFrame implements Engine  {
 
 
-    public Kernel kernel;
-
     public Grid() throws IOException {
-       this.kernel = new Kernel(this);
-       //components.add()
     }
 
     public void init(String title, int width, int height) throws IOException {
@@ -30,14 +24,24 @@ public class Grid extends JFrame {
         this.setResizable(false);
         this.setVisible(true);
         this.setLayout(this.getLayout());
-        kernel.start();
-        kernel.setKeysListeners((JPanel) getContentPane());
-
         this.revalidate();
     }
     public void draw(ImageComponent ic) throws IOException {
         getContentPane().add(ic);
     }
 
+    @Override
+    public void update(){
+        for (PongObject po : Kernel.gameObjects
+             ) {
+            try {
+                this.draw(new ImageComponent(po.getImage(), po.getPosition(), po.getWidth(), po.getHeight()));
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+
+        }
+    }
+
 
 }
diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index daed469..e8754fe 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -5,20 +5,33 @@ import pong.PongObject;
 
 import javax.swing.*;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Random;
 
 public class Kernel {
 
+    ArrayList<Engine> engines = new ArrayList<Engine>();
     engine.Grid grid;
 
     //public HashMap<PongObject, ImageComponent> pongObjectImageComponentHashMap = new HashMap<>();
-    public HashMap<PongObject, Movable> pongObjectEntityHashMap = new HashMap<>();
+
+    protected static ArrayList<PongObject> gameObjects;
+    protected HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
     Movable movable;
 
-    public Kernel(Grid grid) {
+    public Kernel(String gameName, int width, int height, ArrayList<PongObject> gameObjects) throws IOException {
+
+        this.setGameObject(gameObjects);
         System.out.println("Model created");
-        this.grid = grid;
+
+        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
+
+        engines.add(this.grid);
+
+        this.start();
+        this.setKeysListeners((JPanel) this.grid.getContentPane());
     }
 
     /**
@@ -30,11 +43,16 @@ public class Kernel {
         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);
-            Coordinates2D speed = new Coordinates2D(0, 1);
             pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), speed, new Coordinates2D(0, 0), pongObject.getWidth(), pongObject.getHeight()));
-            grid.draw(new ImageComponent(pongObject.getImage(), pongObject.getPosition(), pongObject.getWidth(), pongObject.getHeight()));
-        }
+
+
+            }
+        grid.update();
     }
 
 
@@ -48,13 +66,8 @@ public class Kernel {
             pongObjectEntityHashMap.get(pongObject).updatePosition(); // Updating of the associated movable position
 
             pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
-
-            try {
-                grid.draw(new ImageComponent(pongObject.getImage(), pongObject.getPosition(), pongObject.getWidth(), pongObject.getHeight()));
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
         }
+        grid.update();
         // Repainting the grid
         grid.repaint();
         grid.revalidate();
@@ -86,5 +99,7 @@ public class Kernel {
         mainPanel.setFocusable(true);
     }
 
-
+    public void setGameObject(ArrayList<PongObject> gameObject) {
+        this.gameObjects = gameObject;
+    }
 }
diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java
index b1a9e40..8d06861 100644
--- a/src/main/java/pong/PongApp.java
+++ b/src/main/java/pong/PongApp.java
@@ -6,6 +6,7 @@ import engine.ImageComponent;
 import engine.Kernel;
 import sprint2_demo.Hero;
 
+import javax.swing.*;
 import java.io.IOException;
 import java.util.ArrayList;
 
@@ -30,11 +31,12 @@ public class PongApp {
         PongBall pongBall = new PongBall("Ball", "src/main/resources/sprint2_demo/asteroid.png", new Coordinates2D(100, 10), 64, 64);
         components.add(pongBall);
 
-        Grid grid = new Grid(); // Will create a new grid and a new kernel
-        grid.init("Pong", width, height); // Will start the kernel and set the keys listeners
+        Kernel kernel = new Kernel("Pong", width, height, components);
+        //kernel.setGameObject(components);
+
         while(true){
             try {
-                grid.kernel.update();
+                kernel.update();
                 Thread.sleep(10);
             } catch (InterruptedException e) {
                 e.printStackTrace();
diff --git a/src/main/java/pong/PongBall.java b/src/main/java/pong/PongBall.java
index c155c61..0bd4008 100644
--- a/src/main/java/pong/PongBall.java
+++ b/src/main/java/pong/PongBall.java
@@ -49,4 +49,9 @@ public class PongBall implements PongObject {
     public void setPosition(Coordinates2D position) {
         this.position = position;
     }
+
+    @Override
+    public String getName() {
+        return name;
+    }
 }
diff --git a/src/main/java/pong/PongObject.java b/src/main/java/pong/PongObject.java
index 98853c5..67be737 100644
--- a/src/main/java/pong/PongObject.java
+++ b/src/main/java/pong/PongObject.java
@@ -11,4 +11,6 @@ public interface PongObject {
     public int getHeight();
     public int getResistance();
     public void setPosition(Coordinates2D position);
+
+    public String getName();
 }
diff --git a/src/main/java/pong/PongRacket.java b/src/main/java/pong/PongRacket.java
index af33d90..9198ef5 100644
--- a/src/main/java/pong/PongRacket.java
+++ b/src/main/java/pong/PongRacket.java
@@ -48,4 +48,9 @@ public class PongRacket implements PongObject {
     public void setPosition(Coordinates2D position) {
         this.position = position;
     }
+
+    @Override
+    public String getName() {
+        return name;
+    }
 }
-- 
GitLab