-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLeaderboard.java
More file actions
61 lines (53 loc) · 1.85 KB
/
Copy pathLeaderboard.java
File metadata and controls
61 lines (53 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.util.*;
/**
* Manages the leaderboard and player rankings (Lite)
*/
public class Leaderboard {
private List<Player> players;
private Map<String, Player> playerMap;
public Leaderboard() {
this.players = new ArrayList<>();
this.playerMap = new HashMap<>();
}
public void updatePlayer(Player player) {
if (!playerMap.containsKey(player.getName())) {
players.add(player);
}
// Ensure map points to the current instance; do not add attempts here
playerMap.put(player.getName(), player);
}
public List<Player> getTopPlayers(int count) {
List<Player> sortedPlayers = new ArrayList<>(players);
sortedPlayers.sort((p1, p2) -> Integer.compare(p2.getTotalScore(), p1.getTotalScore()));
int playersToReturn = Math.min(count, sortedPlayers.size());
return sortedPlayers.subList(0, playersToReturn);
}
public Player getPlayer(String name) {
return playerMap.get(name);
}
public void displayLeaderboard() {
System.out.println("\n" + "=".repeat(80));
System.out.println("LEADERBOARD");
System.out.println("=".repeat(80));
List<Player> topPlayers = getTopPlayers(10);
if (topPlayers.isEmpty()) {
System.out.println("No players yet. Be the first to play!");
return;
}
System.out.printf("%-4s %-20s %-10s %-8s %-12s %-10s%n",
"Rank", "Player", "Score", "Games", "Accuracy", "Questions");
System.out.println("-".repeat(80));
for (int i = 0; i < topPlayers.size(); i++) {
Player player = topPlayers.get(i);
String medal = i == 0 ? "[1st]" : i == 1 ? "[2nd]" : i == 2 ? "[3rd]" : "[" + (i + 1) + "]";
System.out.printf("%-6s %-20s %-10d %-8d %-11.1f%% %-10d%n",
medal,
player.getName(),
player.getTotalScore(),
player.getGamesPlayed(),
player.getAccuracy(),
player.getTotalQuestions());
}
System.out.println("=".repeat(80));
}
}