Spaces:
Sleeping
Sleeping
Commit Β·
7e1ff1d
1
Parent(s): 2377378
added better multigame
Browse files- pages/points_tracker.py +31 -16
pages/points_tracker.py
CHANGED
|
@@ -76,33 +76,45 @@ def _compute_cumulative(players, scores):
|
|
| 76 |
return cumsum, history
|
| 77 |
|
| 78 |
|
| 79 |
-
def
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
header_cols = ["Round"] + players
|
| 83 |
md = "| " + " | ".join(header_cols) + " |\n"
|
| 84 |
md += "| " + " | ".join(["---"] * len(header_cols)) + " |\n"
|
| 85 |
|
| 86 |
-
for
|
| 87 |
-
row = [f"**{
|
| 88 |
-
|
|
|
|
| 89 |
pts = round_data.get(p, 0)
|
| 90 |
-
prev =
|
| 91 |
-
|
| 92 |
-
change =
|
| 93 |
if change > 0:
|
| 94 |
indicator = f' <span style="color:green">▲ +{change}</span>'
|
| 95 |
elif change < 0:
|
| 96 |
indicator = f' <span style="color:red">▼ {change}</span>'
|
| 97 |
else:
|
| 98 |
indicator = ""
|
| 99 |
-
winner_flag = " β
" if
|
| 100 |
-
row.append(f"**{
|
| 101 |
md += "| " + " | ".join(row) + " |\n"
|
| 102 |
|
| 103 |
st.markdown(md, unsafe_allow_html=True)
|
| 104 |
|
| 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
def _render_chart(players, scores):
|
| 107 |
if not scores:
|
| 108 |
return
|
|
@@ -139,6 +151,11 @@ def _game_phase():
|
|
| 139 |
winning_score = st.session_state.pt_winning_score
|
| 140 |
game_name = st.session_state.pt_game_name
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
if game_name:
|
| 143 |
st.subheader(f"Tracking: {game_name}")
|
| 144 |
|
|
@@ -146,7 +163,6 @@ def _game_phase():
|
|
| 146 |
with col_reset:
|
| 147 |
if st.button("Reset Game"):
|
| 148 |
st.session_state.pt_game_started = False
|
| 149 |
-
st.session_state.pt_players = []
|
| 150 |
st.session_state.pt_scores = []
|
| 151 |
st.rerun()
|
| 152 |
with col_undo:
|
|
@@ -154,12 +170,11 @@ def _game_phase():
|
|
| 154 |
st.session_state.pt_scores.pop()
|
| 155 |
st.rerun()
|
| 156 |
|
| 157 |
-
cumsum, _ = _compute_cumulative(players, scores)
|
| 158 |
winners = [p for p in players if cumsum[p] >= winning_score]
|
| 159 |
|
| 160 |
if scores:
|
| 161 |
-
st.
|
| 162 |
-
|
| 163 |
|
| 164 |
with st.expander("Points progression chart", expanded=False):
|
| 165 |
_render_chart(players, scores)
|
|
|
|
| 76 |
return cumsum, history
|
| 77 |
|
| 78 |
|
| 79 |
+
def _render_scoreboard_transposed(players, scores, winning_score):
|
| 80 |
+
header_cols = ["Player"] + [f"R{i + 1}" for i in range(len(scores))]
|
|
|
|
|
|
|
| 81 |
md = "| " + " | ".join(header_cols) + " |\n"
|
| 82 |
md += "| " + " | ".join(["---"] * len(header_cols)) + " |\n"
|
| 83 |
|
| 84 |
+
for p in players:
|
| 85 |
+
row = [f"**{p}**"]
|
| 86 |
+
running = 0
|
| 87 |
+
for round_data in scores:
|
| 88 |
pts = round_data.get(p, 0)
|
| 89 |
+
prev = running
|
| 90 |
+
running += pts
|
| 91 |
+
change = running - prev
|
| 92 |
if change > 0:
|
| 93 |
indicator = f' <span style="color:green">▲ +{change}</span>'
|
| 94 |
elif change < 0:
|
| 95 |
indicator = f' <span style="color:red">▼ {change}</span>'
|
| 96 |
else:
|
| 97 |
indicator = ""
|
| 98 |
+
winner_flag = " β
" if running >= winning_score else ""
|
| 99 |
+
row.append(f"**{running}**{indicator}{winner_flag}")
|
| 100 |
md += "| " + " | ".join(row) + " |\n"
|
| 101 |
|
| 102 |
st.markdown(md, unsafe_allow_html=True)
|
| 103 |
|
| 104 |
|
| 105 |
+
def _render_leaderboard(players, cumsum):
|
| 106 |
+
st.subheader("π Leaderboard")
|
| 107 |
+
if not players:
|
| 108 |
+
return
|
| 109 |
+
|
| 110 |
+
medals = ["π₯", "π₯", "π₯"]
|
| 111 |
+
cols = st.columns(len(players))
|
| 112 |
+
for i, p in enumerate(players):
|
| 113 |
+
label = f"{medals[i]} {p}" if i < len(medals) else f"#{i + 1} {p}"
|
| 114 |
+
with cols[i]:
|
| 115 |
+
st.metric(label, cumsum[p])
|
| 116 |
+
|
| 117 |
+
|
| 118 |
def _render_chart(players, scores):
|
| 119 |
if not scores:
|
| 120 |
return
|
|
|
|
| 151 |
winning_score = st.session_state.pt_winning_score
|
| 152 |
game_name = st.session_state.pt_game_name
|
| 153 |
|
| 154 |
+
cumsum, _ = _compute_cumulative(players, scores)
|
| 155 |
+
sorted_players = sorted(players, key=lambda p: cumsum[p], reverse=True)
|
| 156 |
+
|
| 157 |
+
_render_leaderboard(sorted_players, cumsum)
|
| 158 |
+
|
| 159 |
if game_name:
|
| 160 |
st.subheader(f"Tracking: {game_name}")
|
| 161 |
|
|
|
|
| 163 |
with col_reset:
|
| 164 |
if st.button("Reset Game"):
|
| 165 |
st.session_state.pt_game_started = False
|
|
|
|
| 166 |
st.session_state.pt_scores = []
|
| 167 |
st.rerun()
|
| 168 |
with col_undo:
|
|
|
|
| 170 |
st.session_state.pt_scores.pop()
|
| 171 |
st.rerun()
|
| 172 |
|
|
|
|
| 173 |
winners = [p for p in players if cumsum[p] >= winning_score]
|
| 174 |
|
| 175 |
if scores:
|
| 176 |
+
with st.expander("Scoreboard", expanded=True):
|
| 177 |
+
_render_scoreboard_transposed(sorted_players, scores, winning_score)
|
| 178 |
|
| 179 |
with st.expander("Points progression chart", expanded=False):
|
| 180 |
_render_chart(players, scores)
|