Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -19,13 +19,21 @@ if 'game_state' not in st.session_state:
|
|
19 |
if 'player_name' not in st.session_state:
|
20 |
st.session_state.player_name = None
|
21 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
# Utility functions
|
23 |
def load_tiles(tiles_path="tiles"):
|
24 |
"""Load tile images from the specified directory"""
|
25 |
tiles = {}
|
26 |
if not os.path.exists(tiles_path):
|
27 |
os.makedirs(tiles_path)
|
28 |
-
# Here you would need to add some default tiles
|
29 |
return tiles
|
30 |
|
31 |
for file in os.listdir(tiles_path):
|
@@ -37,7 +45,7 @@ def load_tiles(tiles_path="tiles"):
|
|
37 |
|
38 |
def generate_map(width=20, height=15):
|
39 |
"""Generate a random tile map"""
|
40 |
-
tile_types = ['grass', 'water', 'rock']
|
41 |
return [[random.choice(tile_types) for _ in range(width)] for _ in range(height)]
|
42 |
|
43 |
def save_game_state():
|
@@ -69,6 +77,26 @@ def add_chat_message(player_name, message):
|
|
69 |
})
|
70 |
save_game_state()
|
71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
# Main game UI
|
73 |
def main():
|
74 |
st.title("Multiplayer Tile Game")
|
@@ -80,13 +108,22 @@ def main():
|
|
80 |
submitted = st.form_submit_button("Join Game")
|
81 |
if submitted and player_name:
|
82 |
st.session_state.player_name = player_name
|
|
|
|
|
83 |
st.session_state.game_state['players'][player_name] = {
|
84 |
'position': {'x': 0, 'y': 0},
|
85 |
-
'last_active': time.time()
|
|
|
86 |
}
|
87 |
-
st.
|
88 |
|
89 |
else:
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
# Game layout with columns
|
91 |
col1, col2 = st.columns([2, 1])
|
92 |
|
@@ -127,7 +164,7 @@ def main():
|
|
127 |
# Chat message display
|
128 |
chat_container = st.container()
|
129 |
with chat_container:
|
130 |
-
for message in st.session_state.game_state['chat_messages'][-50:]:
|
131 |
st.text(f"[{message['timestamp']}] {message['player']}: {message['message']}")
|
132 |
|
133 |
# Chat input
|
@@ -135,15 +172,20 @@ def main():
|
|
135 |
message = st.text_input("Message:")
|
136 |
if st.form_submit_button("Send") and message:
|
137 |
add_chat_message(st.session_state.player_name, message)
|
138 |
-
st.
|
139 |
|
140 |
# Logout button
|
141 |
if st.button("Leave Game"):
|
142 |
if st.session_state.player_name in st.session_state.game_state['players']:
|
143 |
del st.session_state.game_state['players'][st.session_state.player_name]
|
144 |
st.session_state.player_name = None
|
|
|
|
|
145 |
save_game_state()
|
146 |
-
st.
|
|
|
|
|
|
|
147 |
|
148 |
if __name__ == "__main__":
|
149 |
load_game_state()
|
|
|
19 |
if 'player_name' not in st.session_state:
|
20 |
st.session_state.player_name = None
|
21 |
|
22 |
+
if 'last_refresh' not in st.session_state:
|
23 |
+
st.session_state.last_refresh = time.time()
|
24 |
+
|
25 |
+
if 'start_time' not in st.session_state:
|
26 |
+
st.session_state.start_time = None
|
27 |
+
|
28 |
+
if 'play_duration' not in st.session_state:
|
29 |
+
st.session_state.play_duration = 0
|
30 |
+
|
31 |
# Utility functions
|
32 |
def load_tiles(tiles_path="tiles"):
|
33 |
"""Load tile images from the specified directory"""
|
34 |
tiles = {}
|
35 |
if not os.path.exists(tiles_path):
|
36 |
os.makedirs(tiles_path)
|
|
|
37 |
return tiles
|
38 |
|
39 |
for file in os.listdir(tiles_path):
|
|
|
45 |
|
46 |
def generate_map(width=20, height=15):
|
47 |
"""Generate a random tile map"""
|
48 |
+
tile_types = ['grass', 'water', 'rock']
|
49 |
return [[random.choice(tile_types) for _ in range(width)] for _ in range(height)]
|
50 |
|
51 |
def save_game_state():
|
|
|
77 |
})
|
78 |
save_game_state()
|
79 |
|
80 |
+
def format_duration(seconds):
|
81 |
+
"""Format duration in seconds to HH:MM:SS"""
|
82 |
+
hours = seconds // 3600
|
83 |
+
minutes = (seconds % 3600) // 60
|
84 |
+
seconds = seconds % 60
|
85 |
+
return f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d}"
|
86 |
+
|
87 |
+
def check_auto_refresh():
|
88 |
+
"""Check if it's time to refresh the page"""
|
89 |
+
current_time = time.time()
|
90 |
+
if current_time - st.session_state.last_refresh >= 5: # 5-second refresh interval
|
91 |
+
st.session_state.last_refresh = current_time
|
92 |
+
st.rerun()
|
93 |
+
|
94 |
+
def update_play_duration():
|
95 |
+
"""Update the player's total play duration"""
|
96 |
+
if st.session_state.start_time is not None:
|
97 |
+
current_time = time.time()
|
98 |
+
st.session_state.play_duration = int(current_time - st.session_state.start_time)
|
99 |
+
|
100 |
# Main game UI
|
101 |
def main():
|
102 |
st.title("Multiplayer Tile Game")
|
|
|
108 |
submitted = st.form_submit_button("Join Game")
|
109 |
if submitted and player_name:
|
110 |
st.session_state.player_name = player_name
|
111 |
+
st.session_state.start_time = time.time()
|
112 |
+
st.session_state.play_duration = 0
|
113 |
st.session_state.game_state['players'][player_name] = {
|
114 |
'position': {'x': 0, 'y': 0},
|
115 |
+
'last_active': time.time(),
|
116 |
+
'score': 0
|
117 |
}
|
118 |
+
st.rerun()
|
119 |
|
120 |
else:
|
121 |
+
# Update play duration
|
122 |
+
update_play_duration()
|
123 |
+
|
124 |
+
# Display play duration
|
125 |
+
st.sidebar.metric("Play Time", format_duration(st.session_state.play_duration))
|
126 |
+
|
127 |
# Game layout with columns
|
128 |
col1, col2 = st.columns([2, 1])
|
129 |
|
|
|
164 |
# Chat message display
|
165 |
chat_container = st.container()
|
166 |
with chat_container:
|
167 |
+
for message in st.session_state.game_state['chat_messages'][-50:]:
|
168 |
st.text(f"[{message['timestamp']}] {message['player']}: {message['message']}")
|
169 |
|
170 |
# Chat input
|
|
|
172 |
message = st.text_input("Message:")
|
173 |
if st.form_submit_button("Send") and message:
|
174 |
add_chat_message(st.session_state.player_name, message)
|
175 |
+
st.rerun()
|
176 |
|
177 |
# Logout button
|
178 |
if st.button("Leave Game"):
|
179 |
if st.session_state.player_name in st.session_state.game_state['players']:
|
180 |
del st.session_state.game_state['players'][st.session_state.player_name]
|
181 |
st.session_state.player_name = None
|
182 |
+
st.session_state.start_time = None
|
183 |
+
st.session_state.play_duration = 0
|
184 |
save_game_state()
|
185 |
+
st.rerun()
|
186 |
+
|
187 |
+
# Auto-refresh check
|
188 |
+
check_auto_refresh()
|
189 |
|
190 |
if __name__ == "__main__":
|
191 |
load_game_state()
|