diff --git a/src/main/java/engine/Engine.java b/src/main/java/engine/Engine.java new file mode 100644 index 0000000000000000000000000000000000000000..049c92211cd7650036233a13921339b183442f73 --- /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 2f2b510360ebd0ca7172d3243e6c658824267987..3569a1c4a388fe5298d3aedbaeb6f2a2cc9465ee 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 daed469593340f20ca766e5c9b11a2bc5d655f06..e8754fe484242d7bbf18f1659fbab54dadc91add 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 b1a9e40a8f6720cd075e2303fbd4cc13e4982c53..8d06861272ea14a82fba40f466f08f39f8470171 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 c155c614989f8770cc83a35b3255cbdc5070c8c6..0bd40083d7dc900c61ecb231baf68f17c186a0f3 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 98853c5b7ebe2909d718c30c29a5e1467aadec13..67be73717942483ed6421f3e305a74151d409eee 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 af33d904b262938e10c4ef7e57b5d6faa4dadd04..9198ef57a01b38cc199cfec0f658b020ed2fed67 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; + } }