import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; /** * Das startLocalGame Panel dient dem Erstellen eines lokalen Spiels. * Hier kann der Benutzer Spieler inklusive Namen und das Semester, in dem sich der Benutzer befindet, einstellen. */ public class startLocalGame extends JPanel { // Player // TODO: entfernen Player p1; Player p2; // Funktionshilfen int semesterCounter = 1; // Semester Counter Label String leftPlayerNickname = "Spieler 1"; String rightPlayerNickname = "Einfach"; // 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("Lokales Spiel"); JLabel semesterLabel = new JLabel("Semester"); JLabel leftPlayerName = new JLabel("Name"); JLabel rightPlayerName = new JLabel("KI-Level"); JLabel leftPlayerIcon = new JLabel(humanPlayerIcon); JLabel rightPlayerIcon = new JLabel(aiPlayerEasyIcon); JLabel semesterCounterLabel = new JLabel(String.valueOf(semesterCounter)); // Buttons JButton backButton = new JButton(backButtonIcon); JButton leftPlayerLeftButton = new JButton("<-"); JButton leftPlayerRightButton = new JButton("->"); JButton semesterUpButton = new JButton("^"); JButton semesterDownButton = new JButton("v"); JButton rightPlayerLeftButton = new JButton("<-"); JButton rightPlayerRightButton = new JButton("->"); JButton startButton = new JButton("Start!"); JButton testButton = new JButton("Test"); // Textfelder JTextField leftPlayerTextField = new JTextField(20); JTextField rightPlayerTextField = new JTextField(20); /** * 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. */ startLocalGame(MainFrame frame) { // Layout des Panels setLayout(null); // Setze Komponentenpositionen frameTitle.setBounds(20, 20, 200, 30); add(frameTitle); semesterLabel.setBounds(700, 300, 200, 30); add(semesterLabel); leftPlayerName.setBounds(50, 625, 200, 30); add(leftPlayerName); rightPlayerName.setBounds(1200, 625, 200, 30); add(rightPlayerName); leftPlayerIcon.setBounds(75, 400, 200, 128); add(leftPlayerIcon); rightPlayerIcon.setBounds(1225, 400, 200, 128); add(rightPlayerIcon); semesterCounterLabel.setBounds(725, 475, 50, 50); semesterCounterLabel.setHorizontalAlignment(SwingConstants.CENTER); add(semesterCounterLabel); testButton.setBounds(500,800,50,50); add(testButton); backButton.setBounds(1380, 20, 80, 80); add(backButton); leftPlayerLeftButton.setBounds(50, 450, 50, 50); add(leftPlayerLeftButton); leftPlayerRightButton.setBounds(250, 450, 50, 50); add(leftPlayerRightButton); semesterUpButton.setBounds(725, 400, 50, 50); add(semesterUpButton); semesterDownButton.setBounds(725, 550, 50, 50); add(semesterDownButton); rightPlayerLeftButton.setBounds(1200, 450, 50, 50); add(rightPlayerLeftButton); rightPlayerRightButton.setBounds(1400, 450, 50, 50); add(rightPlayerRightButton); startButton.setBounds(700, 750, 100, 50); add(startButton); leftPlayerTextField.setBounds(50, 650, 250, 50); leftPlayerTextField.setText(leftPlayerNickname); add(leftPlayerTextField); rightPlayerTextField.setBounds(1200, 650, 250, 50); rightPlayerTextField.setText(rightPlayerNickname); add(rightPlayerTextField); // 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 linken Player nach links zu "rotieren". leftPlayerLeftButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toggleLeftPlayerIconLeft(); updateTextFields(); } }); // Um linken Player nach rechts zu "rotieren". leftPlayerRightButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toggleLeftPlayerIconRight(); updateTextFields(); } }); // Um rechten Player nach links zu "rotieren". rightPlayerLeftButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toggleRightPlayerIconLeft(); updateTextFields(); } }); // Um den rechten Player nach rechts zu "rotieren". rightPlayerRightButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { toggleRightPlayerIconRight(); updateTextFields(); } }); // Um Namen des linken Spielers zu speichern. leftPlayerTextField.addActionListener(e -> { leftPlayerNickname = leftPlayerTextField.getText(); System.out.println("Linker Spielername geändert zu: " + leftPlayerNickname); // Debugging-Ausgabe }); // Um Namen des linken Spielers zu speichern, auch wenn nicht Enter gedrückt wird. leftPlayerTextField.addFocusListener(new java.awt.event.FocusAdapter() { @Override public void focusLost(java.awt.event.FocusEvent evt) { leftPlayerNickname = leftPlayerTextField.getText(); System.out.println("Linker Spielername geändert zu: " + leftPlayerNickname); // Debugging-Ausgabe } }); // Um zum MainMenu zu wechseln. backButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.showPanel("MainMenu"); } }); // Um zum Gameboard zu wechseln. testButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.showPanelSLG("GameBoard",1,p1,p2); } }); // Um zum startLocalGameLoadingScreen zu wechseln und Daten an Backend weiterzureichen. startButton.addActionListener(new ActionListener() { @SuppressWarnings("unchecked") @Override public void actionPerformed(ActionEvent e) { HashMap> playerClassMap = new HashMap<>(); playerClassMap.put(humanPlayerIcon, HumanPlayer.class); playerClassMap.put(aiPlayerEasyIcon, SpecificAiPlayerEasy.class); playerClassMap.put(aiPlayerNormalIcon, SpecificAiPlayerMedium.class); playerClassMap.put(aiPlayerHardIcon, SpecificAiPlayerHard.class); frame.showPanelSLGLS("startLocalGameLoadingScreen", semesterCounter); //TODO Class leftPlayerClass = playerClassMap.get(leftPlayerIcon.getIcon()); Class rightPlayerClass = (Class) playerClassMap.get(rightPlayerIcon.getIcon()); GameController.startLocalGame( leftPlayerClass, leftPlayerNickname, rightPlayerClass, GameController.semesterToBoardSize(semesterCounter) ); // if (leftPlayerIcon.getIcon() == humanPlayerIcon) {// TODO Wird name wirklich weitergegeben? // if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { // GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { // GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { // GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerHard.class, GameController.semesterToBoardSize(semesterCounter)); // } // } else if (leftPlayerIcon.getIcon() == aiPlayerEasyIcon) { // if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { // GameController.startLocalGame(SpecificAiPlayerEasy.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { // GameController.startLocalGame(SpecificAiPlayerEasy.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { // GameController.startLocalGame(SpecificAiPlayerEasy.class, leftPlayerNickname, SpecificAiPlayerHard.class, GameController.semesterToBoardSize(semesterCounter)); // } // } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { // if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { // GameController.startLocalGame(SpecificAiPlayerMedium.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { // GameController.startLocalGame(SpecificAiPlayerMedium.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { // GameController.startLocalGame(SpecificAiPlayerMedium.class, leftPlayerNickname, SpecificAiPlayerHard.class, GameController.semesterToBoardSize(semesterCounter)); // } // } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { // if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { // GameController.startLocalGame(SpecificAiPlayerHard.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { // GameController.startLocalGame(SpecificAiPlayerHard.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); // } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { // GameController.startLocalGame(SpecificAiPlayerHard.class, leftPlayerNickname, SpecificAiPlayerHard.class, GameController.semesterToBoardSize(semesterCounter)); // } // } } }); } // Hilfsfunktionen /** * Setzt das jeweils "nächste" Icon, wenn der leftPlayerLeftButton gedrückt wird. */ private void toggleLeftPlayerIconLeft() { if (leftPlayerIcon.getIcon() == humanPlayerIcon) { leftPlayerIcon.setIcon(aiPlayerHardIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerEasyIcon){ leftPlayerIcon.setIcon(humanPlayerIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerNormalIcon) { leftPlayerIcon.setIcon(aiPlayerEasyIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerHardIcon) { leftPlayerIcon.setIcon(aiPlayerNormalIcon); } } /** * Setzt das jeweils "nächste" Icon, wenn der leftPlayerRightButton gedrückt wird. */ private void toggleLeftPlayerIconRight() { if (leftPlayerIcon.getIcon() == humanPlayerIcon) { leftPlayerIcon.setIcon(aiPlayerEasyIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerEasyIcon){ leftPlayerIcon.setIcon(aiPlayerNormalIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerNormalIcon) { leftPlayerIcon.setIcon(aiPlayerHardIcon); } else if (leftPlayerIcon.getIcon() == aiPlayerHardIcon) { leftPlayerIcon.setIcon(humanPlayerIcon); } } /** * Setzt das jeweils "nächste" Icon, wenn der RightPlayerLeftButton gedrückt wird. */ private void toggleRightPlayerIconLeft() { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { rightPlayerIcon.setIcon(aiPlayerHardIcon); } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon){ rightPlayerIcon.setIcon(aiPlayerEasyIcon); } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { rightPlayerIcon.setIcon(aiPlayerNormalIcon); } } /** * Setzt das jeweils "nächste" Icon, wenn der RightPlayerRightButton gedrückt wird. */ private void toggleRightPlayerIconRight() { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { rightPlayerIcon.setIcon(aiPlayerNormalIcon); } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon){ rightPlayerIcon.setIcon(aiPlayerHardIcon); } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { rightPlayerIcon.setIcon(aiPlayerEasyIcon); } } /** * Aktualisiert die Textfelder basierend auf den Icons */ private void updateTextFields() { // Für Linken Spieler if (leftPlayerIcon.getIcon() == humanPlayerIcon) { leftPlayerTextField.setText(leftPlayerNickname); } else if (leftPlayerIcon.getIcon() == aiPlayerEasyIcon){ leftPlayerTextField.setText("Einfach"); } else if (leftPlayerIcon.getIcon() == aiPlayerNormalIcon) { leftPlayerTextField.setText("Mittel"); } else if (leftPlayerIcon.getIcon() == aiPlayerHardIcon) { leftPlayerTextField.setText("Schwer"); } // Für Rechten Spieler if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon){ rightPlayerTextField.setText("Einfach"); } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { rightPlayerTextField.setText("Mittel"); } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { rightPlayerTextField.setText("Schwer"); } } }