diff --git a/src/main/java/de/tims/fleetstorm/GameManager.java b/src/main/java/de/tims/fleetstorm/GameManager.java new file mode 100644 index 0000000..8f682cc --- /dev/null +++ b/src/main/java/de/tims/fleetstorm/GameManager.java @@ -0,0 +1,19 @@ +package de.tims.fleetstorm; + +public class GameManager { + + private int gameState; + + public static final int PREPARATION = 1; + public static final int RUNNING = 2; + public static final int OVER = 3; + + public void start() { + this.gameState = GameManager.PREPARATION; + } + + public int getGameState() { + return gameState; + } + +} diff --git a/src/main/java/de/tims/leaderboard/Leaderboard.java b/src/main/java/de/tims/leaderboard/Leaderboard.java new file mode 100644 index 0000000..8e0af3a --- /dev/null +++ b/src/main/java/de/tims/leaderboard/Leaderboard.java @@ -0,0 +1,114 @@ +package de.tims.leaderboard; + +import java.awt.Color; +import java.awt.Font; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.util.List; +import javax.swing.*; + +import de.tims.player_management.Player; + +public class Leaderboard { + + private static final int NUM_PLAYERS_ON_LEADERBOARD = 10; + + private List allPlayers; + String actualPlayer; + + public Leaderboard(List allPlayers, String actualPlayer) { + this.allPlayers = allPlayers; + this.actualPlayer = actualPlayer; + } + + public Player[] getTop10Players() { + Player[] top10Players = new Player[NUM_PLAYERS_ON_LEADERBOARD]; + + for (Player actualPlayer : allPlayers) { + for (int i = 0; i < NUM_PLAYERS_ON_LEADERBOARD; i++) { + if (top10Players[i] == null) { + top10Players[i] = actualPlayer; + + break; + } else if (actualPlayer.getPoints() > top10Players[i].getPoints()) { + Player playerToInsert = actualPlayer; + Player tmp; + + for (int j = i; j < NUM_PLAYERS_ON_LEADERBOARD; j++) { + tmp = top10Players[j]; + top10Players[j] = playerToInsert; + playerToInsert = tmp; + } + + break; + } + } + } + + return top10Players; + } + + public JPanel buildLeaderboard() { + JPanel mainPanel = new JPanel(); + mainPanel.setLayout(new GridBagLayout()); + + GridBagConstraints gbc = new GridBagConstraints(); + + JLabel place; + JLabel name; + JLabel points; + + Player[] top10Players = getTop10Players(); + + for (int i = -1; i < top10Players.length; i++) { + if (i < 0) { + place = new JLabel("Platzierung"); + name = new JLabel("Name"); + points = new JLabel("Punkte"); + } else { + place = new JLabel((i + 1) + "."); + name = new JLabel(top10Players[i].getName()); + points = new JLabel("" + top10Players[i].getPoints()); + + if (top10Players[i].getName().equals(actualPlayer)) { + Font actualPlayerFont = new Font(Font.DIALOG, Font.PLAIN, 20); + + place.setForeground(Color.RED); + place.setFont(actualPlayerFont); + name.setForeground(Color.RED); + name.setFont(actualPlayerFont); + points.setForeground(Color.RED); + points.setFont(actualPlayerFont); + } + } + + gbc.gridx = 0; + gbc.gridy = i + 1; + gbc.weightx = 0.5; + gbc.weighty = 0.1; + gbc.anchor = GridBagConstraints.LINE_END; + gbc.insets = new Insets(5, 0, 5, 5); + mainPanel.add(place, gbc); + + gbc.gridx = 1; + gbc.gridy = i + 1; + gbc.weightx = 0.0; + gbc.weighty = 0.1; + gbc.anchor = GridBagConstraints.LINE_START; + gbc.insets = new Insets(5, 5, 5, 10); + mainPanel.add(name, gbc); + + gbc.gridx = 2; + gbc.gridy = i + 1; + gbc.weightx = 0.5; + gbc.weighty = 0.1; + gbc.anchor = GridBagConstraints.LINE_START; + gbc.insets = new Insets(5, 10, 5, 0); + mainPanel.add(points, gbc); + } + + return mainPanel; + } + +} diff --git a/src/main/java/de/tims/leaderboard/LeaderboardGUITest.java b/src/main/java/de/tims/leaderboard/LeaderboardGUITest.java new file mode 100644 index 0000000..0e8b826 --- /dev/null +++ b/src/main/java/de/tims/leaderboard/LeaderboardGUITest.java @@ -0,0 +1,32 @@ +package de.tims.leaderboard; + +import java.util.List; + +import javax.swing.*; + +import de.tims.player_management.Player; + +public class LeaderboardGUITest { + + private JFrame frame; + private JPanel panel; + Leaderboard leaderboard; + + public LeaderboardGUITest() { + frame = new JFrame("LeaderboardGUITest"); + leaderboard = new Leaderboard(List.of(new Player("Eins", 0), new Player("Zwei", 130), new Player("Drei", 20), new Player("Vier", 10), + new Player("Fuenf", 20), new Player("Sechs", 70), new Player("Sieben", 60), new Player("Acht", 20), + new Player("Neun", 60), new Player("Zehn", 50), new Player("Elf", 90), new Player("Zwoelf", 20), + new Player("Dreizehn", 40), new Player("Vierzehn", 80)), "Neun"); + panel = leaderboard.buildLeaderboard(); + + frame.add(panel); + frame.setSize(640, 400); + frame.setVisible(true); + } + + public static void main(String[] args) { + new LeaderboardGUITest(); + } + +} diff --git a/src/test/java/de/tims/fleetstorm/GameManagerTest.java b/src/test/java/de/tims/fleetstorm/GameManagerTest.java new file mode 100644 index 0000000..d90e85f --- /dev/null +++ b/src/test/java/de/tims/fleetstorm/GameManagerTest.java @@ -0,0 +1,21 @@ +package de.tims.fleetstorm; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class GameManagerTest { + + GameManager gameManager = new GameManager(); + + @Test + void testIfGameStateIsPreparationAfterStart() { + gameManager.start(); + int expectedState = GameManager.PREPARATION; + + int calculatedState = gameManager.getGameState(); + + assertEquals(expectedState, calculatedState); + } + +} diff --git a/src/test/java/de/tims/leaderboard/LeaderboardTest.java b/src/test/java/de/tims/leaderboard/LeaderboardTest.java new file mode 100644 index 0000000..1705457 --- /dev/null +++ b/src/test/java/de/tims/leaderboard/LeaderboardTest.java @@ -0,0 +1,61 @@ +package de.tims.leaderboard; + +import static org.assertj.core.api.Assertions.*; + +import java.util.List; +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; + +import de.tims.player_management.Player; + +class LeaderboardTest { + + Leaderboard leaderboard; + + @ParameterizedTest + @MethodSource("testCasesForGetTop10Players") + void getTop10PlayersTest(String testName, List allPlayers, String actualPlayer, Player[] expectedResult) { + leaderboard = new Leaderboard(allPlayers, actualPlayer); + Player[] calculatedResutl = leaderboard.getTop10Players(); + + assertThat(calculatedResutl).describedAs(testName).isEqualTo(expectedResult); + } + + private static Stream testCasesForGetTop10Players() { + return Stream.of(Arguments.of("EmptyListReturnsEmptyArray", List.of(), "TestPlayer", new Player[] {null, null, null, null, null, null, null, null, null, null}), + Arguments.of("SortedListWithLessThan10ElementsReturnsListAsArray", + List.of(new Player("Eins", 80), new Player("Zwei", 70), new Player("Drei", 60), new Player("Vier", 50), + new Player("Fuenf", 40), new Player("Sechs", 30), new Player("Sieben", 20), new Player("Acht", 10)), + "TestPlayer", + new Player[] {new Player("Eins", 80), new Player("Zwei", 70), new Player("Drei", 60), new Player("Vier", 50), + new Player("Fuenf", 40), new Player("Sechs", 30), new Player("Sieben", 20), new Player("Acht", 10), null, null}), + Arguments.of("SortedListWithMoreThan10ElementsReturnsFirst10ElementsAsArray", + List.of(new Player("Eins", 140), new Player("Zwei", 130), new Player("Drei", 120), new Player("Vier", 110), + new Player("Fuenf", 100), new Player("Sechs", 90), new Player("Sieben", 80), new Player("Acht", 70), + new Player("Neun", 60), new Player("Zehn", 50), new Player("Elf", 40), new Player("Zwoelf", 30), + new Player("Dreizehn", 20), new Player("Vierzehn", 10)), + "TestPlayer", + new Player[] {new Player("Eins", 140), new Player("Zwei", 130), new Player("Drei", 120), new Player("Vier", 110), + new Player("Fuenf", 100), new Player("Sechs", 90), new Player("Sieben", 80), new Player("Acht", 70), + new Player("Neun", 60), new Player("Zehn", 50)}), + Arguments.of("UnsortedListWithLessThan10ElementsReturnsElementsSortedByPoints", + List.of(new Player("Eins", 20), new Player("Zwei", 30), new Player("Drei", 10), new Player("Vier", 60), + new Player("Fuenf", 50), new Player("Sechs", 90)), + "TestPlayer", + new Player[] {new Player("Sechs", 90), new Player("Vier", 60), new Player("Fuenf", 50), new Player("Zwei", 30), + new Player("Eins", 20), new Player("Drei", 10), null, null, null, null}), + Arguments.of("UnsortedListWithMoreThan10ElementsReturns10ElementsWithMostPointsSortedByPoints", + List.of(new Player("Eins", 0), new Player("Zwei", 130), new Player("Drei", 20), new Player("Vier", 10), + new Player("Fuenf", 20), new Player("Sechs", 70), new Player("Sieben", 60), new Player("Acht", 20), + new Player("Neun", 60), new Player("Zehn", 50), new Player("Elf", 90), new Player("Zwoelf", 20), + new Player("Dreizehn", 40), new Player("Vierzehn", 80)), + "TestPlayer", + new Player[] {new Player("Zwei", 130), new Player("Elf", 90), new Player("Vierzehn", 80), new Player("Sechs", 70), + new Player("Sieben", 60), new Player("Neun", 60), new Player("Zehn", 50), new Player("Dreizehn", 40), + new Player("Drei", 20), new Player("Fuenf", 20)})); + } + +}