Fix: small improvement in TUI leaderboard
This commit is contained in:
@@ -81,7 +81,8 @@ public class TUI implements IView {
|
||||
if (stage == GameStages.TOTEM_CHOICE) {
|
||||
display(buildTotemsContent());
|
||||
} else if (stage == GameStages.ENDED) {
|
||||
display(buildStandingContent() + "\nType 'rematch' to play again or 'quit' to exit");
|
||||
display(buildStandingContent());
|
||||
printLine("Type 'rematch' to play again or 'quit' to exit");
|
||||
} else {
|
||||
display(buildBoardContent());
|
||||
}
|
||||
@@ -170,23 +171,22 @@ public class TUI implements IView {
|
||||
|
||||
private String buildStandingContent() {
|
||||
if (model.standingPlayers == null || model.standingPlayers.isEmpty()) return "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int size = model.standingPlayers.size();
|
||||
for (int i = 0; i < size / 2; i++) {
|
||||
sb.append(AsciiTable.sideBySide(
|
||||
List.of(model.standingPlayers.get(i * 2).toString().split("\n")),
|
||||
List.of(model.standingPlayers.get(i * 2 + 1).toString().split("\n")), 2));
|
||||
String banner = model.standingPlayers.get(0).getUserName().equals(username)
|
||||
? "WINNER!" : "GAME OVER";
|
||||
List<String> lines = new ArrayList<>();
|
||||
for (int i = 0; i < model.standingPlayers.size(); i++) {
|
||||
var p = model.standingPlayers.get(i);
|
||||
lines.add((i + 1) + ". " + p.getUserName()
|
||||
+ " (" + p.getTotem().toString() + ")"
|
||||
+ " \uD83C\uDF56:" + p.getFoodValue()
|
||||
+ " \uD83C\uDFC5:" + p.getPrestigeValue());
|
||||
}
|
||||
sb.append("\n");
|
||||
if (size % 2 != 0) {
|
||||
sb.append(model.standingPlayers.get(size - 1)).append("\n");
|
||||
}
|
||||
if (model.standingPlayers.get(0).getUserName().equals(username)) {
|
||||
sb.append("GAME ENDED: !!!YOU WON!!!");
|
||||
} else {
|
||||
sb.append("GAME ENDED: !!!YOU LOST!!!");
|
||||
}
|
||||
return sb.toString();
|
||||
int contentWidth = lines.stream().mapToInt(AsciiTable::displayWidth).max().orElse(0);
|
||||
int pad = Math.max(0, (contentWidth - AsciiTable.displayWidth(banner)) / 2);
|
||||
var table = new AsciiTable(BorderStyle.ROUNDED, 1);
|
||||
table.addHeader(" ".repeat(pad) + banner);
|
||||
lines.forEach(table::addRow);
|
||||
return table.build();
|
||||
}
|
||||
|
||||
// ── Core display primitive ────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user