From c6aae89834f9a1867717f092e9fb3ae39669a2e8 Mon Sep 17 00:00:00 2001 From: Dorian HAMDANI Date: Mon, 7 Apr 2025 10:13:49 +0200 Subject: [PATCH] Add labels --- .cache/save.dat | 16 +++++++++ .cache/test.dat | 16 +++++++++ src/RenderBoard.java | 9 ++--- src/SwingRenderer.java | 78 +++++++++++++++++++++++++++++++++++------- 4 files changed, 102 insertions(+), 17 deletions(-) create mode 100644 .cache/save.dat create mode 100644 .cache/test.dat diff --git a/.cache/save.dat b/.cache/save.dat new file mode 100644 index 0000000..4ef2ab0 --- /dev/null +++ b/.cache/save.dat @@ -0,0 +1,16 @@ +15 15 BLACK 2 51 52 +............... +............... +............... +............... +........X...... +.......OX...... +......XXOO..... +.......XOXO.... +.......XX..O... +.......O....O.. +.............X. +............... +............... +............... +............... diff --git a/.cache/test.dat b/.cache/test.dat new file mode 100644 index 0000000..41203a8 --- /dev/null +++ b/.cache/test.dat @@ -0,0 +1,16 @@ +15 15 BLACK 2 51 52 +............... +............... +............... +............... +........X...... +.......OX...... +......XXOO..... +.......XOXO.... +.......XX..O... +.......O....O.. +.............X. +............... +............... +............... +............... \ No newline at end of file diff --git a/src/RenderBoard.java b/src/RenderBoard.java index f184c3b..104773f 100644 --- a/src/RenderBoard.java +++ b/src/RenderBoard.java @@ -9,7 +9,6 @@ class RenderBoard { public int renderHeight; private int cellSize; private int borderThickness; - // private int[][] boardState; public RenderBoard(int width, int height, int renderWidth, int renderHeight) { this.boardWidth = width; @@ -74,7 +73,9 @@ class RenderBoard { this.cellSize - 2 * this.borderThickness ); // Draw the cell - this.drawToken(g, x, y, Color.BLUE); + if (i == boardWidth / 2 && j == boardHeight / 2) { + this.drawToken(g, cx, cy, Color.BLUE); + } cx += this.cellSize; } cy += this.cellSize; @@ -85,8 +86,8 @@ class RenderBoard { // Draw the token at the specified position g.setColor(color); g.fillRect( - x + 2 * this.borderThickness, - y + 2 * this.borderThickness, + x + borderThickness, + y + borderThickness, cellSize - 2 * borderThickness, cellSize - 2 * borderThickness ); diff --git a/src/SwingRenderer.java b/src/SwingRenderer.java index 444981d..54f7940 100644 --- a/src/SwingRenderer.java +++ b/src/SwingRenderer.java @@ -4,8 +4,11 @@ import javax.swing.BorderFactory; import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.Graphics; +import java.awt.event.MouseListener; +import java.awt.event.MouseEvent; public class SwingRenderer extends GomokuRenderer { @@ -22,17 +25,38 @@ public class SwingRenderer extends GomokuRenderer { @Override public void init(GomokuGame game) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - mainFrame = new JFrame("Gomoku! - Projet L2"); - mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - mainFrame.setSize(960, 960); - canvas = new RenderCanvas(); - mainFrame.add(canvas); - mainFrame.pack(); - mainFrame.setVisible(true); - } - }); + mainFrame = new JFrame("Gomoku! - Projet L2"); + mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + mainFrame.setSize(960, 960); + mainFrame.setResizable(false); + canvas = new RenderCanvas(); + mainFrame.add(canvas); + mainFrame.pack(); + mainFrame.setVisible(true); + mainFrame.addMouseListener(canvas); + + // add a label component for the title + JLabel titleLabel = new JLabel("Gomoku Game!", JLabel.CENTER); + titleLabel.setVerticalAlignment(JLabel.CENTER); + titleLabel.setBackground(Color.WHITE); + titleLabel.setOpaque(true); + titleLabel.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0)); + // set the font size and color + titleLabel.setFont(titleLabel.getFont().deriveFont(24f)); + + mainFrame.add(titleLabel, "North"); + mainFrame.pack(); + + // add a bottom label for the status + JLabel statusLabel = new JLabel("Status: Waiting for player...", JLabel.CENTER); + statusLabel.setVerticalAlignment(JLabel.CENTER); + statusLabel.setBackground(Color.WHITE); + statusLabel.setOpaque(true); + statusLabel.setBorder(BorderFactory.createEmptyBorder()); + // set the font size and color + statusLabel.setFont(statusLabel.getFont().deriveFont(18f)); + mainFrame.add(statusLabel, "South"); + mainFrame.pack(); } @Override @@ -41,14 +65,20 @@ public class SwingRenderer extends GomokuRenderer { // This method should be called whenever the game state changes canvas.draw(game); } + + public void updateStatus(String status) { + // Update the status label + JLabel statusLabel = (JLabel) mainFrame.getContentPane().getComponent(1); + statusLabel.setText("Status: " + status); + } } -class RenderCanvas extends JPanel { +class RenderCanvas extends JPanel implements MouseListener { public RenderBoard board; public RenderCanvas() { - setBorder(BorderFactory.createLineBorder(Color.black)); + setBorder(BorderFactory.createEmptyBorder()); setBackground(Color.white); board = new RenderBoard(15, 15, 600, 600); } @@ -72,4 +102,26 @@ class RenderCanvas extends JPanel { board.update(game); repaint(); } + + @Override + public void mouseClicked(MouseEvent e) { + // Handle mouse click events + int x = e.getX(); + int y = e.getY(); + System.out.println("Mouse clicked at: " + x + ", " + y); + } + + @Override + public void mousePressed(MouseEvent e) { + // Handle mouse press events + int x = e.getX(); + int y = e.getY(); + System.out.println("Mouse pressed at: " + x + ", " + y); + } + @Override + public void mouseReleased(MouseEvent e) {} + @Override + public void mouseEntered(MouseEvent e) {} + @Override + public void mouseExited(MouseEvent e) {} } \ No newline at end of file