From 10e5a8ef5e8b82c8ed3b29f6809c168702f744c2 Mon Sep 17 00:00:00 2001 From: Kaver Date: Tue, 17 Dec 2024 16:30:05 +0100 Subject: [PATCH] =?UTF-8?q?WinScreen=20und=20LooseScreen=20erstellt=20zzgl?= =?UTF-8?q?.=20Methoden=20in=20MainFrame=20f=C3=BCr=20Aufrufen=20aus=20dem?= =?UTF-8?q?=20Backend.=20Diverse=20Javadoc=20Kommentaren=20hinzugef=C3=BCg?= =?UTF-8?q?t=20und=20alte=20nicht=20mehr=20Gebraucht=20Klassen=20entfernt.?= =?UTF-8?q?=20Viel=20Code=20aufger=C3=A4umt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BoardDisplay.java | 2 +- src/HalloSchiffeVersenken.java | 14 ----- src/LooseScreen.java | 34 ++++++++++++ src/MainFrame.java | 28 +++++++++- src/MainMenuController.java | 30 ----------- src/MainMenuModel.java | 22 -------- src/MainMenuView.java | 25 +++++---- src/MultiMenuController.java | 30 ----------- src/MultiMenuModel.java | 22 -------- src/MultiMenuView.java | 98 ---------------------------------- src/Verbinden.java | 2 +- src/WinLooseScreen.java | 39 -------------- src/WinScreen.java | 63 ++++++++++++++++++++++ src/startLocalGame.java | 2 +- 14 files changed, 141 insertions(+), 270 deletions(-) create mode 100644 src/LooseScreen.java delete mode 100644 src/MainMenuController.java delete mode 100644 src/MainMenuModel.java delete mode 100644 src/MultiMenuController.java delete mode 100644 src/MultiMenuModel.java delete mode 100644 src/MultiMenuView.java delete mode 100644 src/WinLooseScreen.java create mode 100644 src/WinScreen.java diff --git a/src/BoardDisplay.java b/src/BoardDisplay.java index 0919b65..bdd8db9 100644 --- a/src/BoardDisplay.java +++ b/src/BoardDisplay.java @@ -58,7 +58,7 @@ public class BoardDisplay extends JPanel { } else if (i == 0) { JLabel colLabel = new JLabel(String.valueOf(j)); colLabel.setHorizontalAlignment(SwingConstants.CENTER); - colLabel.setFont(new Font("Arial", Font.BOLD, 14)); + colLabel.setFont(new Font("Roboto", Font.BOLD, 14)); add(colLabel); } else if (j == 0) { JLabel rowLabel = new JLabel(String.valueOf((char) ('A' + i - 1))); diff --git a/src/HalloSchiffeVersenken.java b/src/HalloSchiffeVersenken.java index c4e3270..8ab08d3 100644 --- a/src/HalloSchiffeVersenken.java +++ b/src/HalloSchiffeVersenken.java @@ -11,19 +11,5 @@ public class HalloSchiffeVersenken { public static void main(String[] args) throws InterruptedException { MainFrame mf = new MainFrame(); 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"); - */ - } } diff --git a/src/LooseScreen.java b/src/LooseScreen.java new file mode 100644 index 0000000..28d105f --- /dev/null +++ b/src/LooseScreen.java @@ -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); + } +} diff --git a/src/MainFrame.java b/src/MainFrame.java index b9c92e9..654d9a1 100644 --- a/src/MainFrame.java +++ b/src/MainFrame.java @@ -51,7 +51,7 @@ public class MainFrame extends JFrame { startMultiplayerGame multiplayerGame = new startMultiplayerGame(this); coinToss coinToss = new coinToss(this); Verbinden verbinden = new Verbinden(this); - WinLooseScreen winLooseScreen = new WinLooseScreen(this,true); + // WinScreen winLooseScreen = new WinScreen(this); // Panels hinzufügen mainPanel.add(mainMenuView, "MainMenu"); @@ -59,7 +59,7 @@ public class MainFrame extends JFrame { mainPanel.add(multiplayerGame, "MultiplayerGame"); mainPanel.add(coinToss, "coinToss"); mainPanel.add(verbinden, "Verbinden"); - mainPanel.add(winLooseScreen, "WinLooseScreen"); + // mainPanel.add(winLooseScreen, "WinLooseScreen"); // Hauptpanel in JFrame hinzufügen add(mainPanel); @@ -125,6 +125,30 @@ public class MainFrame extends JFrame { cardLayout.show(mainPanel, panelName); // Show the panel } + /** + * Spezifische ShowPanel für WinScreen Klasse + * @param panelName Name des anzuzeigenden Panels + */ + 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 + */ + 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) */ diff --git a/src/MainMenuController.java b/src/MainMenuController.java deleted file mode 100644 index 496bb14..0000000 --- a/src/MainMenuController.java +++ /dev/null @@ -1,30 +0,0 @@ -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.*; - -/** - * TODO fertig beschreiben - */ -public class MainMenuController implements ActionListener { - private MainMenuView view; - private MainMenuModel model; - - /** - * TODO fertig beschreiben - * @param model - * @param view - */ - public MainMenuController(MainMenuModel model, MainMenuView view) { - this.view = view; - this.model = model; - } - - /** - * TODO fertig beschreiben - * @param e the event to be processed - */ - @Override - public void actionPerformed(ActionEvent e) { - model.setGameMode("LocalGame"); - } - } \ No newline at end of file diff --git a/src/MainMenuModel.java b/src/MainMenuModel.java deleted file mode 100644 index 5123874..0000000 --- a/src/MainMenuModel.java +++ /dev/null @@ -1,22 +0,0 @@ -/** - * TODO fertig beschreiben - */ -public class MainMenuModel { - private String gameMode; - - /** - * TODO fertig beschreiben - * @param mode - */ - public void setGameMode(String mode) { - this.gameMode = mode; - } - - /** - * TODO fertig beschreiben - * @return - */ - public String getGameMode() { - return gameMode; - } -} \ No newline at end of file diff --git a/src/MainMenuView.java b/src/MainMenuView.java index b5fbe5d..561697a 100644 --- a/src/MainMenuView.java +++ b/src/MainMenuView.java @@ -1,11 +1,12 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import javax.swing.JFrame; import javax.swing.*; /** - * TODO fertig beschreiben + * Klasse zum Erstellen von MainMenu Objekten + * Dient als Hauptmenü für die Anwendung + * @author Lucas Bronson */ public class MainMenuView extends JPanel { @@ -19,8 +20,9 @@ public class MainMenuView extends JPanel { private ImageIcon muteIcon = new ImageIcon("graphics/sound button muted.png"); /** - * TODO fertig beschreiben - * @param frame + * Konstruktor der MainMenuView Klasse + * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. + * @author Lucas Bronson */ public MainMenuView(MainFrame frame) { setLayout(null); @@ -28,8 +30,9 @@ public class MainMenuView extends JPanel { } /** - * TODO fertig beschreiben - * @param 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) { lokalButton.setBounds(200, 200, 500, 500); @@ -47,7 +50,7 @@ public class MainMenuView extends JPanel { add(multiButton); add(soundButton); - // Event Listener für Buttons + // ActionListener um vom Hauptmenü zum LocalGame Menü zu wechseln lokalButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -56,7 +59,7 @@ public class MainMenuView extends JPanel { } }); - // TODO fertig beschreiben + // ActionListener um vom Hauptmenü zum MultiPlayerGame Menü zu wechseln multiButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -65,7 +68,7 @@ public class MainMenuView extends JPanel { } }); - //TODO fertig beschreiben + //Aufruf von toggleMute falls der soundButton geklickt wird soundButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -76,7 +79,9 @@ public class MainMenuView extends JPanel { } /** - * Setzt Sound auf Stumm/Laut und ändert Grafik + * Setzt Sound auf Stumm/Laut und ändert Grafik, sodass + * der aktuelle Stand der Grafik entspricht + * @author Lucas Bronson Joshua Kuklok */ private void toggleMute() { if (soundButton.getIcon() == soundIcon) { diff --git a/src/MultiMenuController.java b/src/MultiMenuController.java deleted file mode 100644 index 9408b03..0000000 --- a/src/MultiMenuController.java +++ /dev/null @@ -1,30 +0,0 @@ -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.*; - -/** - * TODO fertig beschreiben - */ -public class MultiMenuController implements ActionListener { - private MultiMenuView view; - private MultiMenuModel model; - - /** - * TODO fertig beschreiben - * @param model - * @param view - */ - public MultiMenuController(MultiMenuModel model, MultiMenuView view) { - this.view = view; - this.model = model; - } - // TODO fertig beschreiben - @Override - public void actionPerformed(ActionEvent e) { - if (e.getSource() == view.getPlayerLeftButton()){ - view.togglePlayerIcon(); - }else if(e.getSource() == view.getPlayerRightButton()){ - view.togglePlayerIcon(); - } - } -} \ No newline at end of file diff --git a/src/MultiMenuModel.java b/src/MultiMenuModel.java deleted file mode 100644 index cc4318c..0000000 --- a/src/MultiMenuModel.java +++ /dev/null @@ -1,22 +0,0 @@ -/** - * TODO fertig beschreiben - */ -public class MultiMenuModel { - private String gameMode; - - /** - * TODO fertig beschreiben - * @param mode - */ - public void setGameMode(String mode) { - this.gameMode = mode; - } - - /** - * TODO fertig beschreiben - * @return - */ - public String getGameMode() { - return gameMode; - } -} \ No newline at end of file diff --git a/src/MultiMenuView.java b/src/MultiMenuView.java deleted file mode 100644 index 0ec90db..0000000 --- a/src/MultiMenuView.java +++ /dev/null @@ -1,98 +0,0 @@ -import java.awt.*; -import javax.swing.JFrame; -import javax.swing.*; - -/** - * TODO fertig beschreiben - */ -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(); - } - - /** - * TODO fertig beschreiben - */ - 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); - } - - /** - * TODO fertig beschreiben - * @return - */ - public JPanel getMultiPanel() { - return multiPanel; - } - - /** - * TODO fertig beschreiben - */ - public void togglePlayerIcon() { - if (PlayerIcon.getIcon() == humanPlayerIcon) { - PlayerIcon.setIcon(aiPlayerIcon); - } else { - PlayerIcon.setIcon(humanPlayerIcon); - } - } - - /** - * TODO fertig beschreiben - * @return - */ - public JButton getPlayerLeftButton() { - return PlayerLeftButton; - } - - /** - * TODO fertig beschreiben - * @return - */ - public JButton getPlayerRightButton() { - return PlayerRightButton; - } -} diff --git a/src/Verbinden.java b/src/Verbinden.java index aeb086d..a790e80 100644 --- a/src/Verbinden.java +++ b/src/Verbinden.java @@ -13,7 +13,7 @@ public class Verbinden extends JPanel{ 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. */ public Verbinden(MainFrame frame) { diff --git a/src/WinLooseScreen.java b/src/WinLooseScreen.java deleted file mode 100644 index 3afb1d0..0000000 --- a/src/WinLooseScreen.java +++ /dev/null @@ -1,39 +0,0 @@ -import java.awt.*; -import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.IOException; -import java.net.InetSocketAddress; - -/** - * TODO fertig beschreiben - */ -public class WinLooseScreen extends JPanel { - JLabel winLabel = new JLabel("Du hast Gewonnen!"); - JLabel looseLabel = new JLabel("Du hast Verloren!"); - - Font robotoFont = new Font("Roboto", Font.BOLD, 45); - - /** - * TODO fertig beschreiben - * @param frame - * @param wl - */ - public WinLooseScreen(MainFrame frame,boolean wl) { - setLayout(null); - buildPanel(frame,wl); - } - - /** - * TODO fertig beschreiben - * @param frame - * @param wl - */ - public void buildPanel(MainFrame frame,boolean wl) { - if (wl) { - add(winLabel); - }else{ - add(looseLabel); - } - } -} diff --git a/src/WinScreen.java b/src/WinScreen.java new file mode 100644 index 0000000..83e1444 --- /dev/null +++ b/src/WinScreen.java @@ -0,0 +1,63 @@ +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); + //okButton.setHorizontalAlignment(SwingConstants.CENTER); + okButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.showPanel("MainMenu"); + } + }); + add(winLabel); + add(okButton); + } +} diff --git a/src/startLocalGame.java b/src/startLocalGame.java index a3281c7..7a0158c 100644 --- a/src/startLocalGame.java +++ b/src/startLocalGame.java @@ -197,7 +197,7 @@ public class startLocalGame extends JPanel { testButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - frame.showPanelSLG("GameBoard",1,p1,p2); + frame.showPanelWin("WinPanel"); } });