start game stuff - both online and offline #13
|
@ -5,11 +5,20 @@ import java.awt.event.MouseEvent;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TODO Klassenbeschreibung
|
||||
*/
|
||||
public class BoardDisplay extends JPanel {
|
||||
private JButton[][] fields;
|
||||
private int gridSize;
|
||||
private List <Ship> ships;
|
||||
|
||||
/**
|
||||
* Konstruktor der startLocalGame.
|
||||
* TODO fertig schreiben
|
||||
* @param gridSize
|
||||
* @param player
|
||||
*/
|
||||
public BoardDisplay(int gridSize, Player player) {
|
||||
super(new GridLayout(gridSize + 1, gridSize + 1)); // +1 wegen extra Zeile/Splate
|
||||
this.fields = new JButton[gridSize][gridSize];
|
||||
|
@ -17,8 +26,8 @@ public class BoardDisplay extends JPanel {
|
|||
// Erstellung von Spielfeld
|
||||
for (int i = 0; i <= gridSize; i++) {
|
||||
for (int j = 0; j <= gridSize; j++) {
|
||||
//final int x = i; // Temporäre Variable
|
||||
// final int y = j; // Temporäre Variable
|
||||
final int x = i; // Temporäre Variable
|
||||
final int y = j; // Temporäre Variable
|
||||
if (i == 0 && j == 0) {
|
||||
add(new JLabel(" "));
|
||||
} else if (i == 0) {
|
||||
|
@ -69,18 +78,23 @@ public class BoardDisplay extends JPanel {
|
|||
// 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) {
|
||||
//boolean a = true;
|
||||
if (placeable(ship, ship.getPosition(), horizontal)) {
|
||||
// ship.setPosition(new Point(o.getX(), o.getY()), player.getBoard().getShips(), gridSize);
|
||||
ship.setPosition(o, player.getBoard().getShips(), gridSize);
|
||||
|
||||
|
||||
ship.setPosition(new Point(o.getX(),o.getY()),player.getBoard().getShips(),gridSize);
|
||||
ship.setHorizontal(horizontal);
|
||||
ships.add(ship);
|
||||
List<Point> occupied = ship.getOccupiedPoints();
|
||||
for(Point p: occupied) {
|
||||
fields[(int) p.getX()][(int)p.getY()].setBackground(Color.LIGHT_GRAY);
|
||||
fields[p.getX()][p.getY()].setBackground(Color.LIGHT_GRAY);
|
||||
}
|
||||
return true;
|
||||
}else{
|
||||
|
@ -98,6 +112,13 @@ public class BoardDisplay extends JPanel {
|
|||
return true;
|
||||
}*/
|
||||
|
||||
/**
|
||||
* TODO Funktion beschreiben etc.
|
||||
* @param ship
|
||||
* @param o
|
||||
* @param horizontal
|
||||
* @return
|
||||
*/
|
||||
private boolean placeable(Ship ship, Point o, boolean horizontal) {
|
||||
if (horizontal && (o.getX() + ship.getSize() > gridSize)) {
|
||||
return false;
|
||||
|
@ -125,6 +146,12 @@ public class BoardDisplay extends JPanel {
|
|||
Ship current = (Ship) e.getSource();
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO Funktion beschreiben etc.
|
||||
* @param field
|
||||
* @param o
|
||||
* @param player
|
||||
*/
|
||||
private void handleFieldClick(JButton field, Point o,Player player) {
|
||||
// Beispiel: Setze ein Schiff bei einem Klick
|
||||
if (setShip(new Ship(3, "TestShip"), o, true,player)) {
|
||||
|
|
|
@ -8,6 +8,10 @@ import java.awt.event.MouseEvent;
|
|||
import java.awt.event.MouseAdapter;
|
||||
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 {
|
||||
// Funktionshilfen
|
||||
//int semesterCounter = 1; //TODO: ersetzen durch param von vorpanel
|
||||
|
@ -25,6 +29,13 @@ public class GameBoard extends JPanel {
|
|||
JButton backButton = new JButton(backButtonIcon);
|
||||
// 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) {
|
||||
JToggleButton leftPlayerModul1 = new JToggleButton("Modul 1"); //TODO: Dynamische Namen durch abgleich mit Semester
|
||||
JToggleButton leftPlayerModul2 = new JToggleButton("Modul 2");
|
||||
|
@ -38,6 +49,7 @@ public class GameBoard extends JPanel {
|
|||
leftPlayerModul1, leftPlayerModul2, leftPlayerModul3, leftPlayerModul4,
|
||||
leftPlayerModul5, leftPlayerModul6, leftPlayerModul7,
|
||||
};
|
||||
|
||||
// Gegnerische ModulButtons
|
||||
JToggleButton rightPlayerModul1 = new JToggleButton("Modul 1");
|
||||
JToggleButton rightPlayerModul2 = new JToggleButton("Modul 2");
|
||||
|
@ -58,6 +70,11 @@ public class GameBoard extends JPanel {
|
|||
backButton.addActionListener(e -> frame.showPanel("MainMenu"));
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO Funktion beschreiben etc.
|
||||
* @param ships
|
||||
* @param buttons
|
||||
*/
|
||||
private void updateButtonLabels(List<Ship> ships,JToggleButton[] buttons) {
|
||||
for(int i=0;i<buttons.length &&i<ships.size();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) {
|
||||
// Hauptlayout - BorderLayout für die Anordnung der Komponenten
|
||||
setLayout(new BorderLayout());
|
||||
|
|
|
@ -92,7 +92,7 @@ public class JoinGame extends JPanel {
|
|||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
String ipAddress = ipTextField.getText();
|
||||
if (ipAddress.equals("")) {
|
||||
if (ipAddress.isEmpty()) {
|
||||
ipAddress = "0.0.0.0";
|
||||
}
|
||||
String portText = portTextField.getText();
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import javax.swing.*;
|
||||
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 {
|
||||
|
||||
private CardLayout cardLayout;
|
||||
|
@ -16,7 +20,10 @@ public class MainFrame extends JFrame {
|
|||
int semesterCounter;
|
||||
// ---------- //
|
||||
|
||||
|
||||
/**
|
||||
* Konstruktor von MainFrame.
|
||||
* Ermöglicht es Panel anzuzeigen.
|
||||
*/
|
||||
public MainFrame() {
|
||||
|
||||
GameController.setMainFrame(this);
|
||||
|
@ -26,33 +33,23 @@ public class MainFrame extends JFrame {
|
|||
setSize(1500, 1000);
|
||||
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 = new CardLayout();
|
||||
mainPanel = new JPanel(cardLayout);
|
||||
|
||||
// Verschiedene Panels erstellen und hinzufügen
|
||||
// Panels erstellen
|
||||
MainMenuView mainMenuView = new MainMenuView(this);
|
||||
startLocalGame localGame = new startLocalGame(this);
|
||||
//startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this);
|
||||
startMultiplayerGame multiplayerGame = new startMultiplayerGame(this);
|
||||
coinToss coinToss = new coinToss(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(localGame, "LocalGame");
|
||||
mainPanel.add(multiplayerGame, "MultiplayerGame");
|
||||
mainPanel.add(coinToss, "coinToss");
|
||||
mainPanel.add(verbinden, "Verbinden");
|
||||
//mainPanel.add(joinGame, "JoinGame");
|
||||
//mainPanel.add(gameBoard, "GameBoard");
|
||||
|
||||
// Hauptpanel in JFrame hinzufügen
|
||||
add(mainPanel);
|
||||
|
@ -61,82 +58,60 @@ public class MainFrame extends JFrame {
|
|||
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) {
|
||||
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) {
|
||||
this.localMult = num;
|
||||
|
||||
//if (!isPanelPresent(panelName)) { //TODO potentiell raus
|
||||
JoinGame joinGame = new JoinGame(this, localMult, playerType, playerName);
|
||||
mainPanel.add(joinGame, panelName);
|
||||
mainPanel.revalidate(); // Refresh
|
||||
mainPanel.repaint();
|
||||
//}
|
||||
|
||||
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) {
|
||||
this.semesterCounter = semesterCounter;
|
||||
|
||||
//if (!isPanelPresent(panelName)) { //TODO potentiell raus
|
||||
// gameBoard muss player übergeben bekommen
|
||||
GameBoard gameBoard = new GameBoard(this, semesterCounter, p1, p2);
|
||||
//mainPanel.add(mainMenuView, "MainMenu");
|
||||
mainPanel.add(gameBoard, panelName);
|
||||
mainPanel.revalidate(); // Refresh
|
||||
mainPanel.revalidate();
|
||||
mainPanel.repaint();
|
||||
//}
|
||||
|
||||
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) {
|
||||
this.semesterCounter = semesterCounter;
|
||||
// gameBoard muss player übergeben bekommen
|
||||
|
||||
startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this, semesterCounter);
|
||||
mainPanel.add(LocalGameLoadingScreen, panelName);
|
||||
mainPanel.revalidate(); // Refresh
|
||||
mainPanel.repaint();
|
||||
//}
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
*/
|
||||
}
|
|
@ -1,6 +1,9 @@
|
|||
import javax.swing.*;
|
||||
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{
|
||||
|
||||
ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png");
|
||||
|
@ -9,11 +12,19 @@ public class Verbinden extends JPanel{
|
|||
|
||||
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) {
|
||||
setLayout(null);
|
||||
buildPanel(frame);
|
||||
}
|
||||
|
||||
/**
|
||||
* Baut Panel auf.
|
||||
* @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden.
|
||||
*/
|
||||
private void buildPanel(MainFrame frame) {
|
||||
setLayout(new BorderLayout());
|
||||
verbindenLabel.setFont(robotoFont.deriveFont(50f));
|
||||
|
|
|
@ -245,7 +245,10 @@ public class startLocalGame extends JPanel {
|
|||
|
||||
}
|
||||
// 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() {
|
||||
if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
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() {
|
||||
if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
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() {
|
||||
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
|
||||
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() {
|
||||
if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) {
|
||||
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() {
|
||||
// Für Linken Spieler
|
||||
if (leftPlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
|
|
|
@ -178,7 +178,10 @@ public class startMultiplayerGame extends JPanel {
|
|||
}
|
||||
|
||||
// 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() {
|
||||
if (PlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
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() {
|
||||
if (PlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
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() {
|
||||
if (PlayerIcon.getIcon() == humanPlayerIcon) {
|
||||
PlayerTextField.setText(PlayerNickname);
|
||||
|
|
Loading…
Reference in New Issue