From 2274a1e558184a31eea5f4d586d2f0f2ced69b0a Mon Sep 17 00:00:00 2001 From: Joshua Date: Tue, 26 Nov 2024 17:15:21 +0100 Subject: [PATCH] Created GameBoard. Added showPanel methods to pass parameters between methods. --- graphics/gameboardempty.png | Bin 0 -> 84 bytes graphics/gameboardx.png | Bin 0 -> 171 bytes src/GameBoard.java | 112 +++++++++++++++++++++++++++++++++- src/MainFrame.java | 36 +++++++++-- src/startLocalGame.java | 2 +- src/startMultiplayerGame.java | 4 +- 6 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 graphics/gameboardempty.png create mode 100644 graphics/gameboardx.png diff --git a/graphics/gameboardempty.png b/graphics/gameboardempty.png new file mode 100644 index 0000000000000000000000000000000000000000..366ceab3b13ec07b4d599d4ffe961e697fb8c3d1 GIT binary patch literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf67>k44ofy`glX(f`@Oip8hGJeE~TVv85N*!KA0mS1O1 zY;We-B2*uFwrImSuf1+h0uBgwHvPTtsNH-`B&zyDsW4-Rs=L!=!%+WUoz{$#j~Q_- T;96%7w2;Bm)z4*}Q$iB}F|Iw) literal 0 HcmV?d00001 diff --git a/src/GameBoard.java b/src/GameBoard.java index 61bdb72..c4dda52 100644 --- a/src/GameBoard.java +++ b/src/GameBoard.java @@ -1,3 +1,113 @@ -public class GameBoard { +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +public class GameBoard extends JPanel { + // Funktionshilfen + //int semesterCounter = 1; //TODO: ersetzen durch param von vorpanel + + // Grafiken + ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); + ImageIcon gameBoardEmtpy = new ImageIcon("graphics/gameboardempty.png"); + ImageIcon gameBoardX = new ImageIcon("graphics/gameboardx.png"); + + // Labels + JLabel frameTitle = new JLabel("GameBoard"); + JLabel kontextText = new JLabel("Beispielhafter Kontext-Text"); + //kontextText.setFont(new Font("Roboto", Font.BOLD, 24)); //TODO setFont fixen + + JButton backButton = new JButton(backButtonIcon); + // Eigene ModulButtons + JButton leftPlayerModul1 = new JButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester + JButton leftPlayerModul2 = new JButton("Modul 2"); + JButton leftPlayerModul3 = new JButton("Modul 3"); + JButton leftPlayerModul4 = new JButton("Modul 4"); + JButton leftPlayerModul5 = new JButton("Modul 5"); + JButton leftPlayerModul6 = new JButton("Modul 6"); + JButton leftPlayerModul7 = new JButton("Reset"); + // Gegnerische ModulButtons + JButton rightPlayerModul1 = new JButton("Modul 1"); + JButton rightPlayerModul2 = new JButton("Modul 2"); + JButton rightPlayerModul3 = new JButton("Modul 3"); + JButton rightPlayerModul4 = new JButton("Modul 4"); + JButton rightPlayerModul5 = new JButton("Modul 5"); + JButton rightPlayerModul6 = new JButton("Modul 6"); + JButton rightPlayerModul7 = new JButton("Bereit"); + + public void buildPanel(MainFrame frame, int semesterCounter) { + // Hauptlayout - BorderLayout für die Anordnung der Komponenten + setLayout(new BorderLayout()); + + // Panel für das Kontext-Text-Feld + JPanel headerPanel = new JPanel(); + headerPanel.setLayout(new BorderLayout()); + headerPanel.add(kontextText, BorderLayout.WEST); + headerPanel.add(backButton, BorderLayout.EAST); + + // Panel für die Buttons des linken Spielers (ganz links) + JPanel leftButtonsPanel = new JPanel(); + leftButtonsPanel.setLayout(new GridLayout(7, 1)); // 6 Buttons untereinander + leftButtonsPanel.add(leftPlayerModul1); + leftButtonsPanel.add(leftPlayerModul2); + leftButtonsPanel.add(leftPlayerModul3); + leftButtonsPanel.add(leftPlayerModul4); + leftButtonsPanel.add(leftPlayerModul5); + leftButtonsPanel.add(leftPlayerModul6); + leftButtonsPanel.add(leftPlayerModul7); + + // Panel für die Buttons des rechten Spielers (ganz rechts) + JPanel rightButtonsPanel = new JPanel(); + rightButtonsPanel.setLayout(new GridLayout(7, 1)); // 6 Buttons untereinander + rightButtonsPanel.add(rightPlayerModul1); + rightButtonsPanel.add(rightPlayerModul2); + rightButtonsPanel.add(rightPlayerModul3); + rightButtonsPanel.add(rightPlayerModul4); + rightButtonsPanel.add(rightPlayerModul5); + rightButtonsPanel.add(rightPlayerModul6); + rightButtonsPanel.add(rightPlayerModul7); + + // Spielfelder erstellen (eigenes und gegnerisches) + int gridSize = 13 + semesterCounter; // Größe des Spielfelds + JPanel ownBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); + JPanel opponentBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); + + // Buttons für das eigene Spielfeld hinzufügen + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + ownBoardPanel.add(new JButton(gameBoardEmtpy)); + } + } + + // Buttons für das gegnerische Spielfeld hinzufügen + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + opponentBoardPanel.add(new JButton(gameBoardEmtpy)); + } + } + + // Panel für beide Spielfelder (nebeneinander in der Mitte) + JPanel centerPanel = new JPanel(); + centerPanel.setLayout(new GridLayout(1, 2, 20, 0)); // 2 Spielfelder nebeneinander, mit Abstand von 20 Pixeln + centerPanel.add(ownBoardPanel); + centerPanel.add(opponentBoardPanel); + + // Panels dem Hauptlayout hinzufügen + add(leftButtonsPanel, BorderLayout.WEST); + add(rightButtonsPanel, BorderLayout.EAST); + add(headerPanel, BorderLayout.NORTH); + add(centerPanel, BorderLayout.CENTER); + } + + GameBoard(MainFrame frame,int semesterCounter) { + buildPanel(frame, semesterCounter); + /* + rightPlayerRightButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + toggleRightPlayerIcon(); + updateTextFields(); + } + }); */ + } } diff --git a/src/MainFrame.java b/src/MainFrame.java index 567505f..3c7ee8c 100644 --- a/src/MainFrame.java +++ b/src/MainFrame.java @@ -5,8 +5,17 @@ public class MainFrame extends JFrame { private CardLayout cardLayout; private JPanel mainPanel; + + // ---------- // + // Diverse Hilfsvariablen (für Parameterübergabe etc.) + // Von startMultiplayerGame an JoinGame int localMult; + // Von startLocalGame an GameBoard + int semesterCounter; + // ---------- // + + public MainFrame() { setTitle("Studium Versenken"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -29,12 +38,15 @@ public class MainFrame extends JFrame { startMultiplayerGame multiplayerGame = new startMultiplayerGame(this); coinToss coinToss = new coinToss(this); //JoinGame joinGame = new JoinGame(this,localMult); + //GameBoard gameBoard = new GameBoard(this, localMult); mainPanel.add(mainMenuView, "MainMenu"); mainPanel.add(localGame, "LocalGame"); mainPanel.add(multiplayerGame, "MultiplayerGame"); mainPanel.add(coinToss, "coinToss"); //mainPanel.add(joinGame, "JoinGame"); + //mainPanel.add(gameBoard, "GameBoard"); + // Hauptpanel in JFrame hinzufügen add(mainPanel); @@ -46,19 +58,33 @@ public class MainFrame extends JFrame { public void showPanel(String panelName) { cardLayout.show(mainPanel, panelName); } - - public void showPanelExtra(String panelName,int num) { + // --- ShowPanel der startMultiplayerGame Klasse + public void showPanelSMG(String panelName, int num) { this.localMult = num; - if (!isPanelPresent(panelName)) { + //if (!isPanelPresent(panelName)) { //TODO potentiell raus JoinGame joinGame = new JoinGame(this, localMult); mainPanel.add(joinGame, panelName); // Dynamically add the panel mainPanel.revalidate(); // Refresh the layout mainPanel.repaint(); - } + //} cardLayout.show(mainPanel, panelName); // Show the panel } + // --- ShowPanel der startLocalGame Klasse + public void showPanelSLG(String panelName,int semesterCounter) { + this.semesterCounter = semesterCounter; + + //if (!isPanelPresent(panelName)) { //TODO potentiell raus + GameBoard gameBoard = new GameBoard(this, semesterCounter); + mainPanel.add(gameBoard, panelName); // Dynamically add the panel + mainPanel.revalidate(); // Refresh the layout + mainPanel.repaint(); + //} + + cardLayout.show(mainPanel, panelName); // Show the panel + } + /* TODO ist dies unnötig? private boolean isPanelPresent(String panelName) { for (Component component : mainPanel.getComponents()) { if (panelName.equals(mainPanel.getClientProperty("name"))) { @@ -66,7 +92,7 @@ public class MainFrame extends JFrame { } } return false; - } + } */ public static void main(String[] args) { SwingUtilities.invokeLater(() -> { diff --git a/src/startLocalGame.java b/src/startLocalGame.java index 8dcc513..1dab9c1 100644 --- a/src/startLocalGame.java +++ b/src/startLocalGame.java @@ -143,7 +143,7 @@ public class startLocalGame extends JPanel { backButton.addActionListener(e -> frame.showPanel("MainMenu")); - startButton.addActionListener(e -> frame.showPanel("coinToss")); // TODO ECHTE FUNKTION EINFÜGEN + startButton.addActionListener(e -> frame.showPanelSLG("GameBoard", semesterCounter)); // TODO ECHTE FUNKTION EINFÜGEN } private void toggleLeftPlayerIcon() { diff --git a/src/startMultiplayerGame.java b/src/startMultiplayerGame.java index ad73f7c..e1d00be 100644 --- a/src/startMultiplayerGame.java +++ b/src/startMultiplayerGame.java @@ -106,8 +106,8 @@ public class startMultiplayerGame extends JPanel { // ActionListener für den "Back" Button, um zum vorherigen Panel zurückzukehren backButton.addActionListener(e -> frame.showPanel("MainMenu")); - joinGameButton.addActionListener(e -> frame.showPanelExtra("JoinGame",1)); - createGameButton.addActionListener(e -> frame.showPanelExtra("JoinGame",0)); + joinGameButton.addActionListener(e -> frame.showPanelSMG("JoinGame",1)); + createGameButton.addActionListener(e -> frame.showPanelSMG("JoinGame",0)); } // TOGGLE METHODEN