Muthuraja18 commited on
Commit
42a7f79
ยท
verified ยท
1 Parent(s): 3e9761e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -47
app.py CHANGED
@@ -799,6 +799,7 @@ def get_top3_and_player_count(game_id):
799
  # Home page
800
 
801
  HEARTBEAT_THRESHOLD_SECONDS = 60 # adjust if needed
 
802
  def home_page():
803
  st.header("Home")
804
  st.write("Create games, invite friends, play and climb the leaderboard.")
@@ -808,53 +809,48 @@ def home_page():
808
  total_online = sum(len(v) for v in players_map.values())
809
  st.metric("๐ŸŸข Players Online", total_online)
810
 
811
- # Show last score
812
- if st.session_state.get('last_score') is not None:
813
- st.success(
814
- f"Your last score: {st.session_state['last_score']} "
815
- f"(Game {st.session_state.get('last_game')})"
816
- )
817
 
818
- # Load games
819
  games = unified_get("games") or {}
820
-
821
  st.subheader("Recent games")
822
 
823
  for g in sorted(games.values(), key=lambda x: x.get("created_at", ""), reverse=True)[:10]:
824
  gid = g.get("game_id")
825
- players_here = players_map.get(gid, {}) or {}
 
 
 
826
 
827
  st.markdown(f"### ๐ŸŽฎ Game: **{gid}** {'(Closed)' if g.get('closed') else ''}")
828
  st.write(f"Host: {g.get('host')} โ€” Topics: {', '.join(g.get('topics', []))}")
829
  st.write(f"Created: {g.get('created_at')}")
830
 
831
- # ---------------- GAME STATS ----------------
832
- joined = len(players_here)
833
- submitted = sum(1 for p in players_here.values() if p.get("submitted"))
834
 
835
  st.write(f"Players joined: **{joined}**")
836
  st.write(f"Submitted: **{submitted} / {joined}**")
837
 
838
  # ---------------- TOP 3 PLAYERS ----------------
839
- submitted_players = [
840
- (u, d) for u, d in players_here.items() if d.get("submitted")
841
- ]
842
- submitted_players.sort(key=lambda x: x[1].get("score", 0), reverse=True)
843
-
844
- if submitted_players:
845
  st.markdown("๐Ÿ† **Top 3 Players**")
846
- for i, (uname_p, info) in enumerate(submitted_players[:3], start=1):
847
- st.write(
848
- f"{i}. {info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” "
849
- f"{info.get('score',0)} pts ({info.get('percentage',0)}%)"
850
- )
851
 
852
  # ---------------- PLAYER STATUS ----------------
853
- if players_here:
854
  st.markdown("**๐Ÿ‘ฅ Player Status**")
855
- for uname_p, info in players_here.items():
856
- status = "โœ… Submitted" if info.get("submitted") else "โณ Playing"
857
- st.write(f"{info.get('avatar','๐ŸŽฎ')} **{uname_p}** โ€” {status}")
 
 
858
 
859
  st.markdown("---")
860
 
@@ -882,35 +878,44 @@ def home_page():
882
  st.session_state["active_game_id"] = new_id
883
  st.session_state["game_questions"] = games.get(new_id, {}).get("questions", [])
884
  st.success(f"Challenge created: {new_id}")
885
- st.rerun()
886
-
887
-
888
 
889
- # Weekly leaderboard
890
  st.subheader("๐Ÿ† Weekly Leaderboard (Top 10)")
891
  weekly = get_weekly_leaderboard()
892
  if not weekly:
893
  st.info("No scores yet this week.")
894
  else:
895
  for i, r in enumerate(weekly, 1):
896
- st.write(
897
- f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r['name']}** "
898
- f"(Game {r['game_id']}) โ€” {r['score']} pts"
899
- )
900
 
