Leaderboard: rank only at 5+ rounds (fairness)
Browse files- game/ui.py +3 -2
game/ui.py
CHANGED
|
@@ -21,6 +21,7 @@ from . import deck as deck_mod
|
|
| 21 |
|
| 22 |
TIER_COLOR = {"SAFE": "#2f6b2b", "CAUTION": "#87671c", "DEADLY": "#8c1d14", "UNKNOWN": "#57544c"}
|
| 23 |
_LB_COLS = ["Player", "You %", "Machine %", "Rounds"]
|
|
|
|
| 24 |
|
| 25 |
|
| 26 |
def _machine_call(pipe, path: str):
|
|
@@ -85,7 +86,7 @@ def _lb_df() -> pd.DataFrame:
|
|
| 85 |
data = []
|
| 86 |
for r in datastore.load_leaderboard():
|
| 87 |
t = int(r.get("skill_total", 0) or 0)
|
| 88 |
-
if t
|
| 89 |
continue
|
| 90 |
data.append([
|
| 91 |
r.get("contributor", "?"),
|
|
@@ -125,7 +126,7 @@ def build_game_tab(pipe) -> None:
|
|
| 125 |
|
| 126 |
score_html = gr.HTML(_scoreboard({"you": 0, "machine": 0, "total": 0}))
|
| 127 |
|
| 128 |
-
gr.HTML("<div class='gm-divider'>▌ LEADERBOARD</div>")
|
| 129 |
post_btn = gr.Button("POST MY SCORE", elem_classes="eink-scan")
|
| 130 |
lb_status = gr.HTML("")
|
| 131 |
lb = gr.Dataframe(value=_lb_df(), headers=_LB_COLS, interactive=False,
|
|
|
|
| 21 |
|
| 22 |
TIER_COLOR = {"SAFE": "#2f6b2b", "CAUTION": "#87671c", "DEADLY": "#8c1d14", "UNKNOWN": "#57544c"}
|
| 23 |
_LB_COLS = ["Player", "You %", "Machine %", "Rounds"]
|
| 24 |
+
MIN_RANK_ROUNDS = 5 # ranked only after 5 rounds, so a 1-round 100% can't top the board
|
| 25 |
|
| 26 |
|
| 27 |
def _machine_call(pipe, path: str):
|
|
|
|
| 86 |
data = []
|
| 87 |
for r in datastore.load_leaderboard():
|
| 88 |
t = int(r.get("skill_total", 0) or 0)
|
| 89 |
+
if t < MIN_RANK_ROUNDS:
|
| 90 |
continue
|
| 91 |
data.append([
|
| 92 |
r.get("contributor", "?"),
|
|
|
|
| 126 |
|
| 127 |
score_html = gr.HTML(_scoreboard({"you": 0, "machine": 0, "total": 0}))
|
| 128 |
|
| 129 |
+
gr.HTML("<div class='gm-divider'>▌ LEADERBOARD · ranked at 5+ rounds</div>")
|
| 130 |
post_btn = gr.Button("POST MY SCORE", elem_classes="eink-scan")
|
| 131 |
lb_status = gr.HTML("")
|
| 132 |
lb = gr.Dataframe(value=_lb_df(), headers=_LB_COLS, interactive=False,
|