diff --git a/src/main/java/de/tims/gameexplorer/GameExplorer.java b/src/main/java/de/tims/gameexplorer/GameExplorer.java new file mode 100644 index 0000000..03c23dd --- /dev/null +++ b/src/main/java/de/tims/gameexplorer/GameExplorer.java @@ -0,0 +1,238 @@ +package de.tims.gameexplorer; + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class GameExplorer { + + private JFrame frame; + private JPanel explorerPanel; + private JPanel gamePanel; + private JPanel navigationPanel; + private JPanel fleetstormPanel; + private JPanel fourwinsPanel; + private JPanel tictactoePanel; + private JPanel leaderboardPanel; + private JPanel border1; + private JPanel border2; + private JPanel border3; + private JPanel border4; + private JPanel border5; + private JPanel border6; + private JButton fleetstormBtn; + private JButton fourwinsBtn; + private JButton tictactoeBtn; + private JButton leaderboardBtn; + private JButton backBtn; + private JLabel chosenGame; + private Dimension minSize; + private Dimension btnSize; + private GridBagConstraints gbc; + + private enum Game { FLEETSTORM, FOURWINS, TICTACTOE, LEADERBOARD }; + private Game actualGame; + + public GameExplorer() { + frame = new JFrame("1000 infomagische Spiele"); + + minSize = new Dimension(400, 300); + btnSize = new Dimension(160, 40); + gbc = new GridBagConstraints(); + + buildExplorerPanel(); + buildNavigationPanel(); + buildGamePanels(); + + frame.add(explorerPanel); + + frame.setMinimumSize(minSize); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setSize(640, 480); + frame.setResizable(true); + frame.setVisible(true); + } + + private void buildExplorerPanel() { + explorerPanel = new JPanel(); + explorerPanel.setLayout(new GridBagLayout()); + + fleetstormBtn = new JButton("Schiffe versenken"); + fleetstormBtn.setPreferredSize(btnSize); + fleetstormBtn.addActionListener(new GameAction()); + fourwinsBtn = new JButton("Vier gewinnt"); + fourwinsBtn.setPreferredSize(btnSize); + fourwinsBtn.addActionListener(new GameAction()); + tictactoeBtn = new JButton("TicTacToe"); + tictactoeBtn.setPreferredSize(btnSize); + tictactoeBtn.addActionListener(new GameAction()); + leaderboardBtn = new JButton("Leaderboard"); + leaderboardBtn.setPreferredSize(btnSize); + leaderboardBtn.addActionListener(new GameAction()); + + border1 = new JPanel(); + border1.setOpaque(false); + border2 = new JPanel(); + border2.setOpaque(false); + border3 = new JPanel(); + border3.setOpaque(false); + border4 = new JPanel(); + border4.setOpaque(false); + border5 = new JPanel(); + border5.setOpaque(false); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weighty = 0.2; + explorerPanel.add(border1, gbc); + + gbc.gridx = 0; + gbc.gridy = 1; + gbc.weighty = 0.0; + explorerPanel.add(fleetstormBtn, gbc); + + gbc.gridx = 0; + gbc.gridy = 2; + gbc.weighty = 0.2; + explorerPanel.add(border2, gbc); + + gbc.gridx = 0; + gbc.gridy = 3; + gbc.weighty = 0.0; + explorerPanel.add(fourwinsBtn, gbc); + + gbc.gridx = 0; + gbc.gridy = 4; + gbc.weighty = 0.2; + explorerPanel.add(border3, gbc); + + gbc.gridx = 0; + gbc.gridy = 5; + gbc.weighty = 0.0; + explorerPanel.add(tictactoeBtn, gbc); + + gbc.gridx = 0; + gbc.gridy = 6; + gbc.weighty = 0.2; + explorerPanel.add(border4, gbc); + + gbc.gridx = 0; + gbc.gridy = 7; + gbc.weighty = 0.0; + explorerPanel.add(leaderboardBtn, gbc); + + gbc.gridx = 0; + gbc.gridy = 8; + gbc.weighty = 0.2; + explorerPanel.add(border5, gbc); + } + + private void buildNavigationPanel() { + navigationPanel = new JPanel(); + navigationPanel.setLayout(new GridBagLayout()); + + backBtn = new JButton("< Zurück"); + backBtn.addActionListener(new BackAction()); + + chosenGame = new JLabel(); + + border6 = new JPanel(); + border6.setOpaque(false); + + gbc.weighty = 0.0; + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 0.0; + gbc.insets = new Insets(5, 20, 5, 0); + navigationPanel.add(backBtn, gbc); + + gbc.gridx = 1; + gbc.gridy = 0; + gbc.weightx = 1.0; + gbc.insets = new Insets(0, 0, 0, 0); + navigationPanel.add(border6, gbc); + + gbc.gridx = 2; + gbc.gridy = 0; + gbc.weightx = 0.0; + gbc.insets = new Insets(5, 0, 5, 20); + navigationPanel.add(chosenGame, gbc); + } + + private void buildGamePanels() { + gamePanel = new JPanel(); + gamePanel.setLayout(new BorderLayout()); + + gamePanel.add(navigationPanel, BorderLayout.PAGE_START); + + //use of dummy panels because real panels have not been implemented yet + fleetstormPanel = new JPanel(); + fleetstormPanel.setBackground(Color.BLUE); + + fourwinsPanel = new JPanel(); + fourwinsPanel.setBackground(Color.GREEN); + + tictactoePanel = new JPanel(); + tictactoePanel.setBackground(Color.YELLOW); + + leaderboardPanel = new JPanel(); + leaderboardPanel.setBackground(Color.RED); + } + + private class GameAction implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + //each button adds a different dummy panel to the gamePanel + if (e.getSource() == fleetstormBtn) { + actualGame = Game.FLEETSTORM; + chosenGame.setText("Schiffe versenken"); + gamePanel.add(fleetstormPanel, BorderLayout.CENTER); + } else if (e.getSource() == fourwinsBtn) { + actualGame = Game.FOURWINS; + chosenGame.setText("Vier gewinnt"); + gamePanel.add(fourwinsPanel, BorderLayout.CENTER); + } else if (e.getSource() == tictactoeBtn) { + actualGame = Game.TICTACTOE; + chosenGame.setText("TicTacToe"); + gamePanel.add(tictactoePanel, BorderLayout.CENTER); + } else if (e.getSource() == leaderboardBtn) { + actualGame = Game.LEADERBOARD; + chosenGame.setText("Leaderboard"); + gamePanel.add(leaderboardPanel, BorderLayout.CENTER); + } + + frame.remove(explorerPanel); + frame.add(gamePanel); + frame.revalidate(); + frame.repaint(); + } + } + + private class BackAction implements ActionListener { + @Override + public void actionPerformed(ActionEvent e) { + switch (actualGame) { + case FLEETSTORM: + gamePanel.remove(fleetstormPanel); + break; + case FOURWINS: + gamePanel.remove(fourwinsPanel); + break; + case TICTACTOE: + gamePanel.remove(tictactoePanel); + break; + case LEADERBOARD: + gamePanel.remove(leaderboardPanel); + } + + frame.remove(gamePanel); + frame.add(explorerPanel); + frame.revalidate(); + frame.repaint(); + } + } + + public static void main(String[] args) { + new GameExplorer(); + } +} diff --git a/src/main/java/de/tims/gameexplorer/Player.java b/src/main/java/de/tims/gameexplorer/Player.java new file mode 100644 index 0000000..0200dc8 --- /dev/null +++ b/src/main/java/de/tims/gameexplorer/Player.java @@ -0,0 +1,19 @@ +package de.tims.gameexplorer; + +public class Player { + + private int points; + + public Player(int points) { + this.points = points; + } + + public void addPoints(int pointsToAdd) { + this.points = (this.points + pointsToAdd > 0) ? this.points + pointsToAdd : 0; + } + + public int getPoints() { + return this.points; + } + +} diff --git a/src/test/java/de/tims/gameexplorer/PlayerTest.java b/src/test/java/de/tims/gameexplorer/PlayerTest.java new file mode 100644 index 0000000..2d782d1 --- /dev/null +++ b/src/test/java/de/tims/gameexplorer/PlayerTest.java @@ -0,0 +1,32 @@ +package de.tims.gameexplorer; + +import static org.assertj.core.api.Assertions.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +class PlayerTest { + + Player player; + + @ParameterizedTest + @MethodSource("testCasesForAddPoints") + void test(String testName, int pointsBefore, int pointsToAdd, int expectedResult) { + player = new Player(pointsBefore); + player.addPoints(pointsToAdd); + int calculatedResult = player.getPoints(); + assertThat(calculatedResult).describedAs(testName).isEqualTo(expectedResult); + } + + private static Stream testCasesForAddPoints() { + return Stream.of(Arguments.of("NoPointsBeforeGet0Points", 0, 0, 0), + Arguments.of("NoPointsBeforeGet10Points", 0, 10, 10), + Arguments.of("10PointsBeforeAdd10Points", 10, 10, 20), + Arguments.of("10PointsBeforeLose10Points", 10, -10, 0), + Arguments.of("LoseMorePointsThanYouHave", 10, -20, 0)); + } + +}