901
- # ----------------------------
902
- # Play Page
903
- if 'active_game' not in st.session_state:
904
- games = unified_get("games") or {}
905
- if games:
906
- first_game = list(games.keys())[0]
907
- st.session_state['active_game'] = first_game
908
- else:
909
- st.warning("No games exist yet. Please create a game first.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
910
 
911
- if 'username' not in st.session_state:
912
- st.session_state['username'] = "Guest" # temporary default username
913
-
914
  def create_game(host=None, topics=[], num_questions=5, auto_close=True, ai_topic=None):
915
  games = unified_get("games") or {}
916
  gid = f"GAME{int(time.time())}"
 
799
  # Home page
800
 
801
  HEARTBEAT_THRESHOLD_SECONDS = 60 # adjust if needed
802
+
803
  def home_page():
804
  st.header("Home")
805
  st.write("Create games, invite friends, play and climb the leaderboard.")
 
809
  total_online = sum(len(v) for v in players_map.values())
810
  st.metric("๐ŸŸข Players Online", total_online)
811
 
812
+ # ---------------- SHOW LAST SCORE ----------------
813
+ last_score = st.session_state.get('last_score')
814
+ last_game = st.session_state.get('last_game')
815
+ if last_score is not None:
816
+ st.success(f"Your last score: {last_score} (Game {last_game})")
 
817
 
818
+ # ---------------- LOAD GAMES ----------------
819
  games = unified_get("games") or {}
 
820
  st.subheader("Recent games")
821
 
822
  for g in sorted(games.values(), key=lambda x: x.get("created_at", ""), reverse=True)[:10]:
823
  gid = g.get("game_id")
824
+
825
+ # Use players/submissions stored in game dict
826
+ players = g.get("players", [])
827
+ submissions = g.get("submissions", {})
828
 
829
  st.markdown(f"### ๐ŸŽฎ Game: **{gid}** {'(Closed)' if g.get('closed') else ''}")
830
  st.write(f"Host: {g.get('host')} โ€” Topics: {', '.join(g.get('topics', []))}")
831
  st.write(f"Created: {g.get('created_at')}")
832
 
833
+ joined = len(players)
834
+ submitted = len(submissions)
 
835
 
836
  st.write(f"Players joined: **{joined}**")
837
  st.write(f"Submitted: **{submitted} / {joined}**")
838
 
839
  # ---------------- TOP 3 PLAYERS ----------------
840
+ if submissions:
 
 
 
 
 
841
  st.markdown("๐Ÿ† **Top 3 Players**")
842
+ top_players = sorted(submissions.items(), key=lambda x: x[1], reverse=True)[:3]
843
+ for i, (uname_p, score) in enumerate(top_players, start=1):
844
+ st.write(f"{i}. ๐ŸŽฎ **{uname_p}** โ€” {score} pts")
 
 
845
 
846
  # ---------------- PLAYER STATUS ----------------
847
+ if players:
848
  st.markdown("**๐Ÿ‘ฅ Player Status**")
849
+ for uname_p in players:
850
+ if uname_p in submissions:
851
+ st.write(f"๐ŸŽฎ **{uname_p}** โ€” โœ… Submitted ({submissions[uname_p]} pts)")
852
+ else:
853
+ st.write(f"๐ŸŽฎ **{uname_p}** โ€” โณ Playing")
854
 
855
  st.markdown("---")
856
 
 
878
  st.session_state["active_game_id"] = new_id
879
  st.session_state["game_questions"] = games.get(new_id, {}).get("questions", [])
880
  st.success(f"Challenge created: {new_id}")
881
+ st.experimental_rerun()
 
 
882
 
883
+ # ---------------- WEEKLY LEADERBOARD ----------------
884
  st.subheader("๐Ÿ† Weekly Leaderboard (Top 10)")
885
  weekly = get_weekly_leaderboard()
886
  if not weekly:
887
  st.info("No scores yet this week.")
888
  else:
889
  for i, r in enumerate(weekly, 1):
890
+ st.write(f"{i}. {r.get('avatar','๐ŸŽฎ')} **{r['name']}** (Game {r['game_id']}) โ€” {r['score']} pts")
 
 
 
891
 
892
+ # ---------------- PLAY PAGE SETUP ----------------
893
+ if 'active_game' not in st.session_state:
894
+ if games:
895
+ st.session_state['active_game'] = list(games.keys())[0]
896
+ else:
897
+ st.warning("No games exist yet. Please create a game first.")
898
+
899
+ if 'username' not in st.session_state:
900
+ st.session_state['username'] = "Guest"
901
+
902
+ # Safely update player submissions if a game is active
903
+ active_game_id = st.session_state.get('active_game')
904
+ if active_game_id and 'final_score' in st.session_state:
905
+ game = unified_get(f"games/{active_game_id}") or {}
906
+ players = game.get("players", [])
907
+ username = st.session_state['username']
908
+
909
+ if username not in players:
910
+ players.append(username)
911
+
912
+ submissions = game.get("submissions", {})
913
+ submissions[username] = st.session_state['final_score']
914
+
915
+ game["players"] = players
916
+ game["submissions"] = submissions
917
+ unified_set(f"games/{active_game_id}", game)
918
 
 
 
 
919
  def create_game(host=None, topics=[], num_questions=5, auto_close=True, ai_topic=None):
920
  games = unified_get("games") or {}
921
  gid = f"GAME{int(time.time())}"