lucasjoshua #20

Merged
lgc merged 14 commits from lucasjoshua into main 2024-12-20 16:08:05 +00:00
24 changed files with 334 additions and 287 deletions

BIN
Sound/hit.mp3 Normal file

Binary file not shown.

BIN
Sound/loosescreenWAH.mp3 Normal file

Binary file not shown.

BIN
Sound/plop.mp3 Normal file

Binary file not shown.

BIN
Sound/shipdestroyed.mp3 Normal file

Binary file not shown.

View File

@ -6,13 +6,12 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* TODO Klassenbeschreibung * Dient dem Aufbau der Matrix (Spielfeld) und füllt diese mit Funktion
* reines im frontend zeichnen für preview * @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
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;//brauchen wir nicht mehr
private Ship currentShip; private Ship currentShip;
private Player player; private Player player;
private boolean horizontal = false; private boolean horizontal = false;
@ -20,31 +19,40 @@ public class BoardDisplay extends JPanel {
private boolean enemyBoard; private boolean enemyBoard;
private Point mousePosition; private Point mousePosition;
/**
* Fügt Buttons zu Liste hinzu und aktualisiert Feld durch Aufruf von paintFields
* @param button
* @author Joshua Kuklok
*/
public void addShipButton(ShipButton button) { public void addShipButton(ShipButton button) {
shipButtonList.add(button); shipButtonList.add(button);
paintFields(); paintFields();
} }
/**
* Gibt currentShip zurück
* @return currentShip
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/
public Ship getCurrentShip() { public Ship getCurrentShip() {
return currentShip; return currentShip;
} }
/** /**
* Konstruktor der startLocalGame. * Konstruktor der startLocalGame.
* TODO fertig schreiben * @param gridSize Die Größe des Spielfelds
* @param gridSize * @param player Der Spieler
* @param player * @author Lucas Bronson
*/ */
public BoardDisplay(int gridSize, Player player, boolean enemyBoard) { public BoardDisplay(int gridSize, Player player, boolean enemyBoard) {
super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Spalte super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Spalte
this.fields = new JButton[gridSize][gridSize]; this.fields = new JButton[gridSize][gridSize];
//this.ships = new ArrayList<>();
this.shipButtonList = new ArrayList<>(); this.shipButtonList = new ArrayList<>();
this.player = player; this.player = player;
this.gridSize = gridSize; this.gridSize = gridSize;
this.enemyBoard = enemyBoard; this.enemyBoard = enemyBoard;
System.out.println("Name in Boarddisplay: " + player.getName());//Testausgabe
// Erstellung von Spielfeld // Erstellung vom Spielfeld
for (int i = 0; i <= gridSize; i++) { for (int i = 0; i <= gridSize; i++) {
for (int j = 0; j <= gridSize; j++) { for (int j = 0; j <= gridSize; j++) {
final int x = j - 1; // Temporäre Variable final int x = j - 1; // Temporäre Variable
@ -54,7 +62,7 @@ public class BoardDisplay extends JPanel {
} else if (i == 0) { } else if (i == 0) {
JLabel colLabel = new JLabel(String.valueOf(j)); JLabel colLabel = new JLabel(String.valueOf(j));
colLabel.setHorizontalAlignment(SwingConstants.CENTER); colLabel.setHorizontalAlignment(SwingConstants.CENTER);
colLabel.setFont(new Font("Arial", Font.BOLD, 14)); colLabel.setFont(new Font("Roboto", Font.BOLD, 14));
add(colLabel); add(colLabel);
} else if (j == 0) { } else if (j == 0) {
JLabel rowLabel = new JLabel(String.valueOf((char) ('A' + i - 1))); JLabel rowLabel = new JLabel(String.valueOf((char) ('A' + i - 1)));
@ -69,32 +77,24 @@ public class BoardDisplay extends JPanel {
field.setBorderPainted(true); field.setBorderPainted(true);
fields[x][y] = field; fields[x][y] = field;
add(field); add(field);
//field.addMouseListener(new MouseAdapter() {
// @Override
//public void mouseClicked(MouseEvent e) {
// if (SwingUtilities.isRightMouseButton(e)) {
// handleFieldClick(field);
// }
// }
//@Override // Um Mausinteraktionen zu ermöglichen (Rechts/- Linksklick, Hover)
//public void mouseExited(MouseEvent e) {
// field.setBackground(Color.LIGHT_GRAY);
// }
// });
field.addMouseListener(new MouseAdapter() { field.addMouseListener(new MouseAdapter() {
// Um beim "Hovern" Position zu setzten und weiterzugeben.
@Override @Override
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
mousePosition = new Point(x, y); mousePosition = new Point(x, y);
paintFields(); paintFields();
} }
// Um nach "wegbewegen" der Maus wieder zu entfärben
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
paintFields(); paintFields();
} }
// Um Schiffe zu rotieren/platzieren
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) { if (SwingUtilities.isRightMouseButton(e)) {
@ -102,19 +102,20 @@ public class BoardDisplay extends JPanel {
} else if (SwingUtilities.isLeftMouseButton(e)) { } else if (SwingUtilities.isLeftMouseButton(e)) {
Point o = new Point(x, y); Point o = new Point(x, y);
handleFieldClick(o); handleFieldClick(o);
SoundHandler.playSound("plop");
} }
} }
}); });
} }
} }
} }
// this.ships = new ArrayList<Ship>();
} }
/** /**
* Aktuelles Schiff auswaehlen * Aktuelles Schiff auswählen
* @param ship * @param ship Schiff zum Auswählen
* @author Lucas Bronson, Joshua Kuklok
*/ */
public void selectCurrentShip(Ship ship) { public void selectCurrentShip(Ship ship) {
this.currentShip = ship; this.currentShip = ship;
@ -122,11 +123,11 @@ public class BoardDisplay extends JPanel {
} }
/** /**
* Zuruecksetzen von aktuellem Schiff und allen Schiffen des Spielers * Zurücksetzen von aktuellem Schiff und allen Schiffen des Spielers.
* Danach blau faerben des Spielfeldes * Danach blau färben des Spielfeldes
* @author Lucas Bronson, Joshua Kuklok
*/ */
public void resetAllShips() { public void resetAllShips() {
//ships.clear();
this.currentShip = null; this.currentShip = null;
for (Ship ship : player.getBoard().getShips()) { for (Ship ship : player.getBoard().getShips()) {
ship.resetPosition(); ship.resetPosition();
@ -136,6 +137,7 @@ public class BoardDisplay extends JPanel {
/** /**
* Wechselt die Platzierungsrichtung zwischen horizontal und vertikal. * Wechselt die Platzierungsrichtung zwischen horizontal und vertikal.
* @author Lucas Bronson, Joshua Kuklok
*/ */
private void togglePlacementDirection() { private void togglePlacementDirection() {
horizontal = !horizontal; horizontal = !horizontal;
@ -147,6 +149,7 @@ public class BoardDisplay extends JPanel {
/** /**
* Handhabt das Platzieren eines Schiffs auf dem Spielfeld. * Handhabt das Platzieren eines Schiffs auf dem Spielfeld.
* @param o Die Koordinaten des Klicks. * @param o Die Koordinaten des Klicks.
* @author Lucas Bronson, Luca Conte
*/ */
private void handleFieldClick(Point o) { private void handleFieldClick(Point o) {
System.out.println("CLICK " + o); System.out.println("CLICK " + o);
@ -157,20 +160,14 @@ public class BoardDisplay extends JPanel {
this.player.enemy.shoot(o); this.player.enemy.shoot(o);
} }
paintFields(); paintFields();
//if(this.currentShip.isPlaced()){
// this.currentShip.
// };
// Beispiel: Setze ein Schiff bei einem Klick
//if (setShip(new Ship(3, "TestShip"), o, true,player)) {
// field.setBackground(Color.BLUE); // Visualisiere Schiff
//}
} }
/** /**
* Faerbt das Spielfeld blau, ueberprueft ob das aktuelle Schiff null ist * Färbt das Spielfeld blau, überprüft, ob das aktuelle Schiff null ist.
* Faerbt eine Preview in das Spielfeld ein ob Schiff setzen moeglich ist * Färbt eine Preview in das Spielfeld ein, ob Schiff setzen möglich ist
* Schiffe die gesetzt wurden werden grau gefaerbt * Schiffe die gesetzt wurden, werden grau gefärbt
* Aufrufen von refreshButtonState um zu zeigen ob Button drueckbar ist * Aufrufen von refreshButtonState um zu zeigen, ob Button drückbar ist
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
public void paintFields() { public void paintFields() {
List<Point> test=new ArrayList<>(); List<Point> test=new ArrayList<>();
@ -222,13 +219,16 @@ public class BoardDisplay extends JPanel {
switch (hit.getType()) { switch (hit.getType()) {
case HIT: case HIT:
fields[i][j].setBackground(Color.ORANGE); fields[i][j].setBackground(Color.ORANGE);
//SoundHandler.playSound("hit");
break; break;
case SUNK: case SUNK:
//SoundHandler.playSound("destroyed");
case VICTORY: case VICTORY:
fields[i][j].setBackground(Color.RED); fields[i][j].setBackground(Color.RED);
break; break;
case MISS: case MISS:
if (this.enemyBoard) { if (this.enemyBoard) {
//SoundHandler.playSound("miss");
fields[i][j].setBackground(Color.BLUE); fields[i][j].setBackground(Color.BLUE);
} else { } else {
fields[i][j].setBackground(Color.CYAN); fields[i][j].setBackground(Color.CYAN);
@ -243,10 +243,11 @@ public class BoardDisplay extends JPanel {
} }
} }
/**
* Ruft paintFields auf, um Felder zu aktualisieren
* @author Luca Conte
*/
public void refresh() { public void refresh() {
paintFields(); paintFields();
} }
} }

View File

@ -2,13 +2,12 @@ import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
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. * Das GameBoard dient als Panel, in dem das tatsächliche Spiel stattfindet.
* Der Benutzer kann hier seine Schiffe platzieren, das Spiel starten etc. * Der Benutzer kann hier seine Schiffe platzieren, das Spiel starten etc.
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
public class GameBoard extends JPanel { public class GameBoard extends JPanel {
@ -38,8 +37,8 @@ public class GameBoard extends JPanel {
JLabel frameTitle = new JLabel("GameBoard"); JLabel frameTitle = new JLabel("GameBoard");
JLabel kontextText = new JLabel(kT1); JLabel kontextText = new JLabel(kT1);
JButton backButton = new JButton(backButtonIcon); // Buttons
// Eigene ModulButtons JButton giveUpButton = new JButton("Aufgeben");
/** /**
* Konstruktor von GameBoard. * Konstruktor von GameBoard.
@ -47,6 +46,7 @@ public class GameBoard extends JPanel {
* @param semesterCounter Ausgewähltes Semester * @param semesterCounter Ausgewähltes Semester
* @param p1 Erstes Spielerobjekt * @param p1 Erstes Spielerobjekt
* @param p2 Zweites Spielerobjekt * @param p2 Zweites Spielerobjekt
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) { GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) {
this.p1 = p1; this.p1 = p1;
@ -54,66 +54,45 @@ public class GameBoard extends JPanel {
buildPanel(frame, semesterCounter); buildPanel(frame, semesterCounter);
List<Ship> shipsP1 =p1.getBoard().getShips(); List<Ship> shipsP1 =p1.getBoard().getShips();
List<Ship> shipsP2 =p2.getBoard().getShips(); List<Ship> shipsP2 =p2.getBoard().getShips();
backButton.addActionListener(e -> frame.showPanel("MainMenu"));
}
/* TODO löschen falls nicht gebraucht
private void updateButtonLabels(List<Ship> ships,JToggleButton[] buttons) { giveUpButton.addActionListener(new ActionListener() {
for(int i=0;i<buttons.length &&i<ships.size();i++ ) { @Override
Ship ship = ships.get(i); public void actionPerformed(ActionEvent e) {
buttons[i].setText(ship.getName()); // TODO Hier könnte Ihr Backend Code stehen
frame.showPanel("MainMenu");
} }
});
} }
*/
// Timer für pulsierenden Effekt // Timer für pulsierenden SchwarzGrau-Effekt
Timer timer = new Timer(10, new ActionListener() { Timer timer = new Timer(10, new ActionListener() {
private int grayValue = 50; // Start-Grauwert (0 = Schwarz, 255 = Weiß) // Start-Grauwert (0 = Schwarz, 255 = Weiß)
private boolean increasing = false; // Richtung des Pulsierens private int value = 50;
private boolean increasing = false;
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
// Grauwert aktualisieren kontextText.setForeground(new Color(value, value, value));
kontextText.setForeground(new Color(grayValue, grayValue, grayValue));
// Grauwert erhöhen oder verringern
if (increasing) { if (increasing) {
grayValue++; value++;
if (grayValue >= 90) { if (value >= 90) {
increasing = false; // Richtung ändern increasing = false;
} }
} else { } else {
grayValue--; value--;
if (grayValue <= 0) { if (value <= 0) {
increasing = true; // Richtung ändern increasing = true;
} }
} }
} }
}); });
/*
// Timer für pulsierenden Disco-Effekt
Timer timer = new Timer(50, new ActionListener() {
private float hue = 0; // Farbton-Wert für HSB-Farbmodell
@Override
public void actionPerformed(ActionEvent e) {
// Farbe basierend auf dem Farbton-Wert berechnen
Color pulsierendeFarbe = Color.getHSBColor(hue, 0.8f, 0.8f); // Sättigung und Helligkeit fix
kontextText.setForeground(pulsierendeFarbe);
// Farbton leicht verändern (Zyklus zwischen 0 und 1)
hue += 0.01f;
if (hue > 1) {
hue = 0;
}
}
});*/
/** /**
* TODO Funktion beschreiben etc. * Baut das grundlegende Spielboard
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @param semesterCounter Ausgewähltes Semester * @param semesterCounter Ausgewähltes Semester
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
public void buildPanel(MainFrame frame, int semesterCounter) { public void buildPanel(MainFrame frame, int semesterCounter) {
// Hauptlayout - BorderLayout für die Anordnung der Komponenten // Hauptlayout - BorderLayout für die Anordnung der Komponenten
@ -130,7 +109,7 @@ public class GameBoard extends JPanel {
headerPanel.setLayout(new BorderLayout()); headerPanel.setLayout(new BorderLayout());
headerPanel.add(kontextText, BorderLayout.WEST); headerPanel.add(kontextText, BorderLayout.WEST);
kontextText.setFont(new Font("Roboto", Font.BOLD, 30)); //TODO setFont fixen kontextText.setFont(new Font("Roboto", Font.BOLD, 30)); //TODO setFont fixen
headerPanel.add(backButton, BorderLayout.EAST); headerPanel.add(giveUpButton, BorderLayout.EAST);
JPanel leftButtonsPanel = new JPanel(); JPanel leftButtonsPanel = new JPanel();
leftButtonsPanel.setLayout(new GridLayout(7, 1)); // 6 Buttons untereinander leftButtonsPanel.setLayout(new GridLayout(7, 1)); // 6 Buttons untereinander
@ -172,12 +151,17 @@ public class GameBoard extends JPanel {
ownBoardPanel.resetAllShips(); ownBoardPanel.resetAllShips();
} }
}); });
// TODO buttons erst disablen wenn alle Schiffe platziert sind
// Um Bereit-Meldung and Backend zu geben, kontextText zu setzten und ready/reset Button zu deaktivieren
readyButton.addActionListener(new ActionListener() { readyButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
kontextText.setText(kT2); kontextText.setText(kT2);
p1.ready(); p1.ready();
if(true) {
readyButton.setEnabled(false);
resetButton.setEnabled(false);
}
} }
}); });
@ -211,13 +195,13 @@ public class GameBoard extends JPanel {
add(leftButtonsPanel, BorderLayout.WEST); add(leftButtonsPanel, BorderLayout.WEST);
add(rightButtonsPanel, BorderLayout.EAST); add(rightButtonsPanel, BorderLayout.EAST);
add(headerPanel, BorderLayout.NORTH); add(headerPanel, BorderLayout.NORTH);
//add(centerPanel, BorderLayout.CENTER);
add(namesAndBoardsPanel, BorderLayout.CENTER); add(namesAndBoardsPanel, BorderLayout.CENTER);
timer.start(); timer.start();
} }
/** /**
* * Aktualisiert Zustand(kontextText) je nach Zug
* @author Luca Conte
*/ */
public void refresh() { public void refresh() {
if (this.p1.myTurn) { if (this.p1.myTurn) {

View File

@ -1,21 +1,26 @@
/**
* Hauptklasse über die der MainFrame gestartet wird
* @author Lucas Bronson, Ole Wachtel, Joshua Kuklok
*/
public class HalloSchiffeVersenken { public class HalloSchiffeVersenken {
/**
* Erstellt und setzt den Mainframe
* @param args Argumente an Main durch Konsole etc.
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException { public static void main(String[] args) throws InterruptedException {
MainFrame mf = new MainFrame(); MainFrame mf = new MainFrame();
mf.setVisible(true); mf.setVisible(true);
System.out.println("HelloSchiffeVersenekn");
System.out.println("sound");
SoundHandler.playSound("hit");
Thread.sleep(10000);
SoundHandler.setSoundOn(false);
System.out.println("sound off");
SoundHandler.playSound("hit");
} }
} }
/*
*TODO
* Alle Textfonts anpassen
* SOUND interrupt?
* BACKEND aufruf bei aufgeben
* check bevor ready ob alle schiffe platziert?
* testcode rausnehmen
* FidgetButton als surprise (button während spiels, der zufällig farbe wechseln kann und sounds abspielt)
*/

View File

@ -8,8 +8,10 @@ import java.net.InetSocketAddress;
/** /**
* Das JoinGame Panel dient zum setzten des Ports/IP-Adresse. * Das JoinGame Panel dient zum setzten des Ports/IP-Adresse.
* Anschließend kann das Verbinden Panel gezeigt werden. * Anschließend kann das Verbinden Panel gezeigt werden.
* @author Lucas Bronson
*/ */
public class JoinGame extends JPanel { public class JoinGame extends JPanel {
// Grafiken // Grafiken
ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png");
@ -35,6 +37,7 @@ public class JoinGame extends JPanel {
* @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt. * @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 playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt.
* @param playerName Name des Spielers * @param playerName Name des Spielers
* @author Lucas Bronson, Joshua Kuklok
*/ */
public JoinGame(MainFrame frame,int g,int playerType,String playerName) { public JoinGame(MainFrame frame,int g,int playerType,String playerName) {
setLayout(null); setLayout(null);
@ -47,6 +50,7 @@ public class JoinGame extends JPanel {
* @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt. * @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 playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt.
* @param playerName Name des Spielers * @param playerName Name des Spielers
* @author Lucas Bronson, Joshua Kuklok
*/ */
private void buildPanel(MainFrame frame,int g,int playerType,String playerName) { private void buildPanel(MainFrame frame,int g,int playerType,String playerName) {
if(g==1){ if(g==1){
@ -61,7 +65,7 @@ public class JoinGame extends JPanel {
portLabel.setBounds(50, 200, 200, 30); portLabel.setBounds(50, 200, 200, 30);
if(g==1) { //Wenn man Spiel erstellen will werden IP-Felder nicht angezeigt. if(g==1) { // Wenn man Spiel erstellen will, werden IP-Felder nicht angezeigt.
ipLabel.setBounds(50, 125, 200, 30); ipLabel.setBounds(50, 125, 200, 30);
ipTextField.setBounds(50, 150, 250, 50); ipTextField.setBounds(50, 150, 250, 50);
} }
@ -77,7 +81,8 @@ public class JoinGame extends JPanel {
add(ipTextField); add(ipTextField);
add(portTextField); add(portTextField);
add(backButton); add(backButton);
// ActionListener für Buttons
// ActionListener für Buttons.
// Um in das MultiplayerGame zurückzuwechseln. // Um in das MultiplayerGame zurückzuwechseln.
backButton.addActionListener(new ActionListener() { backButton.addActionListener(new ActionListener() {
@Override @Override

34
src/LooseScreen.java Normal file
View File

@ -0,0 +1,34 @@
import java.awt.*;
import javax.swing.*;
/**
* Klasse für Erstellung von looseScreen Objekten
* Dient zur Anzeige das ein Spiel verloren wurde
*/
public class LooseScreen extends JPanel {
JLabel looseLabel = new JLabel("Du hast Verloren");
JButton okButton = new JButton("Zurück zum Hauptmenü");
Font robotoFont = new Font("Roboto", Font.BOLD, 45);
/**
* Konstruktor der LooseScreen Klasse
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
public LooseScreen(MainFrame frame) {
setLayout(new BorderLayout());
buildPanel(frame);
}
/**
* Panel bauen/Objekte hinzufügen
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
public void buildPanel(MainFrame frame) {
add(looseLabel);
okButton.setBounds(650,525,200,50);
looseLabel.setBounds(500,450,500,50);
looseLabel.setFont(robotoFont);
}
}

View File

@ -1,11 +1,10 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
//TODO Generell button ausblenden anpassen
/** /**
* Der MainFrame dient als Hub und Übergreifendes Fenster auf dem alle weiteren Panel angezeigt werden. * Der MainFrame dient als Hub und Übergreifendes Fenster auf dem alle weiteren Panel angezeigt werden.
* Dadurch werden keine weiteren Fenster geöffnet. * Dadurch werden keine weiteren Fenster geöffnet.
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
public class MainFrame extends JFrame { public class MainFrame extends JFrame {
@ -21,11 +20,13 @@ public class MainFrame extends JFrame {
// Von startLocalGameLoadingScreen an GameBoard // Von startLocalGameLoadingScreen an GameBoard
int semesterCounter; int semesterCounter;
// ---------- // // ---------- //
private GameBoard gameBoard; private GameBoard gameBoard;
/** /**
* Konstruktor von MainFrame. * Konstruktor von MainFrame.
* Ermöglicht es Panel anzuzeigen. * Ermöglicht es Panel anzuzeigen.
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
public MainFrame() { public MainFrame() {
@ -53,6 +54,7 @@ public class MainFrame extends JFrame {
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(winLooseScreen, "WinLooseScreen");
// Hauptpanel in JFrame hinzufügen // Hauptpanel in JFrame hinzufügen
add(mainPanel); add(mainPanel);
@ -64,6 +66,7 @@ public class MainFrame extends JFrame {
/** /**
* Methode, um die Ansicht zu wechseln * Methode, um die Ansicht zu wechseln
* @param panelName Name des anzuzeigenden Panels * @param panelName Name des anzuzeigenden Panels
* @author Joshua Kuklok
*/ */
public void showPanel(String panelName) { public void showPanel(String panelName) {
cardLayout.show(mainPanel, panelName); cardLayout.show(mainPanel, panelName);
@ -75,15 +78,16 @@ public class MainFrame extends JFrame {
* @param num Hilfsvariable um abzugleichen, ob "Spiel erstellen" oder "Spiel beitreten" ausgewählt wurde * @param num Hilfsvariable um abzugleichen, ob "Spiel erstellen" oder "Spiel beitreten" ausgewählt wurde
* @param playerType Spielertyp(HumanPlayer, AIEasy etc.) * @param playerType Spielertyp(HumanPlayer, AIEasy etc.)
* @param playerName Name des Spielers * @param playerName Name des Spielers
* @author Lucas Bronson, Joshua Kuklok
*/ */
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;
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();
mainPanel.repaint(); mainPanel.repaint();
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName);
} }
/** /**
@ -92,6 +96,7 @@ public class MainFrame extends JFrame {
* @param semesterCounter Ausgewähltes Semester * @param semesterCounter Ausgewähltes Semester
* @param p1 Erstes Spielerobjekt * @param p1 Erstes Spielerobjekt
* @param p2 Zweites Spielerobjekt * @param p2 Zweites Spielerobjekt
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/ */
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;
@ -100,24 +105,55 @@ public class MainFrame extends JFrame {
mainPanel.add(gameBoard, panelName); mainPanel.add(gameBoard, panelName);
mainPanel.revalidate(); mainPanel.revalidate();
mainPanel.repaint(); mainPanel.repaint();
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName); // Panel anzeigen
} }
/** /**
* Spezifische ShowPanel der startLocalGame Klasse * Spezifische ShowPanel der startLocalGame Klasse
* @param panelName Name des anzuzeigenden Panels * @param panelName Name des anzuzeigenden Panels
* @param semesterCounter Ausgewähltes Semester * @param semesterCounter Ausgewähltes Semester
* @author Joshua Kuklok
*/ */
public void showPanelSLGLS(String panelName,int semesterCounter) { public void showPanelSLGLS(String panelName,int semesterCounter) {
this.semesterCounter = semesterCounter; this.semesterCounter = semesterCounter;
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();
mainPanel.repaint(); mainPanel.repaint();
cardLayout.show(mainPanel, panelName); // Show the panel cardLayout.show(mainPanel, panelName); // Panel anzeigen
} }
/**
* Spezifische ShowPanel für WinScreen Klasse
* @param panelName Name des anzuzeigenden Panels
* @author Lucas Bronson
*/
public void showPanelWin(String panelName){
WinScreen winScreen = new WinScreen(this);
mainPanel.add(winScreen, panelName);
mainPanel.revalidate();
mainPanel.repaint();
cardLayout.show(mainPanel, panelName);
}
/**
* Spezifische ShowPanel für LooseScreen Klasse
* @param panelName Name des anzuzeigenden Panels
* @author Lucas Bronson
*/
public void showPanelLoose(String panelName){
LooseScreen looseScreen = new LooseScreen(this);
mainPanel.add(looseScreen,panelName);
mainPanel.revalidate();
mainPanel.repaint();
cardLayout.show(mainPanel, panelName);
}
/**
* Aktualisiert das Spielfeld (kontextText)
* @author Luca Conte
*/
public void refreshGameBoard() { public void refreshGameBoard() {
this.gameBoard.refresh(); this.gameBoard.refresh();
} }

View File

@ -1,35 +0,0 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MainMenuController implements ActionListener {
private MainMenuView view;
private MainMenuModel model;
public MainMenuController(MainMenuModel model, MainMenuView view) {
this.view = view;
this.model = model;
//this.view.getLocalButton().addActionListener(this);
//this.view.getMultiButton().addActionListener(this);
// this.view.getSoundButton().addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
//if (e.getSource() == view.getMultiButton()) {
// model.setGameMode("Multiplayer");
// MultiMenuModel multiModel = new MultiMenuModel();
// MultiMenuView multiView = new MultiMenuView();
// MultiMenuController multiMenuController = new MultiMenuController(multiModel, multiView);
// view.addPanel(multiView.getMultiPanel(), "MultiMenu");
// view.showPanel("MultiMenu");
// }else if (e.getSource() == view.getSoundButton()) {
// view.toggleMute();
// }else if(e.getSource() == view.getLocalButton()) {
model.setGameMode("LocalGame");
//startLocalGame localGame = new startLocalGame();
// view.addPanel(localGame.getLocalPanel(), "LocalMenu");
// view.showPanel("LocalMenu");
}
}
//}

View File

@ -1,11 +0,0 @@
public class MainMenuModel {
private String gameMode;
public void setGameMode(String mode) {
this.gameMode = mode;
}
public String getGameMode() {
return gameMode;
}
}

View File

@ -1,9 +1,13 @@
import java.awt.*; import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.*; import javax.swing.*;
/**
* Klasse zum Erstellen von MainMenu Objekten
* Dient als Hauptmenü für die Anwendung
* @author Lucas Bronson
*/
public class MainMenuView extends JPanel { public class MainMenuView extends JPanel {
private JLabel titelLabel = new JLabel("Studium versenken"); private JLabel titelLabel = new JLabel("Studium versenken");
@ -15,11 +19,21 @@ public class MainMenuView extends JPanel {
private ImageIcon soundIcon = new ImageIcon("graphics/sound button.png"); private ImageIcon soundIcon = new ImageIcon("graphics/sound button.png");
private ImageIcon muteIcon = new ImageIcon("graphics/sound button muted.png"); private ImageIcon muteIcon = new ImageIcon("graphics/sound button muted.png");
/**
* Konstruktor der MainMenuView Klasse
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
public MainMenuView(MainFrame frame) { public MainMenuView(MainFrame frame) {
setLayout(null); setLayout(null);
buildPanel(frame); buildPanel(frame);
} }
/**
* Methode zum Füllen des Panels, Objekte werden dem frame hinzugefügt
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
private void buildPanel(MainFrame frame) { private void buildPanel(MainFrame frame) {
lokalButton.setBounds(200, 200, 500, 500); lokalButton.setBounds(200, 200, 500, 500);
multiButton.setBounds(800, 200, 500, 500); multiButton.setBounds(800, 200, 500, 500);
@ -36,7 +50,7 @@ public class MainMenuView extends JPanel {
add(multiButton); add(multiButton);
add(soundButton); add(soundButton);
// Event Listener für Buttons // ActionListener um vom Hauptmenü zum LocalGame Menü zu wechseln
lokalButton.addActionListener(new ActionListener() { lokalButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -45,6 +59,7 @@ public class MainMenuView extends JPanel {
} }
}); });
// ActionListener um vom Hauptmenü zum MultiPlayerGame Menü zu wechseln
multiButton.addActionListener(new ActionListener() { multiButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -53,6 +68,7 @@ public class MainMenuView extends JPanel {
} }
}); });
//Aufruf von toggleMute, falls der soundButton geklickt wird
soundButton.addActionListener(new ActionListener() { soundButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -62,11 +78,18 @@ public class MainMenuView extends JPanel {
}); });
} }
/**
* Setzt Sound auf Stumm/Laut und ändert Grafik, sodass
* der aktuelle Stand der Grafik entspricht
* @author Lucas Bronson, Joshua Kuklok
*/
private void toggleMute() { private void toggleMute() {
if (soundButton.getIcon() == soundIcon) { if (soundButton.getIcon() == soundIcon) {
soundButton.setIcon(muteIcon); soundButton.setIcon(muteIcon);
SoundHandler.setSoundOn(false);
} else { } else {
soundButton.setIcon(soundIcon); soundButton.setIcon(soundIcon);
SoundHandler.setSoundOn(true);
} }
} }
} }

View File

@ -1,22 +0,0 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MultiMenuController implements ActionListener {
private MultiMenuView view;
private MultiMenuModel model;
public MultiMenuController(MultiMenuModel model, MultiMenuView view) {
this.view = view;
this.model = model;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == view.getPlayerLeftButton()){
view.togglePlayerIcon();
}else if(e.getSource() == view.getPlayerRightButton()){
view.togglePlayerIcon();
}
}
}

View File

@ -1,11 +0,0 @@
public class MultiMenuModel {
private String gameMode;
public void setGameMode(String mode) {
this.gameMode = mode;
}
public String getGameMode() {
return gameMode;
}
}

View File

@ -1,83 +0,0 @@
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.*;
public class MultiMenuView {
int semesterCounter = 1;
private JPanel multiPanel = new JPanel(null);
private ImageIcon humanPlayerIcon = new ImageIcon("graphics/humanPlayer.png");
private ImageIcon aiPlayerIcon = new ImageIcon("graphics/aiPlayer.png");
JButton PlayerLeftButton = new JButton("<-");
JButton PlayerRightButton = new JButton("->");
JButton semesterUpButton = new JButton("^");
JButton semesterDownButton = new JButton("v");
JLabel semesterLabel = new JLabel("Semester");
private JLabel titelLabel = new JLabel("Multiplayer");
private JLabel PlayerIcon = new JLabel(humanPlayerIcon);
private JLabel PlayerName = new JLabel("Name");
private JTextField PlayerTextField = new JTextField(20);
JLabel semesterCounterLabel = new JLabel(String.valueOf(semesterCounter));
private Font robotoFont = new Font("Roboto", Font.BOLD, 45);
public MultiMenuView() {
buildPanel();
}
public void buildPanel(){
titelLabel.setBounds(20,20,700,100);
PlayerIcon.setBounds(75, 400, 200, 128);
PlayerName.setBounds(50, 625, 200, 30);
PlayerTextField.setBounds(50, 650, 250, 50);
semesterCounterLabel.setBounds(725, 475, 50, 50); // zwischen den Up/Down-Buttons
PlayerLeftButton.setBounds(50, 450, 50, 50);
PlayerRightButton.setBounds(250, 450, 50, 50);
semesterLabel.setBounds(500, 400, 200, 30);
semesterUpButton.setBounds(700, 400, 50, 50);
semesterDownButton.setBounds(700, 550, 50, 50);
multiPanel.setLayout(null);
titelLabel.setFont(robotoFont.deriveFont(50f));
semesterLabel.setFont(robotoFont.deriveFont(20f));
multiPanel.add(PlayerName);
multiPanel.add(titelLabel);
multiPanel.add(PlayerIcon);
multiPanel.add(PlayerTextField);
multiPanel.add(semesterCounterLabel);
multiPanel.add(semesterUpButton);
multiPanel.add(semesterDownButton);
multiPanel.add(PlayerLeftButton);
multiPanel.add(PlayerRightButton);
multiPanel.add(semesterLabel);
}
public JPanel getMultiPanel() {
return multiPanel;
}
//public void showMultiPanel(String panelName) {
// CardLayout cl = (CardLayout)mainPanel.getLayout();
// cl.show(multiPanel, panelName);
//}
public void togglePlayerIcon() {
if (PlayerIcon.getIcon() == humanPlayerIcon) {
PlayerIcon.setIcon(aiPlayerIcon);
} else {
PlayerIcon.setIcon(humanPlayerIcon);
}
}
public JButton getPlayerLeftButton() {
return PlayerLeftButton;
}
public JButton getPlayerRightButton() {
return PlayerRightButton;
}
}

View File

@ -1,10 +1,21 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
/**
* Das ShipButton Panel dient dem Erstellen eines lokalen Spiels.
* Hier kann der Benutzer Spieler inklusive Namen und das Semester, in dem sich der Benutzer befindet, einstellen.
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/
public class ShipButton extends JButton { public class ShipButton extends JButton {
private Ship ship; private Ship ship;
private BoardDisplay boardDisplay; private BoardDisplay boardDisplay;
/**
* TODO fertig beschreiben
* @param ship
* @param boardDisplay
* @author Lucas Bronson, Luca Conte, Joshua Kuklok
*/
public ShipButton(Ship ship, BoardDisplay boardDisplay) { public ShipButton(Ship ship, BoardDisplay boardDisplay) {
super(ship.getName()); super(ship.getName());
this.ship = ship; this.ship = ship;
@ -14,6 +25,12 @@ public class ShipButton extends JButton {
}); });
} }
/**
* Setzt Farbe der Modulbuttons.
* Verschiedene Farben für:
* Modul ausgewählt, platziert nicht platziert.
* @author Joshua Kuklok
*/
public void refreshButtonState() { public void refreshButtonState() {
if (ship.isPlaced()) { if (ship.isPlaced()) {
setBackground(Color.LIGHT_GRAY); setBackground(Color.LIGHT_GRAY);

View File

@ -8,6 +8,10 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* Der SoundHandler dient zum Anlegen und Abspielen von Sounds
* @author Lucas Bronson, Luca Conte, Ole Wachtel, Joshua Kuklok
*/
public class SoundHandler { public class SoundHandler {
private static boolean soundOn = true; private static boolean soundOn = true;
@ -16,9 +20,18 @@ public class SoundHandler {
// Wenn fehler beim erstellen von .jar mit sound hier gucken // Wenn fehler beim erstellen von .jar mit sound hier gucken
private static HashMap<String, String> sounds = new HashMap<String, String>(Map.of( private static HashMap<String, String> sounds = new HashMap<String, String>(Map.of(
"hit", "./Sound/water-drip.mp3" "miss", "./Sound/water-drip.mp3",
"hit", "./Sound/hit.mp3",
"destroyed", "./Sound/hit.mp3",
"plop", "./Sound/plop.mp3",
"loose", "./Sound/loosescreenWAH.mp3"
)); ));
/**
* Erstellt neuen Thread, um ausgewählten Sound abzuspielen
* @param soundName Name der Audiodatei, welche abgespielt werden soll
* @author Ole Wachtel, Luca Conte
*/
public static void playSound(String soundName) { public static void playSound(String soundName) {
if (soundOn) { if (soundOn) {
Thread thread = new Thread(new Runnable() { Thread thread = new Thread(new Runnable() {
@ -50,11 +63,21 @@ public class SoundHandler {
} }
} }
/**
* TODO funktion beschreiben (potentiell nicht benötigte Funktion?)
* @param soundName
* @param path
* @author Ole Wachtel
*/
static void add(String soundName, String path){ static void add(String soundName, String path){
sounds.put(soundName, path); sounds.put(soundName, path);
} }
/**
* TODO funktion beschreiben (potentiell nicht benötigte Funktion?)
* @param sound
* @author Ole Wachtel
*/
static void setSoundOn(boolean sound){ static void setSoundOn(boolean sound){
soundOn= sound; soundOn= sound;
} }

View File

@ -3,6 +3,7 @@ import java.awt.*;
/** /**
* Das Verbinden Panel dient als "Überblende", während im Backend das Spiel erstellt/ eine Verbindung hergestellt wird. * Das Verbinden Panel dient als "Überblende", während im Backend das Spiel erstellt/ eine Verbindung hergestellt wird.
* @author Lucas Bronson
*/ */
public class Verbinden extends JPanel{ public class Verbinden extends JPanel{
@ -13,8 +14,9 @@ public class Verbinden extends JPanel{
Font robotoFont = new Font("Roboto", Font.BOLD, 45); Font robotoFont = new Font("Roboto", Font.BOLD, 45);
/** /**
* Konstruktor der startLocalGame. * Konstruktor der Verbinden Klasse.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/ */
public Verbinden(MainFrame frame) { public Verbinden(MainFrame frame) {
setLayout(null); setLayout(null);
@ -24,6 +26,7 @@ public class Verbinden extends JPanel{
/** /**
* Baut Panel auf. * Baut Panel auf.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/ */
private void buildPanel(MainFrame frame) { private void buildPanel(MainFrame frame) {
setLayout(new BorderLayout()); setLayout(new BorderLayout());

64
src/WinScreen.java Normal file
View File

@ -0,0 +1,64 @@
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
* Klasse für Erstellung von winScreen Objekten
* Dient zur Anzeige des Sieges nachdem ein Spiel
* @author Lucas Bronson
*/
public class WinScreen extends JPanel {
JLabel winLabel = new JLabel("Du hast Gewonnen!");
Font robotoFont = new Font("Roboto", Font.BOLD, 45);
JButton okButton = new JButton("Zurück zum Hauptmenü");
/**
* Konstruktor der WinScreen Klasse
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
public WinScreen(MainFrame frame) {
setLayout(null);
buildPanel(frame);
}
/**
* Panel bauen/Objekte hinzufuegen
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson
*/
public void buildPanel(MainFrame frame) {
Timer timer = new Timer(5, new ActionListener() {
private float hue = 0; // Farbton-Wert für HSB-Farbmodell
@Override
public void actionPerformed(ActionEvent e) {
// Farbe basierend auf dem Farbton-Wert berechnen
Color pulsierendeFarbe = Color.getHSBColor(hue, 0.8f, 0.8f); // Sättigung und Helligkeit fix
winLabel.setForeground(pulsierendeFarbe);
// Farbton leicht verändern (Zyklus zwischen 0 und 1)
hue += 0.01f;
if (hue > 1) {
hue = 0;
}
}
});
okButton.setBounds(650,525,200,50);
winLabel.setBounds(500,450,500,50);
timer.start(); // Timer starten
winLabel.setFont(robotoFont);
winLabel.setHorizontalAlignment(SwingConstants.CENTER);
//Zurückkehren zum Hauptmenü, wenn okButton gedrückt wird
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.showPanel("MainMenu");
}
});
add(winLabel);
add(okButton);
}
}

View File

@ -1,6 +1,6 @@
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
// TODO Klasse löschen da nicht gebraucht
public class coinToss extends JPanel { public class coinToss extends JPanel {
private int reihenfolge = 1; // 1 = Spieler 1 fängt an, 0 = Spieler 2 fängt an private int reihenfolge = 1; // 1 = Spieler 1 fängt an, 0 = Spieler 2 fängt an
private Timer timer; private Timer timer;

View File

@ -5,10 +5,11 @@ import java.awt.event.ActionListener;
/** /**
* Das startLocalGame Panel dient dem Erstellen eines lokalen Spiels. * 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. * Hier kann der Benutzer Spieler inklusive Namen und das Semester, in dem sich der Benutzer befindet, einstellen.
* @author Lucas Bronson, Joshua Kuklok
*/ */
public class startLocalGame extends JPanel { public class startLocalGame extends JPanel {
// Player // Player
// TODO: entfernen // TODO: entfernen (generell auch test button)
Player p1; Player p1;
Player p2; Player p2;
@ -54,6 +55,7 @@ public class startLocalGame extends JPanel {
* Fügt ebenfalls ActionListeners hinzu, damit Buttons etc. ihre gewünschte Funktion haben * 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. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Lucas Bronson, Joshua Kuklok
*/ */
startLocalGame(MainFrame frame) { startLocalGame(MainFrame frame) {
// Layout des Panels // Layout des Panels
@ -117,7 +119,7 @@ public class startLocalGame extends JPanel {
rightPlayerTextField.setText(rightPlayerNickname); rightPlayerTextField.setText(rightPlayerNickname);
add(rightPlayerTextField); add(rightPlayerTextField);
// ActionListener für Buttons // ActionListener für Buttons.
// Um das Semester zu erhöhen. // Um das Semester zu erhöhen.
semesterUpButton.addActionListener(e -> { semesterUpButton.addActionListener(e -> {
if (semesterCounter < 6) { if (semesterCounter < 6) {
@ -197,7 +199,7 @@ public class startLocalGame extends JPanel {
testButton.addActionListener(new ActionListener() { testButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
frame.showPanelSLG("GameBoard",1,p1,p2); frame.showPanelWin("WinPanel");
} }
}); });
@ -248,6 +250,7 @@ public class startLocalGame extends JPanel {
/** /**
* Setzt das jeweils "nächste" Icon, wenn der leftPlayerLeftButton gedrückt wird. * Setzt das jeweils "nächste" Icon, wenn der leftPlayerLeftButton gedrückt wird.
* @author Joshua Kuklok
*/ */
private void toggleLeftPlayerIconLeft() { private void toggleLeftPlayerIconLeft() {
if (leftPlayerIcon.getIcon() == humanPlayerIcon) { if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
@ -263,6 +266,7 @@ 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.
* @author Joshua Kuklok
*/ */
private void toggleLeftPlayerIconRight() { private void toggleLeftPlayerIconRight() {
if (leftPlayerIcon.getIcon() == humanPlayerIcon) { if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
@ -278,6 +282,7 @@ 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.
* @author Joshua Kuklok
*/ */
private void toggleRightPlayerIconLeft() { private void toggleRightPlayerIconLeft() {
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
@ -291,6 +296,7 @@ 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.
* @author Joshua Kuklok
*/ */
private void toggleRightPlayerIconRight() { private void toggleRightPlayerIconRight() {
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
@ -304,6 +310,7 @@ public class startLocalGame extends JPanel {
/** /**
* Aktualisiert die Textfelder basierend auf den Icons * Aktualisiert die Textfelder basierend auf den Icons
* @author Joshua Kuklok
*/ */
private void updateTextFields() { private void updateTextFields() {
// Für Linken Spieler // Für Linken Spieler

View File

@ -4,12 +4,14 @@ import java.awt.*;
/** /**
* Das startLocalGameLoadingScreen Panel dient als "Überblende", während im Backend das Spiel erstellt wird. * Das startLocalGameLoadingScreen Panel dient als "Überblende", während im Backend das Spiel erstellt wird.
* Hier wird lediglich Text angezeigt * Hier wird lediglich Text angezeigt
* @author Joshua Kuklok
*/ */
public class startLocalGameLoadingScreen extends JPanel{ public class startLocalGameLoadingScreen extends JPanel{
/** /**
* Konstruktor der startLocalGameLoadingScreen. * Konstruktor der startLocalGameLoadingScreen.
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @param semesterCounter Ein Zähler, der das gewählte Semester speichert (hier unbenutzt) * @param semesterCounter Ein Zähler, der das gewählte Semester speichert (hier unbenutzt)
* @author Joshua Kuklok
*/ */
startLocalGameLoadingScreen(MainFrame frame, int semesterCounter) { startLocalGameLoadingScreen(MainFrame frame, int semesterCounter) {

View File

@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
/** /**
* Das startMultiplayerGame Panel dient dem Erstellen eines Online Spiels. * 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. * 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 { public class startMultiplayerGame extends JPanel {
@ -43,6 +44,7 @@ public class startMultiplayerGame extends JPanel {
* Fügt Buttons, Textfelder und Label hinzu. * Fügt Buttons, Textfelder und Label hinzu.
* Fügt ebenfalls ActionListeners hinzu, damit Buttons etc. ihre gewünschte Funktion haben * 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. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
* @author Joshua Kuklok
*/ */
startMultiplayerGame(MainFrame frame) { startMultiplayerGame(MainFrame frame) {
@ -164,7 +166,7 @@ public class startMultiplayerGame extends JPanel {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
//Parameter -> panelName, Spiel erstellen oder beitreten (int), Spielertyp(int 0-3), Spielername //Parameter -> panelName, Spiel erstellen oder beitreten (int), Spielertyp(int 0-3), Spielername
if (PlayerIcon.getIcon() == humanPlayerIcon) { // TODO Wird name wirklich weitergegeben? if (PlayerIcon.getIcon() == humanPlayerIcon) {
frame.showPanelSMG("JoinGame",0,0, PlayerNickname); frame.showPanelSMG("JoinGame",0,0, PlayerNickname);
} else if ( PlayerIcon.getIcon() == aiPlayerEasyIcon) { } else if ( PlayerIcon.getIcon() == aiPlayerEasyIcon) {
frame.showPanelSMG("JoinGame",0,1, PlayerNickname); frame.showPanelSMG("JoinGame",0,1, PlayerNickname);
@ -181,6 +183,7 @@ public class startMultiplayerGame extends JPanel {
/** /**
* Setzt das jeweils "nächste" Icon, wenn der PlayerLeftButton gedrückt wird. * Setzt das jeweils "nächste" Icon, wenn der PlayerLeftButton gedrückt wird.
* @author Joshua Kuklok
*/ */
private void togglePlayerIconLeft() { private void togglePlayerIconLeft() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {
@ -196,6 +199,7 @@ 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.
* @author Joshua Kuklok
*/ */
private void togglePlayerIconRight() { private void togglePlayerIconRight() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {
@ -211,6 +215,7 @@ public class startMultiplayerGame extends JPanel {
/** /**
* Aktualisiert die Textfelder basierend auf den Icons * Aktualisiert die Textfelder basierend auf den Icons
* @author Joshua Kuklok
*/ */
private void updateTextFields() { private void updateTextFields() {
if (PlayerIcon.getIcon() == humanPlayerIcon) { if (PlayerIcon.getIcon() == humanPlayerIcon) {