programmieren-projekt/src/startMultiplayerGame.java

235 lines
9.0 KiB
Java

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");
}
}
}