awacke1 commited on
Commit
b087c88
·
verified ·
1 Parent(s): 926ba33

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -7
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'] # Example tile types
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.experimental_rerun()
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:]: # Show last 50 messages
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.experimental_rerun()
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.experimental_rerun()
 
 
 
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()