From d720e16de01e13f898ab67dce4d2809b01454eb8 Mon Sep 17 00:00:00 2001 From: Janet-Doe Date: Mon, 24 Mar 2025 11:17:32 +0100 Subject: [PATCH] Implementation of 2D mode --- app/build.gradle | 2 +- app/src/main/java/chess/App.java | 4 +- app/src/main/java/chess/model/Model2D.java | 15 +++++ .../main/java/chess/view/render2D/Window.java | 66 +++++++++++++++++++ .../{render => view/render3D}/Camera.java | 2 +- .../render3D}/ElementBuffer.java | 2 +- .../{render => view/render3D}/Renderer.java | 4 +- .../render3D}/VertexArray.java | 2 +- .../render3D}/VertexAttribPointer.java | 2 +- .../render3D}/VertexBuffer.java | 3 +- .../{render => view/render3D}/Window.java | 5 +- .../render3D}/shader/BoardShader.java | 2 +- .../render3D}/shader/ShaderProgram.java | 2 +- 13 files changed, 94 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/chess/model/Model2D.java create mode 100644 app/src/main/java/chess/view/render2D/Window.java rename app/src/main/java/chess/{render => view/render3D}/Camera.java (98%) rename app/src/main/java/chess/{render => view/render3D}/ElementBuffer.java (96%) rename app/src/main/java/chess/{render => view/render3D}/Renderer.java (98%) rename app/src/main/java/chess/{render => view/render3D}/VertexArray.java (96%) rename app/src/main/java/chess/{render => view/render3D}/VertexAttribPointer.java (88%) rename app/src/main/java/chess/{render => view/render3D}/VertexBuffer.java (96%) rename app/src/main/java/chess/{render => view/render3D}/Window.java (97%) rename app/src/main/java/chess/{render => view/render3D}/shader/BoardShader.java (96%) rename app/src/main/java/chess/{render => view/render3D}/shader/ShaderProgram.java (98%) diff --git a/app/build.gradle b/app/build.gradle index 7641c68..d30c4c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,7 +17,7 @@ repositories { } def lwjgl_version = "3.3.6" -def lwjgl_natives = "natives-linux" +def lwjgl_natives = "natives-windows" dependencies { // Use JUnit Jupiter for testing. diff --git a/app/src/main/java/chess/App.java b/app/src/main/java/chess/App.java index 716a717..da2ef71 100644 --- a/app/src/main/java/chess/App.java +++ b/app/src/main/java/chess/App.java @@ -3,7 +3,7 @@ */ package chess; -import chess.render.*; +import chess.view.render2D.Window; public class App { public String getGreeting() { @@ -11,6 +11,6 @@ public class App { } public static void main(String[] args) { - new Window().run(); + Window.main(args); } } diff --git a/app/src/main/java/chess/model/Model2D.java b/app/src/main/java/chess/model/Model2D.java new file mode 100644 index 0000000..38a5e55 --- /dev/null +++ b/app/src/main/java/chess/model/Model2D.java @@ -0,0 +1,15 @@ +package chess.model; + +import java.util.Observable; + +public class Model2D extends Observable { + public int x; + public int y; + + public void set(int i, int j){ + this.x = i; + this.y = j; + setChanged(); + notifyObservers(); + } +} diff --git a/app/src/main/java/chess/view/render2D/Window.java b/app/src/main/java/chess/view/render2D/Window.java new file mode 100644 index 0000000..b3796f7 --- /dev/null +++ b/app/src/main/java/chess/view/render2D/Window.java @@ -0,0 +1,66 @@ +package chess.view.render2D; + +import chess.model.Model2D; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Observable; +import java.util.Observer; + +public class Window extends JFrame implements Observer { + private final Model2D model; + private final JLabel[][] tab = new JLabel[8][8]; + + public Window(Model2D model) { + System.out.println("New window has been created."); + this.model = model; + } + + public static void main(String[] args){ + new Window(new Model2D()).build(); + } + + /** + * Create a playing grid with alternating black & white grids + */ + private void build(){ + JPanel jp = new JPanel(new GridLayout(8,8)); + setContentPane(jp); + setTitle("Let's play chess!"); + for (int y = 0; y < 8; y++){ + for (int x = 0; x < 8; x++){ + JLabel jl = new JLabel(); + jl.setOpaque(true); + if (((y+x)%2)!=0) { + jl.setBackground(Color.BLACK); + } + final int yy = y; + final int xx = x; + + jl.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + System.out.println("(" + xx + ";" + yy + ")"); + model.set(xx, yy); + update(); + } + }); + this.tab[x][y]=jl; + jp.add(jl); + } + } + setSize(800,800); + setVisible(true); + } + + public void update() { + tab[model.x][model.y].setBackground(Color.RED); + } + + @Override + public void update(Observable o, Object arg) { + System.out.println("ok"); + update(); + } +} diff --git a/app/src/main/java/chess/render/Camera.java b/app/src/main/java/chess/view/render3D/Camera.java similarity index 98% rename from app/src/main/java/chess/render/Camera.java rename to app/src/main/java/chess/view/render3D/Camera.java index fe72244..2be37ff 100644 --- a/app/src/main/java/chess/render/Camera.java +++ b/app/src/main/java/chess/view/render3D/Camera.java @@ -1,4 +1,4 @@ -package chess.render; +package chess.view.render3D; import org.joml.Matrix4f; import org.joml.Vector3f; diff --git a/app/src/main/java/chess/render/ElementBuffer.java b/app/src/main/java/chess/view/render3D/ElementBuffer.java similarity index 96% rename from app/src/main/java/chess/render/ElementBuffer.java rename to app/src/main/java/chess/view/render3D/ElementBuffer.java index c7a7bd0..02c0e78 100644 --- a/app/src/main/java/chess/render/ElementBuffer.java +++ b/app/src/main/java/chess/view/render3D/ElementBuffer.java @@ -1,4 +1,4 @@ -package chess.render; +package chess.view.render3D; import org.lwjgl.opengl.GL30; diff --git a/app/src/main/java/chess/render/Renderer.java b/app/src/main/java/chess/view/render3D/Renderer.java similarity index 98% rename from app/src/main/java/chess/render/Renderer.java rename to app/src/main/java/chess/view/render3D/Renderer.java index 4e579af..4eadd12 100644 --- a/app/src/main/java/chess/render/Renderer.java +++ b/app/src/main/java/chess/view/render3D/Renderer.java @@ -1,10 +1,10 @@ -package chess.render; +package chess.view.render3D; import org.joml.Vector3f; import org.lwjgl.opengl.*; import static org.lwjgl.opengl.GL30.*; -import chess.render.shader.BoardShader; +import chess.view.render3D.shader.BoardShader; public class Renderer { private BoardShader shader; diff --git a/app/src/main/java/chess/render/VertexArray.java b/app/src/main/java/chess/view/render3D/VertexArray.java similarity index 96% rename from app/src/main/java/chess/render/VertexArray.java rename to app/src/main/java/chess/view/render3D/VertexArray.java index 8f966fa..6f0d6f0 100644 --- a/app/src/main/java/chess/render/VertexArray.java +++ b/app/src/main/java/chess/view/render3D/VertexArray.java @@ -1,4 +1,4 @@ -package chess.render; +package chess.view.render3D; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/chess/render/VertexAttribPointer.java b/app/src/main/java/chess/view/render3D/VertexAttribPointer.java similarity index 88% rename from app/src/main/java/chess/render/VertexAttribPointer.java rename to app/src/main/java/chess/view/render3D/VertexAttribPointer.java index cb01074..96f6383 100644 --- a/app/src/main/java/chess/render/VertexAttribPointer.java +++ b/app/src/main/java/chess/view/render3D/VertexAttribPointer.java @@ -1,4 +1,4 @@ -package chess.render; +package chess.view.render3D; public class VertexAttribPointer { public int index; diff --git a/app/src/main/java/chess/render/VertexBuffer.java b/app/src/main/java/chess/view/render3D/VertexBuffer.java similarity index 96% rename from app/src/main/java/chess/render/VertexBuffer.java rename to app/src/main/java/chess/view/render3D/VertexBuffer.java index 5dd757f..e855d58 100644 --- a/app/src/main/java/chess/render/VertexBuffer.java +++ b/app/src/main/java/chess/view/render3D/VertexBuffer.java @@ -1,8 +1,7 @@ -package chess.render; +package chess.view.render3D; import static org.lwjgl.opengl.GL11.GL_FLOAT; -import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/chess/render/Window.java b/app/src/main/java/chess/view/render3D/Window.java similarity index 97% rename from app/src/main/java/chess/render/Window.java rename to app/src/main/java/chess/view/render3D/Window.java index d3502b1..1b374b6 100644 --- a/app/src/main/java/chess/render/Window.java +++ b/app/src/main/java/chess/view/render3D/Window.java @@ -1,13 +1,10 @@ -package chess.render; +package chess.view.render3D; import org.lwjgl.*; import org.lwjgl.glfw.*; import org.lwjgl.opengl.*; import org.lwjgl.system.*; -import chess.render.Camera; -import chess.render.Renderer; - import java.nio.*; import static org.lwjgl.glfw.Callbacks.*; diff --git a/app/src/main/java/chess/render/shader/BoardShader.java b/app/src/main/java/chess/view/render3D/shader/BoardShader.java similarity index 96% rename from app/src/main/java/chess/render/shader/BoardShader.java rename to app/src/main/java/chess/view/render3D/shader/BoardShader.java index 15c6c10..64672fa 100644 --- a/app/src/main/java/chess/render/shader/BoardShader.java +++ b/app/src/main/java/chess/view/render3D/shader/BoardShader.java @@ -1,4 +1,4 @@ -package chess.render.shader; +package chess.view.render3D.shader; import org.joml.Matrix4f; diff --git a/app/src/main/java/chess/render/shader/ShaderProgram.java b/app/src/main/java/chess/view/render3D/shader/ShaderProgram.java similarity index 98% rename from app/src/main/java/chess/render/shader/ShaderProgram.java rename to app/src/main/java/chess/view/render3D/shader/ShaderProgram.java index e2d8430..19faec3 100644 --- a/app/src/main/java/chess/render/shader/ShaderProgram.java +++ b/app/src/main/java/chess/view/render3D/shader/ShaderProgram.java @@ -1,4 +1,4 @@ -package chess.render.shader; +package chess.view.render3D.shader; import java.nio.FloatBuffer; import java.nio.IntBuffer;