programmieren-projekt/src/JoinGame.java

132 lines
5.0 KiB
Java

import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.InetSocketAddress;
/**
* Das JoinGame Panel dient zum setzten des Ports/IP-Adresse.
* Anschließend kann das Verbinden Panel gezeigt werden.
* @author Lucas Bronson
*/
public class JoinGame extends JPanel {
// Funktionshilfen
String standardPort = "51525";
// Grafiken
ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png");
// Labels
JLabel spielBeitretenLabel;
JLabel ipLabel = new JLabel("IP-Adresse");
JLabel portLabel = new JLabel("Port");
// Textfelder
JTextField ipTextField = new JTextField(20);
JTextField portTextField = new JTextField(20);
// Buttons
JButton losButton = new JButton("Los!");
JButton backButton = new JButton(backButtonIcon);
// Font
Font robotoFont = new Font("Roboto", Font.BOLD, 45);
/**
* Erstellt mittels Funktionsaufrufen das Panel.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt.
* @param playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt.
* @param playerName Name des Spielers
* @author Lucas Bronson, Joshua Kuklok
*/
public JoinGame(MainFrame frame,int g,int playerType,String playerName, int semesterCounter) {
setLayout(null);
buildPanel(frame,g,playerType,playerName, semesterCounter);
}
/**
* Erstellt das Panel.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt.
* @param playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt.
* @param playerName Name des Spielers
* @author Lucas Bronson, Joshua Kuklok
*/
private void buildPanel(MainFrame frame,int g,int playerType,String playerName, int semesterCounter) {
System.out.println("semesterzahl in JoinGame" + semesterCounter);
if(g==1){
spielBeitretenLabel= new JLabel("Spiel beitreten");
}else{
spielBeitretenLabel= new JLabel("Spiel erstellen");
}
spielBeitretenLabel.setBounds(20,20,700, 100);
losButton.setBounds(320, 225, 100, 50);
backButton.setBounds(1380, 20, 80, 80);
portLabel.setBounds(50, 200, 200, 30);
if(g==1) { // Wenn man Spiel erstellen will, werden IP-Felder nicht angezeigt.
ipLabel.setBounds(50, 125, 200, 30);
ipTextField.setBounds(50, 150, 250, 50);
}
portTextField.setBounds(50, 225, 250, 50);
portTextField.setText(standardPort);
spielBeitretenLabel.setFont(robotoFont.deriveFont(50f));
add(spielBeitretenLabel);
add(ipLabel);
add(portLabel);
add(losButton);
add(ipTextField);
add(portTextField);
add(backButton);
// ActionListener für Buttons.
// Um in das MultiplayerGame zurückzuwechseln.
backButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.showPanel("MultiplayerGame");
}
});
// Um das Verbinden Panel anzuzeigen und Daten an Backend weiterzureichen.
losButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String ipAddress = ipTextField.getText();
if (ipAddress.isEmpty()) {
ipAddress = "0.0.0.0";
}
System.out.println(portTextField.getText());
String portText = portTextField.getText();
int port = Integer.parseInt(portText);
InetSocketAddress address = new InetSocketAddress(ipAddress, port);
frame.showPanel("Verbinden");
try {
if(playerType == 0) {
GameController.startOnlineGame(HumanPlayer.class, playerName, address,GameController.semesterToBoardSize(semesterCounter));
} else if(playerType == 1) {
GameController.startOnlineGame(SpecificAiPlayerEasy.class, playerName, address,GameController.semesterToBoardSize(semesterCounter));
} else if (playerType == 2) {
GameController.startOnlineGame(SpecificAiPlayerMedium.class, playerName, address,GameController.semesterToBoardSize(semesterCounter));
} else if (playerType == 3) {
GameController.startOnlineGame(SpecificAiPlayerHard.class, playerName, address,GameController.semesterToBoardSize(semesterCounter));
}
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
});
}
}