From bf78db9404dee1bbf1567f6113fe869a475d59a9 Mon Sep 17 00:00:00 2001 From: Joshua Date: Fri, 13 Dec 2024 20:46:38 +0100 Subject: [PATCH] Added (currently not working) ship rotation method, colored Ready and Reset button, added (currently not working) Player name Labels etc. to GameBoard --- src/BoardDisplay.java | 24 ++++++++++++++++++++---- src/GameBoard.java | 24 ++++++++++++++++++++++++ src/MainFrame.java | 2 ++ src/ShipButton.java | 1 - 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/BoardDisplay.java b/src/BoardDisplay.java index f09a416..c20347e 100644 --- a/src/BoardDisplay.java +++ b/src/BoardDisplay.java @@ -14,6 +14,7 @@ public class BoardDisplay extends JPanel { private List ships; private Ship currentShip; private Player player; + private boolean horizontal = true; /** * Konstruktor der startLocalGame. @@ -69,8 +70,12 @@ public class BoardDisplay extends JPanel { field.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - Point o= new Point(x, y); - handleFieldClick(o); + if (SwingUtilities.isRightMouseButton(e)) { + togglePlacementDirection(); // Ausrichtung ändern + } else if (SwingUtilities.isLeftMouseButton(e)) { + Point o = new Point(x, y); + handleFieldClick(o); // Linksklick -> Schiff platzieren + } } }); } @@ -79,6 +84,8 @@ public class BoardDisplay extends JPanel { // this.ships = new ArrayList(); } + + public void selectCurrentShip(Ship ship) { this.currentShip = ship; } @@ -147,8 +154,17 @@ public class BoardDisplay extends JPanel { } /** - * TODO Funktion beschreiben etc. - * @param o + * Wechselt die Platzierungsrichtung zwischen horizontal und vertikal. + */ + private void togglePlacementDirection() { + horizontal = !horizontal; + String direction = horizontal ? "horizontal" : "vertikal"; + System.out.println("Platzierungsrichtung geändert zu: " + direction); + } + + /** + * Handhabt das Platzieren eines Schiffs auf dem Spielfeld. + * @param o Die Koordinaten des Klicks. */ private void handleFieldClick(Point o) { if (!this.currentShip.setPosition(o,player.getBoard().getShips(),this.gridSize)) { diff --git a/src/GameBoard.java b/src/GameBoard.java index b3b9aa1..e9e65c7 100644 --- a/src/GameBoard.java +++ b/src/GameBoard.java @@ -8,6 +8,8 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.util.List; + +// TODO wenn rechtklick auf board dann schiff rotation ändern UND Readybutton farbe Readybutton kontexttext und Spielernamen anzeigen /** * Das GameBoard dient als Panel, in dem das tatsächliche Spiel stattfindet. * Der Benutzer kann hier seine Schiffe platzieren, das Spiel starten etc. @@ -103,9 +105,11 @@ public class GameBoard extends JPanel { } JToggleButton rightPlayerModul7 = new JToggleButton("Bereit"); + rightPlayerModul7.setBackground(Color.GREEN); rightButtonsPanel.add(rightPlayerModul7); JToggleButton leftPlayerModul7 = new JToggleButton("Reset"); + leftPlayerModul7.setBackground(Color.RED); leftButtonsPanel.add(leftPlayerModul7); // Panel für die Buttons des rechten Spielers (ganz rechts) @@ -118,6 +122,26 @@ public class GameBoard extends JPanel { centerPanel.add(ownBoardPanel); centerPanel.add(opponentBoardPanel); + // Spieler-Namen über den Spielfeldern hinzufügen + JPanel playerNamesPanel = new JPanel(); + playerNamesPanel.setLayout(new GridLayout(1, 2)); // Zwei Labels nebeneinander + JLabel player1NameLabel = new JLabel(p1.getName(), SwingConstants.CENTER); + JLabel player2NameLabel = new JLabel(p2.getName(), SwingConstants.CENTER); + System.out.println(player2NameLabel.getText()); + + // Schrift und Formatierung der Labels + player1NameLabel.setFont(new Font("Roboto", Font.BOLD, 18)); + player2NameLabel.setFont(new Font("Roboto", Font.BOLD, 18)); + + // Spieler-Labels zum Panel hinzufügen + playerNamesPanel.add(player1NameLabel); + playerNamesPanel.add(player2NameLabel); + + // Spieler-Namen-Panel oberhalb der Spielfelder hinzufügen + JPanel namesAndBoardsPanel = new JPanel(new BorderLayout()); + namesAndBoardsPanel.add(playerNamesPanel, BorderLayout.NORTH); + namesAndBoardsPanel.add(centerPanel, BorderLayout.CENTER); + // Panels dem Hauptlayout hinzufügen add(leftButtonsPanel, BorderLayout.WEST); add(rightButtonsPanel, BorderLayout.EAST); diff --git a/src/MainFrame.java b/src/MainFrame.java index 75b27ba..7b3f76b 100644 --- a/src/MainFrame.java +++ b/src/MainFrame.java @@ -1,6 +1,8 @@ import javax.swing.*; import java.awt.*; +//TODO Generell Buttons in GameBoard anpassen + /** * Der MainFrame dient als Hub und Übergreifendes Fenster auf dem alle weiteren Panel angezeigt werden. * Dadurch werden keine weiteren Fenster geöffnet. diff --git a/src/ShipButton.java b/src/ShipButton.java index 36e47f3..4b11bce 100644 --- a/src/ShipButton.java +++ b/src/ShipButton.java @@ -15,5 +15,4 @@ public class ShipButton extends JButton { public void buttonPressed() { this.setEnabled(!ship.isPlaced()); } - }