Jenkins
3 years ago
5 changed files with 247 additions and 0 deletions
-
19src/main/java/de/tims/fleetstorm/GameManager.java
-
114src/main/java/de/tims/leaderboard/Leaderboard.java
-
32src/main/java/de/tims/leaderboard/LeaderboardGUITest.java
-
21src/test/java/de/tims/fleetstorm/GameManagerTest.java
-
61src/test/java/de/tims/leaderboard/LeaderboardTest.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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -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<Player> allPlayers; |
||||
|
String actualPlayer; |
||||
|
|
||||
|
public Leaderboard(List<Player> 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; |
||||
|
} |
||||
|
|
||||
|
} |
@ -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(); |
||||
|
} |
||||
|
|
||||
|
} |
@ -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); |
||||
|
} |
||||
|
|
||||
|
} |
@ -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<Player> allPlayers, String actualPlayer, Player[] expectedResult) { |
||||
|
leaderboard = new Leaderboard(allPlayers, actualPlayer); |
||||
|
Player[] calculatedResutl = leaderboard.getTop10Players(); |
||||
|
|
||||
|
assertThat(calculatedResutl).describedAs(testName).isEqualTo(expectedResult); |
||||
|
} |
||||
|
|
||||
|
private static Stream<Arguments> 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)})); |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue