Spaces:
Running
Running
Update app.py
Browse files
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 |
-
#
|
| 812 |
-
|
| 813 |
-
|
| 814 |
-
|
| 815 |
-
|
| 816 |
-
)
|
| 817 |
|
| 818 |
-
#
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 832 |
-
|
| 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 |
-
|
| 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 |
-
|
| 847 |
-
|
| 848 |
-
|
| 849 |
-
f"{info.get('score',0)} pts ({info.get('percentage',0)}%)"
|
| 850 |
-
)
|
| 851 |
|
| 852 |
# ---------------- PLAYER STATUS ----------------
|
| 853 |
-
if
|
| 854 |
st.markdown("**๐ฅ Player Status**")
|
| 855 |
-
for uname_p
|
| 856 |
-
|
| 857 |
-
|
|
|
|
|
|
|
| 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.
|
| 886 |
-
|
| 887 |
-
|
| 888 |
|
| 889 |
-
#
|
| 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 |
-
|
| 903 |
-
if
|
| 904 |
-
|
| 905 |
-
|
| 906 |
-
|
| 907 |
-
|
| 908 |
-
|
| 909 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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())}"
|