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. * @author Lucas Bronson, Luca Conte, Joshua Kuklok */ public class MainFrame extends JFrame { private CardLayout cardLayout; private JPanel mainPanel; // ---------- // // Diverse Hilfsvariablen (für Parameterübergabe etc.) // Von startMultiplayerGame an JoinGame int localMult; // Von startLocalGame an startLocalGameLoadingScreen // Von startLocalGameLoadingScreen an GameBoard int semesterCounter; // ---------- // private GameBoard gameBoard; /** * Konstruktor von MainFrame. * Ermöglicht es Panel anzuzeigen. * @author Lucas Bronson, Luca Conte, Joshua Kuklok */ public MainFrame() { GameController.setMainFrame(this); setTitle("Studium Versenken"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(1500, 1000); setLocationRelativeTo(null); // CardLayout und Hauptpanel erstellen cardLayout = new CardLayout(); mainPanel = new JPanel(cardLayout); // Panels erstellen MainMenuView mainMenuView = new MainMenuView(this); startLocalGame localGame = new startLocalGame(this); startMultiplayerGame multiplayerGame = new startMultiplayerGame(this); Verbinden verbinden = new Verbinden(this); // Panels hinzufügen mainPanel.add(mainMenuView, "MainMenu"); mainPanel.add(localGame, "LocalGame"); mainPanel.add(multiplayerGame, "MultiplayerGame"); mainPanel.add(verbinden, "Verbinden"); // mainPanel.add(winLooseScreen, "WinLooseScreen"); // Hauptpanel in JFrame hinzufügen add(mainPanel); // Hauptmenü anzeigen cardLayout.show(mainPanel, "MainMenu"); } /** * Methode, um die Ansicht zu wechseln * @param panelName Name des anzuzeigenden Panels * @author Joshua Kuklok */ public void showPanel(String panelName) { cardLayout.show(mainPanel, panelName); } /** * 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 * @author Lucas Bronson, Joshua Kuklok */ public void showPanelSMG(String panelName, int num, int playerType,String playerName, int semesterCounter) { this.localMult = num; JoinGame joinGame = new JoinGame(this, localMult, playerType, playerName, semesterCounter); mainPanel.add(joinGame, panelName); mainPanel.revalidate(); mainPanel.repaint(); cardLayout.show(mainPanel, panelName); } /** * 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 * @author Lucas Bronson, Luca Conte, Joshua Kuklok */ public void showPanelSLG(String panelName,int semesterCounter, Player p1, Player p2) { this.semesterCounter = semesterCounter; this.gameBoard = new GameBoard(this, semesterCounter, p1, p2); mainPanel.add(gameBoard, panelName); mainPanel.revalidate(); mainPanel.repaint(); cardLayout.show(mainPanel, panelName); // Panel anzeigen } /** * Spezifische ShowPanel der startLocalGame Klasse * @param panelName Name des anzuzeigenden Panels * @param semesterCounter Ausgewähltes Semester * @author Joshua Kuklok */ public void showPanelSLGLS(String panelName,int semesterCounter) { this.semesterCounter = semesterCounter; startLocalGameLoadingScreen LocalGameLoadingScreen = new startLocalGameLoadingScreen(this, semesterCounter); mainPanel.add(LocalGameLoadingScreen, panelName); mainPanel.revalidate(); mainPanel.repaint(); cardLayout.show(mainPanel, panelName); // Panel anzeigen } /** * Spezifische ShowPanel für WinScreen Klasse * @param panelName Name des anzuzeigenden Panels * @param player Player von dem die funktion aufgerufen worden ist * @author Lucas Bronson, Peer Ole Wachtel */ public void showPanelWin(String panelName, Player player){ if(player != gameBoard.getP1()){ return; } this.gameBoard.getP1().destroy(); this.gameBoard.getP2().destroy(); this.gameBoard.removeAll(); this.gameBoard = null; 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 * @param player Player von dem die funktion aufgerufen worden ist * @author Lucas Bronson, Peer Ole Wachtel */ public void showPanelLose(String panelName, Player player){ if(player != gameBoard.getP1()){ return; } this.gameBoard.getP1().destroy(); this.gameBoard.getP2().destroy(); this.gameBoard.removeAll(); this.gameBoard = null; LoseScreen looseScreen = new LoseScreen(this); mainPanel.add(looseScreen,panelName); mainPanel.revalidate(); mainPanel.repaint(); cardLayout.show(mainPanel, panelName); } /** * Aktualisiert das Spielfeld (kontextText) * @author Luca Conte */ public void refreshGameBoard() { if(this.gameBoard == null) { return; } this.gameBoard.refresh(); } }