awacke1 commited on
Commit
5afbcd4
ยท
verified ยท
1 Parent(s): e195f01

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -41
app.py CHANGED
@@ -9,10 +9,6 @@ from pathlib import Path
9
  import base64
10
  from io import BytesIO
11
  import numpy as np
12
- from py_mp import CommandServer, CommandClient, ClientCommand, ServerSideServerCommand
13
- from py_mp.commands import NetworkFlag
14
- import threading
15
- import queue
16
 
17
  # ๐ŸŽฎ Game Constants
18
  GRID_WIDTH = 16
@@ -21,15 +17,6 @@ REFRESH_RATE = 5
21
  INTERACTION_RADIUS = 2
22
  POINTS_PER_INTERACTION = 1
23
 
24
- # ๐ŸŒ Network Settings
25
- SERVER_HOST = "localhost"
26
- SERVER_PORT = 5000
27
- message_queue = queue.Queue()
28
-
29
- # โฐ Time Sync
30
- def get_server_time():
31
- return time.time()
32
-
33
  # ๐ŸŽจ Resource Management
34
  @st.cache_resource(show_spinner="Loading game resources...")
35
  def get_game_images():
@@ -49,6 +36,10 @@ def get_name_components():
49
  'is', 'ax', 'on', 'ir', 'ex', 'az', 'er', 'eth', 'ys', 'ix']
50
  }
51
 
 
 
 
 
52
  # ๐Ÿ”„ Player Synchronization
53
  @st.cache_data(ttl=2)
54
  def load_all_players(timestamp):
@@ -65,6 +56,10 @@ def load_all_players(timestamp):
65
  continue
66
  return {'players': players, 'last_update': timestamp}
67
 
 
 
 
 
68
  # ๐Ÿ”„ Auto-Refresh Implementation
69
  def create_autorefresh():
