// import javafx.scene.control.ToggleGroup; 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; // TODO 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. */ 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"); // kontextText Text-Strings String kT1 = "Bitte Schiffe setzten"; String kT2 = "Warte auf Gegner"; String kT3 = "Du fängst an"; String kT4 = "Dein Gegner fängt an"; String kT5 = "Du bist am Zug"; String kT6 = "Dein Gegner ist am Zug"; String kT7 = "Du hast das Spiel gewonnen"; String kT8 = "Du hast das Spiel verloren"; // Labels JLabel frameTitle = new JLabel("GameBoard"); JLabel kontextText = new JLabel(kT1); JButton backButton = new JButton(backButtonIcon); // Eigene ModulButtons /** * Konstruktor von GameBoard. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param semesterCounter Ausgewähltes Semester * @param p1 Erstes Spielerobjekt * @param p2 Zweites Spielerobjekt */ GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) { buildPanel(frame, semesterCounter,p1,p2); List shipsP1 =p1.getBoard().getShips(); List shipsP2 =p2.getBoard().getShips(); backButton.addActionListener(e -> frame.showPanel("MainMenu")); } /** * TODO Funktion beschreiben etc. * @param ships * @param buttons */ private void updateButtonLabels(List ships,JToggleButton[] buttons) { for(int i=0;i= 90) { increasing = false; // Richtung ändern } } else { grayValue--; if (grayValue <= 0) { increasing = true; // Richtung ändern } } } }); /** * TODO Funktion beschreiben etc. * @param frame * @param semesterCounter * @param p1 * @param p2 */ public void buildPanel(MainFrame frame, int semesterCounter,Player p1,Player p2) { // Hauptlayout - BorderLayout für die Anordnung der Komponenten setLayout(new BorderLayout()); // Spielfelder erstellen (eigenes und gegnerisches) // Spielfelder werden in BoardDisplay erstellt int gridSize = GameController.semesterToBoardSize(semesterCounter); // Größe des Spielfelds BoardDisplay ownBoardPanel = new BoardDisplay(gridSize,p1); BoardDisplay opponentBoardPanel = new BoardDisplay(gridSize, p2); // Panel für das Kontext-Text-Feld JPanel headerPanel = new JPanel(); headerPanel.setLayout(new BorderLayout()); headerPanel.add(kontextText, BorderLayout.WEST); kontextText.setFont(new Font("Roboto", Font.BOLD, 30)); //TODO setFont fixen headerPanel.add(backButton, BorderLayout.EAST); JPanel leftButtonsPanel = new JPanel(); leftButtonsPanel.setLayout(new GridLayout(7, 1)); // 6 Buttons untereinander JPanel rightButtonsPanel = new JPanel(); rightButtonsPanel.setLayout(new GridLayout(7, 1)); //Buttons in eine Gruppe packen damit diese beim drücken eines anderen Buttons wieder entwählt werden ButtonGroup leftButtonGroup= new ButtonGroup(); ButtonGroup rightButtonGroup= new ButtonGroup(); // Panel für die Buttons des linken Spielers (ganz links) for(Ship ship : p1.getBoard().getShips()) { ShipButton shipButton= new ShipButton(ship,ownBoardPanel); leftButtonsPanel.add(shipButton); leftButtonGroup.add(shipButton); } for(Ship ship : p2.getBoard().getShips()) { ShipButton shipButton= new ShipButton(ship,opponentBoardPanel); rightButtonsPanel.add(shipButton); rightButtonGroup.add(shipButton); } JToggleButton rightPlayerModul7 = new JToggleButton("Bereit"); rightPlayerModul7.setBackground(Color.GREEN); rightButtonsPanel.add(rightPlayerModul7); JToggleButton leftPlayerModul7 = new JToggleButton("Reset"); leftPlayerModul7.setBackground(Color.RED); leftButtonsPanel.add(leftPlayerModul7); leftPlayerModul7.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ownBoardPanel.resetAllShips(); } }); rightPlayerModul7.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //TODO richtige funktion einfügen kontextText.setText(kT2); } }); // Panel für die Buttons des rechten Spielers (ganz rechts) //JPanel ownBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); //JPanel opponentBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); // 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); // 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("Name in Gameboard: " + player1NameLabel.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); add(headerPanel, BorderLayout.NORTH); add(centerPanel, BorderLayout.CENTER); timer.start(); } }