import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * Das startMultiplayerGame Panel dient dem Erstellen eines Online Spiels. * Hier kann der Benutzer Spieler inklusive Namen und das Semester, in dem sich der Benutzer befindet, einstellen. * @author Joshua Kuklok */ public class startMultiplayerGame extends JPanel { // Funktionshilfen int semesterCounter = 1; String PlayerNickname = "Spieler 1"; // Grafiken ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); ImageIcon humanPlayerIcon = new ImageIcon("graphics/humanPlayer.png"); ImageIcon aiPlayerEasyIcon = new ImageIcon("graphics/botPlayerEasy.png"); ImageIcon aiPlayerNormalIcon = new ImageIcon("graphics/botPlayerNormal.png"); ImageIcon aiPlayerHardIcon = new ImageIcon("graphics/botPlayerHard.png"); // Labels JLabel frameTitle = new JLabel("Multiplayer Spiel"); JLabel semesterLabel = new JLabel("Semester"); JLabel PlayerName = new JLabel("Name"); JLabel PlayerIcon = new JLabel(humanPlayerIcon); JLabel semesterCounterLabel = new JLabel(String.valueOf(semesterCounter)); // Buttons JButton backButton = new JButton(backButtonIcon); JButton PlayerLeftButton = new JButton("<-"); JButton PlayerRightButton = new JButton("->"); JButton semesterUpButton = new JButton("^"); JButton semesterDownButton = new JButton("v"); JButton createGameButton = new JButton("Spiel erstellen"); JButton joinGameButton = new JButton("Spiel beitreten"); // Textfelder JTextField PlayerTextField = new JTextField(20); Font robotoFont = new Font("Roboto", Font.BOLD, 45); /** * Konstruktor der startLocalGame. * Fügt Buttons, Textfelder und Label hinzu. * Fügt ebenfalls ActionListeners hinzu, damit Buttons etc. ihre gewünschte Funktion haben * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @author Joshua Kuklok, Lucas Bronson */ startMultiplayerGame(MainFrame frame) { // Layout des Panels setLayout(null); // Setze Komponentenpositionen frameTitle.setBounds(20, 20, 500, 60); frameTitle.setFont(robotoFont.deriveFont(50f)); add(frameTitle); semesterLabel.setBounds(700, 300, 200, 30); add(semesterLabel); PlayerName.setBounds(50, 625, 200, 30); add(PlayerName); PlayerIcon.setBounds(75, 400, 200, 128); add(PlayerIcon); semesterCounterLabel.setBounds(705, 475, 50, 50); // zwischen den Up/Down-Buttons semesterCounterLabel.setHorizontalAlignment(SwingConstants.CENTER); add(semesterCounterLabel); backButton.setBounds(1380, 20, 80, 80); add(backButton); PlayerLeftButton.setBounds(50, 450, 50, 50); add(PlayerLeftButton); PlayerRightButton.setBounds(250, 450, 50, 50); add(PlayerRightButton); semesterUpButton.setBounds(705, 400, 50, 50); add(semesterUpButton); semesterDownButton.setBounds(705, 550, 50, 50); add(semesterDownButton); joinGameButton.setBounds(1100, 350, 200, 50); add(joinGameButton); createGameButton.setBounds(1100, 550, 200, 50); add(createGameButton); PlayerTextField.setBounds(50, 650, 250, 50); PlayerTextField.setText(PlayerNickname); add(PlayerTextField); // ActionListener für Buttons // Um das Semester zu erhöhen. semesterUpButton.addActionListener(e -> { if (semesterCounter < 6) { semesterCounter++; semesterCounterLabel.setText(String.valueOf(semesterCounter)); } }); // Um das Semester zu senken. semesterDownButton.addActionListener(e -> { if (semesterCounter > 1) { semesterCounter--; semesterCounterLabel.setText(String.valueOf(semesterCounter)); } }); // Um Player nach links zu "rotieren". PlayerLeftButton.addActionListener(e -> { togglePlayerIconLeft(); updateTextFields(); }); // Um Player nach rechts zu "rotieren". PlayerRightButton.addActionListener(e -> { togglePlayerIconRight(); updateTextFields(); }); // Um Namen des linken Spielers zu speichern. PlayerTextField.addActionListener(e -> { PlayerNickname = PlayerTextField.getText(); System.out.println("Linker Spielername geändert zu: " + PlayerNickname); // Debugging-Ausgabe }); // Um Namen des linken Spielers zu speichern, auch wenn nicht Enter gedrückt wird. PlayerTextField.addFocusListener(new java.awt.event.FocusAdapter() { @Override public void focusLost(java.awt.event.FocusEvent evt) { PlayerNickname = PlayerTextField.getText(); System.out.println("Linker Spielername geändert zu: " + PlayerNickname); // Debugging-Ausgabe } }); // Um zum MainMenu zu wechseln. backButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.showPanel("MainMenu"); } }); // Um zu JoinGame mit richtigen Parametern zu wechseln. joinGameButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (PlayerIcon.getIcon() == humanPlayerIcon) { frame.showPanelSMG("JoinGame",1,0, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerEasyIcon) { frame.showPanelSMG("JoinGame",1,1, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerNormalIcon) { frame.showPanelSMG("JoinGame",1,2, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerHardIcon) { frame.showPanelSMG("JoinGame",1,3, PlayerNickname, semesterCounter); } } }); // Um zu JoinGame mit richtigen Parametern zu wechseln. createGameButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //Parameter -> panelName, Spiel erstellen oder beitreten (int), Spielertyp(int 0-3), Spielername if (PlayerIcon.getIcon() == humanPlayerIcon) { frame.showPanelSMG("JoinGame",0,0, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerEasyIcon) { frame.showPanelSMG("JoinGame",0,1, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerNormalIcon) { frame.showPanelSMG("JoinGame",0,2, PlayerNickname, semesterCounter); } else if ( PlayerIcon.getIcon() == aiPlayerHardIcon) { frame.showPanelSMG("JoinGame",0,3, PlayerNickname, semesterCounter); } } }); } // Hilfsfunktionen /** * Setzt das jeweils "nächste" Icon, wenn der PlayerLeftButton gedrückt wird. * @author Joshua Kuklok */ private void togglePlayerIconLeft() { if (PlayerIcon.getIcon() == humanPlayerIcon) { PlayerIcon.setIcon(aiPlayerHardIcon); } else if (PlayerIcon.getIcon() == aiPlayerEasyIcon){ PlayerIcon.setIcon(humanPlayerIcon); } else if (PlayerIcon.getIcon() == aiPlayerNormalIcon) { PlayerIcon.setIcon(aiPlayerEasyIcon); } else if (PlayerIcon.getIcon() == aiPlayerHardIcon) { PlayerIcon.setIcon(aiPlayerNormalIcon); } } /** * Setzt das jeweils "nächste" Icon, wenn der PlayerRightButton gedrückt wird. * @author Joshua Kuklok */ private void togglePlayerIconRight() { if (PlayerIcon.getIcon() == humanPlayerIcon) { PlayerIcon.setIcon(aiPlayerEasyIcon); } else if (PlayerIcon.getIcon() == aiPlayerEasyIcon){ PlayerIcon.setIcon(aiPlayerNormalIcon); } else if (PlayerIcon.getIcon() == aiPlayerNormalIcon) { PlayerIcon.setIcon(aiPlayerHardIcon); } else if (PlayerIcon.getIcon() == aiPlayerHardIcon) { PlayerIcon.setIcon(humanPlayerIcon); } } /** * Aktualisiert die Textfelder basierend auf den Icons * @author Joshua Kuklok */ private void updateTextFields() { if (PlayerIcon.getIcon() == humanPlayerIcon) { PlayerTextField.setText(PlayerNickname); } else if (PlayerIcon.getIcon() == aiPlayerEasyIcon){ PlayerTextField.setText("Einfach"); } else if (PlayerIcon.getIcon() == aiPlayerNormalIcon) { PlayerTextField.setText("Mittel"); } else if (PlayerIcon.getIcon() == aiPlayerHardIcon) { PlayerTextField.setText("Schwer"); } } }