start game stuff - both online and offline #13

Merged
lgc merged 24 commits from start-game into main 2024-12-13 16:27:43 +00:00
7 changed files with 140 additions and 80 deletions
Showing only changes of commit 84865e5468 - Show all commits

View File

@ -5,11 +5,20 @@ import java.awt.event.MouseEvent;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* TODO Klassenbeschreibung
*/
public class BoardDisplay extends JPanel { public class BoardDisplay extends JPanel {
private JButton[][] fields; private JButton[][] fields;
private int gridSize; private int gridSize;
private List <Ship> ships; private List <Ship> ships;
/**
* Konstruktor der startLocalGame.
* TODO fertig schreiben
* @param gridSize
* @param player
*/
public BoardDisplay(int gridSize, Player player) { public BoardDisplay(int gridSize, Player player) {
super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Splate super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Splate
this.fields = new JButton[gridSize][gridSize]; this.fields = new JButton[gridSize][gridSize];
@ -67,6 +76,14 @@ public class BoardDisplay extends JPanel {
// this.ships = new ArrayList<Ship>(); // this.ships = new ArrayList<Ship>();
} }
/**
* TODO Funktion beschreiben etc.
* @param ship
* @param o
* @param horizontal
* @param player
* @return
*/
private boolean setShip(Ship ship, Point o, boolean horizontal,Player player) { private boolean setShip(Ship ship, Point o, boolean horizontal,Player player) {
//boolean a = true; //boolean a = true;
if (placeable(ship, ship.getPosition(), horizontal)) { if (placeable(ship, ship.getPosition(), horizontal)) {
@ -83,6 +100,13 @@ public class BoardDisplay extends JPanel {
} }
} }
/**
* TODO Funktion beschreiben etc.
* @param ship
* @param o
* @param horizontal
* @return
*/
private boolean placeable(Ship ship,Point o, boolean horizontal) { private boolean placeable(Ship ship,Point o, boolean horizontal) {
if (horizontal && (o.getX() + ship.getSize() > gridSize)) { if (horizontal && (o.getX() + ship.getSize() > gridSize)) {
return false; return false;
@ -97,6 +121,12 @@ public class BoardDisplay extends JPanel {
Ship current = (Ship) e.getSource(); Ship current = (Ship) e.getSource();
} }
/**
* TODO Funktion beschreiben etc.
* @param field
* @param o
* @param player
*/
private void handleFieldClick(JButton field, Point o,Player player) { private void handleFieldClick(JButton field, Point o,Player player) {
// Beispiel: Setze ein Schiff bei einem Klick // Beispiel: Setze ein Schiff bei einem Klick
if (setShip(new Ship(3, "TestShip"), o, true,player)) { if (setShip(new Ship(3, "TestShip"), o, true,player)) {

View File

@ -8,6 +8,10 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.util.List; import java.util.List;
/**
* 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 { public class GameBoard extends JPanel {
// Funktionshilfen // Funktionshilfen
//int semesterCounter = 1; //TODO: ersetzen durch param von vorpanel //int semesterCounter = 1; //TODO: ersetzen durch param von vorpanel
@ -25,6 +29,13 @@ public class GameBoard extends JPanel {
JButton backButton = new JButton(backButtonIcon); JButton backButton = new JButton(backButtonIcon);
// Eigene ModulButtons // 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) { GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) {
JToggleButton leftPlayerModul1 = new JToggleButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester JToggleButton leftPlayerModul1 = new JToggleButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester
JToggleButton leftPlayerModul2 = new JToggleButton("Modul 2"); JToggleButton leftPlayerModul2 = new JToggleButton("Modul 2");
@ -38,6 +49,7 @@ public class GameBoard extends JPanel {
leftPlayerModul1, leftPlayerModul2, leftPlayerModul3, leftPlayerModul4, leftPlayerModul1, leftPlayerModul2, leftPlayerModul3, leftPlayerModul4,
leftPlayerModul5, leftPlayerModul6, leftPlayerModul7, leftPlayerModul5, leftPlayerModul6, leftPlayerModul7,
}; };
// Gegnerische ModulButtons // Gegnerische ModulButtons
JToggleButton rightPlayerModul1 = new JToggleButton("Modul 1"); JToggleButton rightPlayerModul1 = new JToggleButton("Modul 1");
JToggleButton rightPlayerModul2 = new JToggleButton("Modul 2"); JToggleButton rightPlayerModul2 = new JToggleButton("Modul 2");
@ -58,6 +70,11 @@ public class GameBoard extends JPanel {
backButton.addActionListener(e -> frame.showPanel("MainMenu")); backButton.addActionListener(e -> frame.showPanel("MainMenu"));
} }
/**
* TODO Funktion beschreiben etc.
* @param ships
* @param buttons
*/
private void updateButtonLabels(List<Ship> ships,JToggleButton[] buttons) { private void updateButtonLabels(List<Ship> ships,JToggleButton[] buttons) {
for(int i=0;i<buttons.length &&i<ships.size();i++ ) { for(int i=0;i<buttons.length &&i<ships.size();i++ ) {
Ship ship = ships.get(i); Ship ship = ships.get(i);
@ -65,6 +82,15 @@ public class GameBoard extends JPanel {
} }
} }
/**
* TODO Funktion beschreiben etc.
* @param frame
* @param semesterCounter
* @param p1
* @param p2
* @param leftButtons
* @param rightButtons
*/
public void buildPanel(MainFrame frame, int semesterCounter,Player p1,Player p2,JToggleButton[] leftButtons,JToggleButton[] rightButtons) { public void buildPanel(MainFrame frame, int semesterCounter,Player p1,Player p2,JToggleButton[] leftButtons,JToggleButton[] rightButtons) {
// Hauptlayout - BorderLayout für die Anordnung der Komponenten // Hauptlayout - BorderLayout für die Anordnung der Komponenten
setLayout(new BorderLayout()); setLayout(new BorderLayout());

View File

@ -92,7 +92,7 @@ public class JoinGame extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
String ipAddress = ipTextField.getText(); String ipAddress = ipTextField.getText();
if (ipAddress.equals("")) { if (ipAddress.isEmpty()) {
ipAddress = "0.0.0.0"; ipAddress = "0.0.0.0";
} }
String portText = portTextField.getText(); String portText = portTextField.getText();

View File

@ -1,6 +1,10 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
/**
* Der MainFrame dient als Hub und Übergreifendes Fenster auf dem alle weiteren Panel angezeigt werden.
* Dadurch werden keine weiteren Fenster geöffnet.
*/
public class MainFrame extends JFrame { public class MainFrame extends JFrame {
private CardLayout cardLayout; private CardLayout cardLayout;
@ -16,40 +20,33 @@ public class MainFrame extends JFrame {
int semesterCounter; int semesterCounter;
// ---------- // // ---------- //
/**
* Konstruktor von MainFrame.
* Ermöglicht es Panel anzuzeigen.
*/
public MainFrame() { public MainFrame() {
setTitle("Studium Versenken"); setTitle("Studium Versenken");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1500, 1000); setSize(1500, 1000);
setLocationRelativeTo(null); setLocationRelativeTo(null);
//JLabel backgroundLabel = new JLabel(new ImageIcon("graphics/mainmenubackground.png"));
// backgroundLabel.setBounds(0, 0, 1500, 1000);
// getContentPane().add(backgroundLabel);
// backgroundLabel.setOpaque(true);
// CardLayout und Hauptpanel erstellen // CardLayout und Hauptpanel erstellen
cardLayout = new CardLayout(); cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout); mainPanel = new JPanel(cardLayout);
// Verschiedene Panels erstellen und hinzufügen // Panels erstellen
MainMenuView mainMenuView = new MainMenuView(this); MainMenuView mainMenuView = new MainMenuView(this);
startLocalGame localGame = new startLocalGame(this); startLocalGame localGame = new startLocalGame(this);
//startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this);
startMultiplayerGame multiplayerGame = new startMultiplayerGame(this); startMultiplayerGame multiplayerGame = new startMultiplayerGame(this);
coinToss coinToss = new coinToss(this); coinToss coinToss = new coinToss(this);
Verbinden verbinden = new Verbinden(this); Verbinden verbinden = new Verbinden(this);
//JoinGame joinGame = new JoinGame(this,localMult);
//GameBoard gameBoard = new GameBoard(this, localMult);
// Panels hinzufügen
mainPanel.add(mainMenuView, "MainMenu"); mainPanel.add(mainMenuView, "MainMenu");
mainPanel.add(localGame, "LocalGame"); mainPanel.add(localGame, "LocalGame");
mainPanel.add(multiplayerGame, "MultiplayerGame"); mainPanel.add(multiplayerGame, "MultiplayerGame");
mainPanel.add(coinToss, "coinToss"); mainPanel.add(coinToss, "coinToss");
mainPanel.add(verbinden, "Verbinden"); mainPanel.add(verbinden, "Verbinden");
//mainPanel.add(joinGame, "JoinGame");
//mainPanel.add(gameBoard, "GameBoard");
// Hauptpanel in JFrame hinzufügen // Hauptpanel in JFrame hinzufügen
add(mainPanel); add(mainPanel);
@ -58,82 +55,60 @@ public class MainFrame extends JFrame {
cardLayout.show(mainPanel, "MainMenu"); cardLayout.show(mainPanel, "MainMenu");
} }
// Methode, um die Ansicht zu wechseln /**
* Methode, um die Ansicht zu wechseln
* @param panelName Name des anzuzeigenden Panels
*/
public void showPanel(String panelName) { public void showPanel(String panelName) {
cardLayout.show(mainPanel, panelName); cardLayout.show(mainPanel, panelName);
} }
// --- ShowPanel der startMultiplayerGame Klasse /**
* Spezifische ShowPanel-Funktion der startMultiplayerGame Klasse
* @param panelName Name des anzuzeigenden Panels
* @param num Hilfsvariable um abzugleichen, ob "Spiel erstellen" oder "Spiel beitreten" ausgewählt wurde
* @param playerType Spielertyp(HumanPlayer, AIEasy etc.)
* @param playerName Name des Spielers
*/
public void showPanelSMG(String panelName, int num, int playerType,String playerName) { public void showPanelSMG(String panelName, int num, int playerType,String playerName) {
this.localMult = num; this.localMult = num;
//if (!isPanelPresent(panelName)) { //TODO potentiell raus
JoinGame joinGame = new JoinGame(this, localMult, playerType, playerName); JoinGame joinGame = new JoinGame(this, localMult, playerType, playerName);
mainPanel.add(joinGame, panelName); mainPanel.add(joinGame, panelName);
mainPanel.revalidate(); // Refresh mainPanel.revalidate(); // Refresh
mainPanel.repaint(); mainPanel.repaint();
//}
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName); // Show the panel
} }
// --- ShowPanel der startLocalGameLoadingScreen Klasse (DURCH BACKEND AUFGERUFEN)
/**
* Spezifische ShowPanel der startLocalGameLoadingScreen Klasse (DURCH BACKEND AUFGERUFEN)
* @param panelName Name des anzuzeigenden Panels
* @param semesterCounter Ausgewähltes Semester
* @param p1 Erstes Spielerobjekt
* @param p2 Zweites Spielerobjekt
*/
public void showPanelSLG(String panelName,int semesterCounter, Player p1, Player p2) { public void showPanelSLG(String panelName,int semesterCounter, Player p1, Player p2) {
this.semesterCounter = semesterCounter; this.semesterCounter = semesterCounter;
//if (!isPanelPresent(panelName)) { //TODO potentiell raus
// gameBoard muss player übergeben bekommen
GameBoard gameBoard = new GameBoard(this, semesterCounter, p1, p2); GameBoard gameBoard = new GameBoard(this, semesterCounter, p1, p2);
//mainPanel.add(mainMenuView, "MainMenu");
mainPanel.add(gameBoard, panelName); mainPanel.add(gameBoard, panelName);
mainPanel.revalidate(); // Refresh mainPanel.revalidate();
mainPanel.repaint(); mainPanel.repaint();
//}
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName); // Show the panel
} }
// --- ShowPanel der startLocalGame Klasse /**
* Spezifische ShowPanel der startLocalGame Klasse
* @param panelName Name des anzuzeigenden Panels
* @param semesterCounter Ausgewähltes Semester
*/
public void showPanelSLGLS(String panelName,int semesterCounter) { public void showPanelSLGLS(String panelName,int semesterCounter) {
this.semesterCounter = semesterCounter; this.semesterCounter = semesterCounter;
// gameBoard muss player übergeben bekommen
startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this, semesterCounter); startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this, semesterCounter);
mainPanel.add(LocalGameLoadingScreen, panelName); mainPanel.add(LocalGameLoadingScreen, panelName);
mainPanel.revalidate(); // Refresh mainPanel.revalidate(); // Refresh
mainPanel.repaint(); mainPanel.repaint();
//}
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName); // Show the panel
} }
/* TODO ist dies unnötig?
private boolean isPanelPresent(String panelName) {
for (Component component : mainPanel.getComponents()) {
if (panelName.equals(mainPanel.getClientProperty("name"))) {
return true;
}
}
return false;
} */
// Methoden für übergabe von playern an GameBoard
/*
public void setPlayerData() {
this.semesterCounter = semesterCounter;
//if (!isPanelPresent(panelName)) { //TODO potentiell raus
// gameBoard muss player übergeben bekommen
GameBoard gameBoard = new GameBoard(this, semesterCounter);
mainPanel.add(gameBoard, panelName);
mainPanel.revalidate(); // Refresh
mainPanel.repaint();
}*/
/* Tut wohl gar nicht, weils nicht aufgerufen wird hoppla
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
MainFrame frame = new MainFrame();
frame.setVisible(true);
});
}
*/
} }

View File

@ -1,6 +1,9 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
/**
* Das Verbinden Panel dient als "Überblende", während im Backend das Spiel erstellt/ eine Verbindung hergestellt wird.
*/
public class Verbinden extends JPanel{ public class Verbinden extends JPanel{
ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png");
@ -9,11 +12,19 @@ public class Verbinden extends JPanel{
Font robotoFont = new Font("Roboto", Font.BOLD, 45); Font robotoFont = new Font("Roboto", Font.BOLD, 45);
/**
* Konstruktor der startLocalGame.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
*/
public Verbinden(MainFrame frame) { public Verbinden(MainFrame frame) {
setLayout(null); setLayout(null);
buildPanel(frame); buildPanel(frame);
} }
/**
* Baut Panel auf.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
*/
private void buildPanel(MainFrame frame) { private void buildPanel(MainFrame frame) {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
verbindenLabel.setFont(robotoFont.deriveFont(50f)); verbindenLabel.setFont(robotoFont.deriveFont(50f));

View File

@ -245,7 +245,10 @@ public class startLocalGame extends JPanel {
} }
// Hilfsfunktionen // Hilfsfunktionen
// Setzt das jeweils "nächste" Icon, wenn der leftPlayerLeftButton gedrückt wird.
/**
* Setzt das jeweils "nächste" Icon, wenn der leftPlayerLeftButton gedrückt wird.
*/
private void toggleLeftPlayerIconLeft() { private void toggleLeftPlayerIconLeft() {
if (leftPlayerIcon.getIcon() == humanPlayerIcon) { if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
leftPlayerIcon.setIcon(aiPlayerHardIcon); leftPlayerIcon.setIcon(aiPlayerHardIcon);
@ -258,7 +261,9 @@ public class startLocalGame extends JPanel {
} }
} }
// Setzt das jeweils "nächste" Icon, wenn der leftPlayerRightButton gedrückt wird. /**
* Setzt das jeweils "nächste" Icon, wenn der leftPlayerRightButton gedrückt wird.
*/
private void toggleLeftPlayerIconRight() { private void toggleLeftPlayerIconRight() {
if (leftPlayerIcon.getIcon() == humanPlayerIcon) { if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
leftPlayerIcon.setIcon(aiPlayerEasyIcon); leftPlayerIcon.setIcon(aiPlayerEasyIcon);
@ -271,7 +276,9 @@ public class startLocalGame extends JPanel {
} }
} }
// Setzt das jeweils "nächste" Icon, wenn der RightPlayerLeftButton gedrückt wird. /**
* Setzt das jeweils "nächste" Icon, wenn der RightPlayerLeftButton gedrückt wird.
*/
private void toggleRightPlayerIconLeft() { private void toggleRightPlayerIconLeft() {
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
rightPlayerIcon.setIcon(aiPlayerHardIcon); rightPlayerIcon.setIcon(aiPlayerHardIcon);
@ -282,7 +289,9 @@ public class startLocalGame extends JPanel {
} }
} }
// Setzt das jeweils "nächste" Icon, wenn der RightPlayerRightButton gedrückt wird. /**
* Setzt das jeweils "nächste" Icon, wenn der RightPlayerRightButton gedrückt wird.
*/
private void toggleRightPlayerIconRight() { private void toggleRightPlayerIconRight() {
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
rightPlayerIcon.setIcon(aiPlayerNormalIcon); rightPlayerIcon.setIcon(aiPlayerNormalIcon);
@ -293,7 +302,9 @@ public class startLocalGame extends JPanel {
} }
} }
// Aktualisiert die Textfelder basierend auf den Icons /**
* Aktualisiert die Textfelder basierend auf den Icons
*/
private void updateTextFields() { private void updateTextFields() {
// Für Linken Spieler // Für Linken Spieler
if (leftPlayerIcon.getIcon() == humanPlayerIcon) { if (leftPlayerIcon.getIcon() == humanPlayerIcon) {

View File

@ -178,7 +178,10 @@ public class startMultiplayerGame extends JPanel {
} }
// Hilfsfunktionen // Hilfsfunktionen
// Setzt das jeweils "nächste" Icon, wenn der PlayerLeftButton gedrückt wird.
/**
* Setzt das jeweils "nächste" Icon, wenn der PlayerLeftButton gedrückt wird.
*/
private void togglePlayerIconLeft() { private void togglePlayerIconLeft() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {
PlayerIcon.setIcon(aiPlayerHardIcon); PlayerIcon.setIcon(aiPlayerHardIcon);
@ -191,7 +194,9 @@ public class startMultiplayerGame extends JPanel {
} }
} }
// Setzt das jeweils "nächste" Icon, wenn der PlayerRightButton gedrückt wird. /**
* Setzt das jeweils "nächste" Icon, wenn der PlayerRightButton gedrückt wird.
*/
private void togglePlayerIconRight() { private void togglePlayerIconRight() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {
PlayerIcon.setIcon(aiPlayerEasyIcon); PlayerIcon.setIcon(aiPlayerEasyIcon);
@ -204,7 +209,9 @@ public class startMultiplayerGame extends JPanel {
} }
} }
// Aktualisiert die Textfelder basierend auf den Icons /**
* Aktualisiert die Textfelder basierend auf den Icons
*/
private void updateTextFields() { private void updateTextFields() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {
PlayerTextField.setText(PlayerNickname); PlayerTextField.setText(PlayerNickname);