From 48bc601a0d37dc4a22672961506eaf9170e113a0 Mon Sep 17 00:00:00 2001 From: Joshua Date: Tue, 3 Dec 2024 15:33:15 +0100 Subject: [PATCH] Added BoardDisplay, startet connecting FrontEnd/BackAnd. Added new graphics. Added startLocalGameLoadingScreen --- graphics/botPlayerEasy.png | Bin 0 -> 854 bytes graphics/botPlayerHard.png | Bin 0 -> 875 bytes graphics/botPlayerNormal.png | Bin 0 -> 889 bytes src/BoardDisplay.java | 15 ++++++ src/GameBoard.java | 14 ++++-- src/MainFrame.java | 42 ++++++++++++++-- src/startLocalGame.java | 72 +++++++++++++++++++++++++-- src/startLocalGameLoadingScreen.java | 20 ++++++++ src/startMultiplayerGame.java | 13 ++++- 9 files changed, 161 insertions(+), 15 deletions(-) create mode 100644 graphics/botPlayerEasy.png create mode 100644 graphics/botPlayerHard.png create mode 100644 graphics/botPlayerNormal.png create mode 100644 src/BoardDisplay.java create mode 100644 src/startLocalGameLoadingScreen.java diff --git a/graphics/botPlayerEasy.png b/graphics/botPlayerEasy.png new file mode 100644 index 0000000000000000000000000000000000000000..263c4134f4c5092649e5c13f83b7d0e630001cfa GIT binary patch literal 854 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>U>5LnaSW-L z^Y-q++}jQUt%=79n0HDGTxvP(DeuD=Ca-tgmxZaOob#09!o(;Qmw?SR#x?)T4c9bJ zzf-F={qWIMuYm>v&F_|f#eCz^!|$gnzZ_iu{Pg+#`HTDg*VpI#I{M7Tp1oe;i{<~r z4}_SyC-0H^Gv9yueEIj6_e-}vaI9sxaI5wZ`yHlbk#n9jcs?+lE&TUYfyJEVcJ_1q z%KjddIUvJm;LdPHkfHdJ=lMG+XL^f1X=cwjC?DMFa7m-t-dC{c_*&^d>)uy?RrHYU zchCIo!*urKdIsjN^@px)iut*NX@)YxGmZvJri4C*8QQW9``$0zoLTx?@D$sF?Bm*O zj(6*(Ok$kz>Vqyjkhx?Mqk{}sC9)>ThLu~Hqt~eiY?oh|!mumv&cm*A;oId^&vq>^ zy&}6l&)(^#HbasCLov&Nn3t9ZqJs0^eJik!Km3l%;QOs@uU_A&j%0msO~JbDfEL4! zG|`6W@0G_Z8$y95)lHCP-~ZZYK2r>Pb=O@{hGZ6mcY%h@I__}XD2FYE@ytg51f{N8 zrkk23oU7+Lv9~-pRJ8sQQ>`$30PF2r2^vh#nrduHX-jBo9deh`gZMk@s3*c5?gs%x{j+Nq`Pe7;VTWo5Vf z?iI`_70=>=IZg%G+_GU<>$fFJQN#OVhh@Xgv&#knhH%#96UGA=2*>NMev=7Jz~ z-O!J7W-x;yNP~qnNWApg0)Zsux1Co+}A+ozwJTPnf2S&w?h5y0?!D$#oh|r literal 0 HcmV?d00001 diff --git a/graphics/botPlayerHard.png b/graphics/botPlayerHard.png new file mode 100644 index 0000000000000000000000000000000000000000..b44c624dc3d64633080fc428dec0d73c3198b327 GIT binary patch literal 875 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>U{>{XaSW-L z^Y*S`-W3OtV;>m<6($5^WNv#bHAmU~Bj+~_OZMvvZnsV2;B*n^O4;bQC+hU?WB057 z{oCIskosn({^O6gFD@|!n##cN;L+4yOxwN`{D1oL&;9xG^3mCAYj^LSU335M;qcjY z8+TqT{BYc{{{Q3iPyW}}*4&QzEzdSxAmYxG&jtlRobwCVaQ?uKjc zgzX*)8k~Qm=B~pOziH>i;`YN2GvB>le);4&`v~S4$_&pq8Z4O-{C2(AxkaLQaZJrA zsk9HvLlh^NoO*CRxaGmwYrJ;mJk7s^mh>H8yrovG@!1pO10H{8Z`i71EN=|b+Q$Gf zW#=VEi8jYwv%+DLe;a+Vd@eOy#LO437jDidhcGFdDcsoDl>u zV@@)hc`JLP$i8vcUk_F03%9l$7M;63&)#d6tYh{H>$tmhEt`xPlEB(xUYZ_=DxQDm z?Ze7_ZFhMJUMAmOCI9^1DJ_QUY&Q*A!Wa*DhcWK>Hm5v>J%V+?*3->zEPkw=xsP=R z-#3}vk_^G97SFowaNH<|?F_>+3v~m*qn3?xL}s;I^<1dz^r8Q0l#+rGDL2x?EgObY1Om| zXBj3+I~e7tt*olpqQYQnWeq4jvxD& z7@$}q(Ne&2V9pu=k)N}sJe|3FnZOb~xwnh>COn*5?W?Ha{4wJ*!LgxJ>?{@#@rb<=+3Xb1o_(Ug);o~n z)s?cT0vp&2+!a>@-_Gt^7Ji4hbphY?4PUB^MEY+ChHzLn2>>;E7l*u&yYuN)`c~zP z{=C}v+iwbPaSv=h-lve$$H3B2Rd-vY>D!BI2Nw&ptkz&rgh%Tfu{f8Nmk+tOD75`r f-vv(7AY#Fa{p!pL&po1MHh{REu6{1-oD!MU^e!2aSW-L z^Y-r9t}6~AM?YG>a$+fOl3pmdeP6%-q6z957t}x2-sv*gA$W)Lk=rd-;WzUv7v-#xd^eg^XlWrk-Q4VFv^epW9n z%_WN$^jmG;4ZrISMDl!Nn^aU7hyRC-Uo1lw0dkKFCinZJFQ&YoP)p!_xd(50%K zp9)zG+!@XYG8D5MkYO|kw_-SK;E{g$)i>iQyax)8YqL4tt(!K9amK3;s_a1KvPp~% za!d(*3~*b4Ol`@Am0Ov;*Qp0=pT9DNLCMcL=Hky+-!_+QR?6TjJ-+((`G9X+4Kff5 zs`w19Uzxqz^v?O`8+J3zsm_i5TKaD78m5BG39`-!q6{`Eq7B~PE00$;gfb|daq?XoHmhlg)dxfm$oyt0bJ^&xVBK1FC~NrzK}CxVceE>> z$T5Ab*Gv@3SeN>mCxajyQ_wo9lQT@P>pUkr0sBKW?{k3~?=e*&X zaMRJYr0i<$;|j?T4*li{Ktm^sHW|rJuG;zhoF>c4ZuiwIn7@2DW4m17iu1>ej|^L^ zE@rhZi0g7c!+1tlt|9EZ6_?}ZHH(C9IH!l}vYed9q*Z!ptJXZ>VsPZNE^v9Z=$wp5 zla!1z|M6m7F2~+m>x7t|F+9^?G0mzzckN48@dAM>4L$_e0q_-RVkx4ulC*cNWm>`kq?Zvf&iv?P`HCPm78KDW{ tjaZz^%Dac$TNK)V?eBslZy>o~Mg7jVO3xi09C8MUdAjhfXM&= literal 0 HcmV?d00001 diff --git a/src/BoardDisplay.java b/src/BoardDisplay.java new file mode 100644 index 0000000..40c2238 --- /dev/null +++ b/src/BoardDisplay.java @@ -0,0 +1,15 @@ +import javax.swing.*; +import java.awt.*; +// Erstellt Spielfeld für Spieler1/Spieler2 +public class BoardDisplay extends JPanel { + public BoardDisplay(int gridSize, Icon buttonIcon) { + super(new GridLayout(gridSize, gridSize)); + + // Buttons zum Panel hinzufügen + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + add(new JButton(buttonIcon)); + } + } + } +} diff --git a/src/GameBoard.java b/src/GameBoard.java index 43c3974..38d8cf6 100644 --- a/src/GameBoard.java +++ b/src/GameBoard.java @@ -26,6 +26,7 @@ public class GameBoard extends JPanel { JButton leftPlayerModul5 = new JButton("Modul 5"); JButton leftPlayerModul6 = new JButton("Modul 6"); JButton leftPlayerModul7 = new JButton("Reset"); + // Gegnerische ModulButtons JButton rightPlayerModul1 = new JButton("Modul 1"); JButton rightPlayerModul2 = new JButton("Modul 2"); @@ -68,10 +69,14 @@ public class GameBoard extends JPanel { rightButtonsPanel.add(rightPlayerModul7); // Spielfelder erstellen (eigenes und gegnerisches) - int gridSize = 13 + semesterCounter; // Größe des Spielfelds - JPanel ownBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); - JPanel opponentBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); + int gridSize = GameController.semesterToBoardSize(semesterCounter); // Größe des Spielfelds + // Spielfelder werden in BoardDisplay erstellt + //JPanel ownBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); + //JPanel opponentBoardPanel = new JPanel(new GridLayout(gridSize, gridSize)); + JPanel ownBoardPanel = new BoardDisplay(gridSize, gameBoardEmtpy); + JPanel opponentBoardPanel = new BoardDisplay(gridSize, gameBoardEmtpy); + /* Alter code ohne BoardDisplay // Buttons für das eigene Spielfeld hinzufügen for (int i = 0; i < gridSize; i++) { for (int j = 0; j < gridSize; j++) { @@ -85,6 +90,7 @@ public class GameBoard extends JPanel { opponentBoardPanel.add(new JButton(gameBoardEmtpy)); } } + */ // Panel für beide Spielfelder (nebeneinander in der Mitte) JPanel centerPanel = new JPanel(); @@ -99,7 +105,7 @@ public class GameBoard extends JPanel { add(centerPanel, BorderLayout.CENTER); } - GameBoard(MainFrame frame,int semesterCounter) { + GameBoard(MainFrame frame, int semesterCounter,Player p1, Player p2) { buildPanel(frame, semesterCounter); /* rightPlayerRightButton.addActionListener(new ActionListener() { diff --git a/src/MainFrame.java b/src/MainFrame.java index 2e53062..eb308ce 100644 --- a/src/MainFrame.java +++ b/src/MainFrame.java @@ -35,6 +35,7 @@ public class MainFrame extends JFrame { // Verschiedene Panels erstellen und hinzufügen 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); @@ -60,6 +61,7 @@ public class MainFrame extends JFrame { public void showPanel(String panelName) { cardLayout.show(mainPanel, panelName); } + // --- ShowPanel der startMultiplayerGame Klasse public void showPanelSMG(String panelName, int num) { this.localMult = num; @@ -73,12 +75,14 @@ public class MainFrame extends JFrame { cardLayout.show(mainPanel, panelName); // Show the panel } - // --- ShowPanel der startLocalGame Klasse - public void showPanelSLG(String panelName,int semesterCounter) { - this.semesterCounter = semesterCounter; + // --- ShowPanel der startLocalGameLoadingScreen Klasse (DURCH BACKEND AUFGERUFEN) + public void showPanelSLG(String panelName,int semesterCounter, Player p1, Player p2) { + this.semesterCounter = semesterCounter; - //if (!isPanelPresent(panelName)) { //TODO potentiell raus - GameBoard gameBoard = new GameBoard(this, 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.repaint(); @@ -86,6 +90,20 @@ public class MainFrame extends JFrame { cardLayout.show(mainPanel, panelName); // Show the panel } + + // --- ShowPanel der startLocalGame Klasse + 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()) { @@ -96,6 +114,20 @@ public class MainFrame extends JFrame { 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(); + }*/ + + public static void main(String[] args) { SwingUtilities.invokeLater(() -> { MainFrame frame = new MainFrame(); diff --git a/src/startLocalGame.java b/src/startLocalGame.java index 8b01131..f3374b5 100644 --- a/src/startLocalGame.java +++ b/src/startLocalGame.java @@ -3,6 +3,10 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class startLocalGame extends JPanel { + // Player + //Player p1; + //Player p2; + // Funktionshilfen int semesterCounter = 1; // Semester Counter Label String leftPlayerNickname = "Spieler 1"; @@ -11,7 +15,9 @@ public class startLocalGame extends JPanel { // Grafiken ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); ImageIcon humanPlayerIcon = new ImageIcon("graphics/humanPlayer.png"); - ImageIcon aiPlayerIcon = new ImageIcon("graphics/aiPlayer.png"); + ImageIcon aiPlayerEasyIcon = new ImageIcon("graphics/botPlayerEasy.png"); + ImageIcon aiPlayerNormalIcon = new ImageIcon("graphics/botPlayerNormal.png"); + ImageIcon aiPlayerHardIcon = new ImageIcon("graphics/botPlayerHard.png"); // Labels und Buttons JLabel frameTitle = new JLabel("Lokales Spiel"); @@ -19,7 +25,7 @@ public class startLocalGame extends JPanel { JLabel leftPlayerName = new JLabel("Name"); JLabel rightPlayerName = new JLabel("KI-Level"); JLabel leftPlayerIcon = new JLabel(humanPlayerIcon); - JLabel rightPlayerIcon = new JLabel(aiPlayerIcon); + JLabel rightPlayerIcon = new JLabel(aiPlayerEasyIcon); JLabel semesterCounterLabel = new JLabel(String.valueOf(semesterCounter)); JButton backButton = new JButton(backButtonIcon); @@ -93,6 +99,7 @@ public class startLocalGame extends JPanel { rightPlayerTextField.setText(rightPlayerNickname); add(rightPlayerTextField); + // ActionListener für Buttons semesterUpButton.addActionListener(e -> { if (semesterCounter < 6) { @@ -142,12 +149,67 @@ public class startLocalGame extends JPanel { backButton.addActionListener(e -> frame.showPanel("MainMenu")); - startButton.addActionListener(e -> frame.showPanelSLG("GameBoard", semesterCounter)); // TODO ECHTE FUNKTION EINFÜGEN + //startButton.addActionListener(e -> frame.showPanelSLG("GameBoard", semesterCounter,p1, p2)); // TODO ECHTE FUNKTION EINFÜGEN + startButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + frame.showPanelSLGLS("startLocalGameLoadingScreen", semesterCounter); //TODO + if (leftPlayerIcon.getIcon() == humanPlayerIcon) {// TODO Diverse KiIcons erstellen für diffs + if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + } else if (leftPlayerIcon.getIcon() == aiPlayerEasyIcon) { + if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { + if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { + if (rightPlayerIcon.getIcon() == aiPlayerEasyIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerNormalIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerMedium.class, GameController.semesterToBoardSize(semesterCounter)); + } else if (rightPlayerIcon.getIcon() == aiPlayerHardIcon) { + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + } + + } + }); +// GameController.startLocalGame(SpecificAiPlayerEasy.class, rightPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + // TODO Zwischenscreen einfügen ("Spiel wird erstellt") + /* + if (leftPlayerIcon.getIcon() == humanPlayerIcon) {// TODO Diverse KiIcons erstellen für diffs + if (rightPlayerIcon.getIcon() == aiPlayerIcon) { // Platzhalter da nur eine KI gerade exisitert + //... + GameController.startLocalGame(HumanPlayer.class, leftPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + } else if (leftPlayerIcon.getIcon() == aiPlayerIcon) { + //... + GameController.startLocalGame(SpecificAiPlayerEasy.class, rightPlayerNickname, SpecificAiPlayerEasy.class, GameController.semesterToBoardSize(semesterCounter)); + } + */ + + } private void toggleLeftPlayerIcon() { if (leftPlayerIcon.getIcon() == humanPlayerIcon) { - leftPlayerIcon.setIcon(aiPlayerIcon); + leftPlayerIcon.setIcon(aiPlayerEasyIcon); } else { leftPlayerIcon.setIcon(humanPlayerIcon); } @@ -155,7 +217,7 @@ public class startLocalGame extends JPanel { private void toggleRightPlayerIcon() { if (rightPlayerIcon.getIcon() == humanPlayerIcon) { - rightPlayerIcon.setIcon(aiPlayerIcon); + rightPlayerIcon.setIcon(aiPlayerEasyIcon); } else { rightPlayerIcon.setIcon(humanPlayerIcon); } diff --git a/src/startLocalGameLoadingScreen.java b/src/startLocalGameLoadingScreen.java new file mode 100644 index 0000000..c4d4569 --- /dev/null +++ b/src/startLocalGameLoadingScreen.java @@ -0,0 +1,20 @@ +import javax.swing.*; +import java.awt.*; + +public class startLocalGameLoadingScreen extends JPanel{ + startLocalGameLoadingScreen(MainFrame frame, int semesterCounter) { + // Layout setzen + setLayout(new BorderLayout()); + + // Label mit dem Text erstellen + JLabel loadingLabel = new JLabel("Spiel wird gestartet, bitte warten..."); + loadingLabel.setHorizontalAlignment(SwingConstants.CENTER); // Horizontal zentrieren + loadingLabel.setVerticalAlignment(SwingConstants.CENTER); // Vertikal zentrieren + + // Schriftgröße anpassen (optional) + loadingLabel.setFont(new Font("Arial", Font.PLAIN, 18)); + + // Label zum Panel hinzufügen + add(loadingLabel, BorderLayout.CENTER); + } +} diff --git a/src/startMultiplayerGame.java b/src/startMultiplayerGame.java index e1d00be..44788ab 100644 --- a/src/startMultiplayerGame.java +++ b/src/startMultiplayerGame.java @@ -1,4 +1,6 @@ import javax.swing.*; +import java.io.IOException; +import java.net.InetSocketAddress; public class startMultiplayerGame extends JPanel { // Funktionshilfen @@ -76,7 +78,16 @@ public class startMultiplayerGame extends JPanel { PlayerTextField.setText(PlayerNickname); add(PlayerTextField); - // ActionListener für Buttons + /* TODO: Muss in Lucas klasse rein. + public static void startOnlineGame(Class localPlayerClass, String localPlayerName, InetSocketAddress + address, int size) throws IOException { + */ + + //GameController.startOnlineGame(...); + + + + // ActionListener für Buttons // SEMESTERBUTTONS semesterUpButton.addActionListener(e -> { if (semesterCounter < 6) {