RandomCatLover commited on
Commit
7e1ff1d
Β·
1 Parent(s): 2377378

added better multigame

Browse files
Files changed (1) hide show
  1. 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 _render_scoreboard(players, scores, winning_score):
80
- cumsum = {p: 0 for p in players}
81
-
82
- header_cols = ["Round"] + players
83
  md = "| " + " | ".join(header_cols) + " |\n"
84
  md += "| " + " | ".join(["---"] * len(header_cols)) + " |\n"
85
 
86
- for i, round_data in enumerate(scores):
87
- row = [f"**{i + 1}**"]
88
- for p in players:
 
89
  pts = round_data.get(p, 0)
90
- prev = cumsum[p]
91
- cumsum[p] += pts
92
- change = cumsum[p] - prev
93
  if change > 0:
94
  indicator = f' <span style="color:green">&#9650; +{change}</span>'
95
  elif change < 0:
96
  indicator = f' <span style="color:red">&#9660; {change}</span>'
97
  else:
98
  indicator = ""
99
- winner_flag = " β˜…" if cumsum[p] >= winning_score else ""
100
- row.append(f"**{cumsum[p]}**{indicator}{winner_flag}")
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.subheader("Scoreboard")
162
- _render_scoreboard(players, scores, winning_score)
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">&#9650; +{change}</span>'
94
  elif change < 0:
95
  indicator = f' <span style="color:red">&#9660; {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)