From 8a9e7fb4b28394597cc3e6c816b65c47bc2ca50e Mon Sep 17 00:00:00 2001 From: Kaver Date: Tue, 10 Dec 2024 16:52:10 +0100 Subject: [PATCH] Implementierung von Schiffe platzieren gestartet(BoardDisplay), Anpassungen an Buttons im GameBoard sowie diverse getter hinzugefeugt(backend) --- src/BoardDisplay.java | 78 ++++++++++++++++++++----- src/GameBoard.java | 131 +++++++++++++++++++++++------------------- src/Player.java | 3 + src/Ship.java | 11 ++++ 4 files changed, 152 insertions(+), 71 deletions(-) diff --git a/src/BoardDisplay.java b/src/BoardDisplay.java index 360184d..c1db6b4 100644 --- a/src/BoardDisplay.java +++ b/src/BoardDisplay.java @@ -2,14 +2,22 @@ import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; public class BoardDisplay extends JPanel { - public BoardDisplay(int gridSize, Icon buttonIcon) { - super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Splate + private JButton[][] fields; + private int gridSize; + private List ships; + public BoardDisplay(int gridSize, Player player) { + super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Splate + this.fields = new JButton[gridSize][gridSize]; // Erstellung von Spielfeld for (int i = 0; i <= gridSize; i++) { for (int j = 0; j <= gridSize; j++) { + final int x = i; // Temporäre Variable + final int y = j; // Temporäre Variable if (i == 0 && j == 0) { add(new JLabel(" ")); } else if (i == 0) { @@ -28,27 +36,71 @@ public class BoardDisplay extends JPanel { field.setBackground(Color.LIGHT_GRAY); field.setOpaque(true); field.setBorderPainted(true); + fields[i - 1][j - 1] = field; + add(field); + //field.addMouseListener(new MouseAdapter() { + // @Override + //public void mouseClicked(MouseEvent e) { + // if (SwingUtilities.isRightMouseButton(e)) { + // handleFieldClick(field); + // } + // } + //@Override + //public void mouseExited(MouseEvent e) { + // field.setBackground(Color.LIGHT_GRAY); + // } + // }); + int finalI = i; + int finalJ = j; field.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - if(SwingUtilities.isRightMouseButton(e)) { - handleFieldClick(field); - } - } - - @Override - public void mouseExited(MouseEvent e) { - // field.setBackground(Color.LIGHT_GRAY); + Point o= new Point(finalI, finalJ); + handleFieldClick(field, o,player); } }); - add(field); } } } + + // this.ships = new ArrayList(); } - private void handleFieldClick(JButton field) { - field.setBackground(Color.RED); + private boolean setShip(Ship ship, Point o, boolean horizontal,Player player) { + //boolean a = true; + if (placeable(ship, ship.getPosition(), horizontal)) { + ship.setPosition(new Point(o.getX(),o.getY()),player.getBoard().getShips(),gridSize); + ship.setHorizontal(horizontal); + ships.add(ship); + List occupied = ship.getOccupiedPoints(); + for(Point p: occupied) { + fields[p.getX()][p.getY()].setBackground(Color.LIGHT_GRAY); + } + return true; + }else{ + return false; + } + } + + private boolean placeable(Ship ship,Point o, boolean horizontal) { + if (horizontal && (o.getX() + ship.getSize() > gridSize)) { + return false; + } + if (!horizontal && (o.getY() + ship.getSize() > gridSize)) { + return false; + } + return true; + } + + private void selectShip(MouseEvent e) { + Ship current = (Ship) e.getSource(); + } + + private void handleFieldClick(JButton field, Point o,Player player) { + // Beispiel: Setze ein Schiff bei einem Klick + if (setShip(new Ship(3, "TestShip"), o, true,player)) { + field.setBackground(Color.BLUE); // Visualisiere Schiff + } } } \ No newline at end of file diff --git a/src/GameBoard.java b/src/GameBoard.java index c53c985..4528693 100644 --- a/src/GameBoard.java +++ b/src/GameBoard.java @@ -4,6 +4,9 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseAdapter; +import java.util.List; public class GameBoard extends JPanel { // Funktionshilfen @@ -21,24 +24,48 @@ public class GameBoard extends JPanel { JButton backButton = new JButton(backButtonIcon); // Eigene ModulButtons - JToggleButton leftPlayerModul1 = new JToggleButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester - JToggleButton leftPlayerModul2 = new JToggleButton("Modul 2"); - JToggleButton leftPlayerModul3 = new JToggleButton("Modul 3"); - JToggleButton leftPlayerModul4 = new JToggleButton("Modul 4"); - JToggleButton leftPlayerModul5 = new JToggleButton("Modul 5"); - JToggleButton leftPlayerModul6 = new JToggleButton("Modul 6"); - JToggleButton leftPlayerModul7 = new JToggleButton("Reset"); - // Gegnerische ModulButtons - JToggleButton rightPlayerModul1 = new JToggleButton("Modul 1"); - JToggleButton rightPlayerModul2 = new JToggleButton("Modul 2"); - JToggleButton rightPlayerModul3 = new JToggleButton("Modul 3"); - JToggleButton rightPlayerModul4 = new JToggleButton("Modul 4"); - JToggleButton rightPlayerModul5 = new JToggleButton("Modul 5"); - JToggleButton rightPlayerModul6 = new JToggleButton("Modul 6"); - JToggleButton rightPlayerModul7 = new JToggleButton("Bereit"); + GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) { + JToggleButton leftPlayerModul1 = new JToggleButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester + JToggleButton leftPlayerModul2 = new JToggleButton("Modul 2"); + JToggleButton leftPlayerModul3 = new JToggleButton("Modul 3"); + JToggleButton leftPlayerModul4 = new JToggleButton("Modul 4"); + JToggleButton leftPlayerModul5 = new JToggleButton("Modul 5"); + JToggleButton leftPlayerModul6 = new JToggleButton("Modul 6"); + JToggleButton leftPlayerModul7 = new JToggleButton("Reset"); - public void buildPanel(MainFrame frame, int semesterCounter) { + JToggleButton[] leftPlayerButtons=new JToggleButton[]{ + leftPlayerModul1, leftPlayerModul2, leftPlayerModul3, leftPlayerModul4, + leftPlayerModul5, leftPlayerModul6, leftPlayerModul7, + }; + // Gegnerische ModulButtons + JToggleButton rightPlayerModul1 = new JToggleButton("Modul 1"); + JToggleButton rightPlayerModul2 = new JToggleButton("Modul 2"); + JToggleButton rightPlayerModul3 = new JToggleButton("Modul 3"); + JToggleButton rightPlayerModul4 = new JToggleButton("Modul 4"); + JToggleButton rightPlayerModul5 = new JToggleButton("Modul 5"); + JToggleButton rightPlayerModul6 = new JToggleButton("Modul 6"); + JToggleButton rightPlayerModul7 = new JToggleButton("Bereit"); + + JToggleButton[] rightlayerButtons=new JToggleButton[]{ + rightPlayerModul1, rightPlayerModul2, rightPlayerModul3, rightPlayerModul4, + rightPlayerModul5, rightPlayerModul6, rightPlayerModul7, + }; + + buildPanel(frame, semesterCounter,p1,p2,leftPlayerButtons,rightlayerButtons); + List shipsP1 =p1.getBoard().getShips(); + updateButtonLabels(shipsP1,leftPlayerButtons); + backButton.addActionListener(e -> frame.showPanel("MainMenu")); + } + + private void updateButtonLabels(List ships,JToggleButton[] buttons) { + for(int i=0;i frame.showPanel("MainMenu")); } } diff --git a/src/Player.java b/src/Player.java index faf9abb..8b6f6f1 100644 --- a/src/Player.java +++ b/src/Player.java @@ -43,6 +43,9 @@ public abstract class Player { return this.name; } + public Board getBoard() { + return this.board; + } public abstract void receiveCoin(boolean coin); } diff --git a/src/Ship.java b/src/Ship.java index 0c3c7f6..3be924b 100644 --- a/src/Ship.java +++ b/src/Ship.java @@ -159,4 +159,15 @@ public class Ship { public boolean isSunk() { return sunk; } + + public void setHorizontal(boolean horizontal) { + this.horizontal = horizontal; + } + + public int getSize() { + return size; + } + public String getName() { + return name; + } }