70
  refresh_html = """
@@ -72,18 +67,8 @@ def create_autorefresh():
72
  let lastUpdate = Date.now();
73
  let serverTimeOffset = 0;
74
 
75
- async function syncTime() {
76
- const response = await fetch('/server_time');
77
- const serverTime = await response.json();
78
- serverTimeOffset = serverTime - Date.now();
79
- }
80
-
81
- function getServerTime() {
82
- return Date.now() + serverTimeOffset;
83
- }
84
-
85
  function checkForUpdates() {
86
- const now = getServerTime();
87
  if (now - lastUpdate >= 5000) {
88
  lastUpdate = now;
89
  window.parent.document.querySelector('.stApp').classList.add('refreshing');
@@ -92,14 +77,10 @@ def create_autorefresh():
92
  }
93
 
94
  function startAutoRefresh() {
95
- syncTime();
96
- setInterval(syncTime, 30000);
97
  setInterval(checkForUpdates, 1000);
98
-
99
  document.addEventListener('visibilitychange', function() {
100
  if (!document.hidden) {
101
- syncTime();
102
- lastUpdate = getServerTime() - 4900;
103
  }
104
  });
105
  }
@@ -121,17 +102,37 @@ def save_game_state():
121
  'x': str(st.session_state.position['x']),
122
  'y': str(st.session_state.position['y']),
123
  **{k: str(v) for k, v in st.session_state.character_stats.items()},
124
- 'last_sync': str(get_server_time())
125
  }
126
  st.query_params.from_dict(params)
127
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  # ๐ŸŽฒ Game State Initialization
129
  if 'initialized' not in st.session_state:
130
  st.session_state.initialized = False
131
  st.session_state.game_state = {
132
  'players': {},
133
  'chat_messages': [],
134
- 'last_sync': get_server_time()
135
  }
136
  st.session_state.player_name = None
137
  st.session_state.character_stats = None
@@ -139,8 +140,9 @@ if 'initialized' not in st.session_state:
139
  'x': random.randint(0, GRID_WIDTH - 1),
140
  'y': random.randint(0, GRID_HEIGHT - 1)
141
  }
142
- st.session_state.last_move = get_server_time()
143
  st.session_state.nearby_players = []
 
144
 
145
  # ๐ŸŽฎ Player State Management
146
  def save_player_state():
@@ -149,7 +151,7 @@ def save_player_state():
149
  'name': st.session_state.player_name,
150
  'position': st.session_state.position,
151
  'stats': st.session_state.character_stats,
152
- 'last_update': get_server_time()
153
  }
154
  os.makedirs('players', exist_ok=True)
155
  with open(f"players/{st.session_state.player_name}.json", 'w') as f:
@@ -172,12 +174,12 @@ def update_position(direction):
172
  st.session_state.position['x'] = (st.session_state.position['x'] - 1) % GRID_WIDTH
173
  elif direction == "right":
174
  st.session_state.position['x'] = (st.session_state.position['x'] + 1) % GRID_WIDTH
175
- st.session_state.last_move = get_server_time()
176
  save_player_state()
177
 
178
  # ๐Ÿ‘ฅ Nearby Players Update
179
  def update_nearby_players():
180
- current_time = get_server_time()
181
  all_players = load_all_players(current_time)['players']
182
  nearby = []
183
  score_gain = 0
@@ -199,10 +201,9 @@ def update_nearby_players():
199
 
200
  # ๐ŸŽจ Game Board Creation
201
  def create_game_board():
202
- current_time = get_server_time()
203
  all_players = load_all_players(current_time)['players']
204
  images = get_game_images()
205
-
206
  for y in range(GRID_HEIGHT):
207
  cols = st.columns(GRID_WIDTH)
208
  for x in range(GRID_WIDTH):
@@ -211,7 +212,6 @@ def create_game_board():
211
  if (player_data['position']['x'] == x and
212
  player_data['position']['y'] == y):
213
  player_here = player_name
214
-
215
  if x == st.session_state.position['x'] and y == st.session_state.position['y']:
216
  cols[x].image(images['player'], use_column_width=True)
217
  cols[x].markdown(f"**You** ({st.session_state.character_stats['score']} pts)")
@@ -244,7 +244,7 @@ def main():
244
  'HP': random.randint(1, 20) * 2 + random.randint(1, 20),
245
  'MAX_HP': 40,
246
  'score': 0,
247
- 'created_at': get_server_time()
248
  }
249
  save_player_state()
250
  st.rerun()
@@ -274,8 +274,7 @@ def main():
274
 
275
  if st.sidebar.button("Clear Game State"):
276
  st.query_params.clear()
277
- st.cache_resource.clear()
278
- st.cache_data.clear()
279
  st.rerun()
280
 
281
  st.title("Multiplayer Tile Game")
 
9
  import base64
10
  from io import BytesIO
11
  import numpy as np
 
 
 
 
12
 
13
  # ๐ŸŽฎ Game Constants
14
  GRID_WIDTH = 16
 
17
  INTERACTION_RADIUS = 2
18
  POINTS_PER_INTERACTION = 1
19
 
 
 
 
 
 
 
 
 
 
20
  # ๐ŸŽจ Resource Management
21
  @st.cache_resource(show_spinner="Loading game resources...")
22
  def get_game_images():
 
36
  'is', 'ax', 'on', 'ir', 'ex', 'az', 'er', 'eth', 'ys', 'ix']
37
  }
38
 
39
+ def generate_fantasy_name():
40
+ name_parts = get_name_components()
41
+ return random.choice(name_parts['prefixes']) + random.choice(name_parts['suffixes'])
42
+
43
  # ๐Ÿ”„ Player Synchronization
44
  @st.cache_data(ttl=2)
45
  def load_all_players(timestamp):
 
56
  continue
57
  return {'players': players, 'last_update': timestamp}
58
 
59
+ def clear_caches():
60
+ st.cache_resource.clear()
61
+ st.cache_data.clear()
62
+
63
  # ๐Ÿ”„ Auto-Refresh Implementation
64
  def create_autorefresh():
65
  refresh_html = """
 
67
  let lastUpdate = Date.now();
68
  let serverTimeOffset = 0;
69
 
 
 
 
 
 
 
 
 
 
 
70
  function checkForUpdates() {
71
+ const now = Date.now();
72
  if (now - lastUpdate >= 5000) {
73
  lastUpdate = now;
74
  window.parent.document.querySelector('.stApp').classList.add('refreshing');
 
77
  }
78
 
79
  function startAutoRefresh() {
 
 
80
  setInterval(checkForUpdates, 1000);
 
81
  document.addEventListener('visibilitychange', function() {
82
  if (!document.hidden) {
83
+ lastUpdate = Date.now() - 4900;
 
84
  }
85
  });
86
  }
 
102
  'x': str(st.session_state.position['x']),
103
  'y': str(st.session_state.position['y']),
104
  **{k: str(v) for k, v in st.session_state.character_stats.items()},
105
+ 'last_sync': str(time.time())
106
  }
107
  st.query_params.from_dict(params)
108
 
109
+ def load_game_state():
110
+ if 'player_name' in st.query_params:
111
+ st.session_state.player_name = st.query_params.player_name
112
+ st.session_state.position = {
113
+ 'x': int(st.query_params.get('x', random.randint(0, GRID_WIDTH - 1))),
114
+ 'y': int(st.query_params.get('y', random.randint(0, GRID_HEIGHT - 1)))
115
+ }
116
+ st.session_state.character_stats = {
117
+ 'STR': int(st.query_params.get('STR', 10)),
118
+ 'DEX': int(st.query_params.get('DEX', 10)),
119
+ 'CON': int(st.query_params.get('CON', 10)),
120
+ 'INT': int(st.query_params.get('INT', 10)),
121
+ 'WIS': int(st.query_params.get('WIS', 10)),
122
+ 'CHA': int(st.query_params.get('CHA', 10)),
123
+ 'HP': int(st.query_params.get('HP', 20)),
124
+ 'MAX_HP': int(st.query_params.get('MAX_HP', 40)),
125
+ 'score': int(st.query_params.get('score', 0)),
126
+ 'created_at': float(st.query_params.get('created_at', time.time()))
127
+ }
128
+
129
  # ๐ŸŽฒ Game State Initialization
130
  if 'initialized' not in st.session_state:
131
  st.session_state.initialized = False
132
  st.session_state.game_state = {
133
  'players': {},
134
  'chat_messages': [],
135
+ 'last_sync': time.time()
136
  }
137
  st.session_state.player_name = None
138
  st.session_state.character_stats = None
 
140
  'x': random.randint(0, GRID_WIDTH - 1),
141
  'y': random.randint(0, GRID_HEIGHT - 1)
142
  }
143
+ st.session_state.last_move = time.time()
144
  st.session_state.nearby_players = []
145
+ load_game_state()
146
 
147
  # ๐ŸŽฎ Player State Management
148
  def save_player_state():
 
151
  'name': st.session_state.player_name,
152
  'position': st.session_state.position,
153
  'stats': st.session_state.character_stats,
154
+ 'last_update': time.time()
155
  }
156
  os.makedirs('players', exist_ok=True)
157
  with open(f"players/{st.session_state.player_name}.json", 'w') as f:
 
174
  st.session_state.position['x'] = (st.session_state.position['x'] - 1) % GRID_WIDTH
175
  elif direction == "right":
176
  st.session_state.position['x'] = (st.session_state.position['x'] + 1) % GRID_WIDTH
177
+ st.session_state.last_move = time.time()
178
  save_player_state()
179
 
180
  # ๐Ÿ‘ฅ Nearby Players Update
181
  def update_nearby_players():
182
+ current_time = time.time()
183
  all_players = load_all_players(current_time)['players']
184
  nearby = []
185
  score_gain = 0
 
201
 
202
  # ๐ŸŽจ Game Board Creation
203
  def create_game_board():
204
+ current_time = time.time()
205
  all_players = load_all_players(current_time)['players']
206
  images = get_game_images()
 
207
  for y in range(GRID_HEIGHT):
208
  cols = st.columns(GRID_WIDTH)
209
  for x in range(GRID_WIDTH):
 
212
  if (player_data['position']['x'] == x and
213
  player_data['position']['y'] == y):
214
  player_here = player_name
 
215
  if x == st.session_state.position['x'] and y == st.session_state.position['y']:
216
  cols[x].image(images['player'], use_column_width=True)
217
  cols[x].markdown(f"**You** ({st.session_state.character_stats['score']} pts)")
 
244
  'HP': random.randint(1, 20) * 2 + random.randint(1, 20),
245
  'MAX_HP': 40,
246
  'score': 0,
247
+ 'created_at': time.time()
248
  }
249
  save_player_state()
250
  st.rerun()
 
274
 
275
  if st.sidebar.button("Clear Game State"):
276
  st.query_params.clear()
277
+ clear_caches()
 
278
  st.rerun()
279
 
280
  st.title("Multiplayer Tile Game")