Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -17,9 +17,12 @@ VELOCITY_FACTOR = 0.5
|
|
17 |
FRICTION = 0.98
|
18 |
BOUNCE_FACTOR = -0.8
|
19 |
|
|
|
|
|
|
|
20 |
# Initialize session state
|
21 |
if "player_name" not in st.session_state:
|
22 |
-
st.session_state.player_name =
|
23 |
if "selected_player" not in st.session_state:
|
24 |
st.session_state.selected_player = None
|
25 |
if "player_color" not in st.session_state:
|
@@ -123,8 +126,8 @@ def generate_svg(game_state):
|
|
123 |
svg += f'<animate attributeName="r" values="{PLAYER_SIZE // 8};{PLAYER_SIZE // 10};{PLAYER_SIZE // 8}" dur="3s" repeatCount="indefinite" />'
|
124 |
svg += '</circle>'
|
125 |
|
126 |
-
# Player name
|
127 |
-
svg += f'<text x="{x}" y="{y + PLAYER_SIZE // 2 + 15}" text-anchor="middle" fill="black" font-size="
|
128 |
|
129 |
svg += '</g>'
|
130 |
|
@@ -142,8 +145,10 @@ def generate_svg(game_state):
|
|
142 |
st.set_page_config(layout="wide", page_title="Enhanced Multiplayer Grid Game")
|
143 |
st.title("Enhanced Multiplayer Grid Game")
|
144 |
|
145 |
-
#
|
146 |
-
|
|
|
|
|
147 |
with col1:
|
148 |
player_name = st.text_input("Your name", value=st.session_state.player_name)
|
149 |
if player_name != st.session_state.player_name:
|
@@ -151,7 +156,25 @@ with col1:
|
|
151 |
update_player_position(player_name, 0, 0)
|
152 |
|
153 |
with col2:
|
154 |
-
st.color_picker("Choose
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
155 |
|
156 |
# Create grid
|
157 |
grid = st.empty()
|
@@ -160,26 +183,21 @@ grid = st.empty()
|
|
160 |
js_code = """
|
161 |
let keyState = {};
|
162 |
let lastUpdateTime = Date.now();
|
163 |
-
|
164 |
document.addEventListener('keydown', (e) => {
|
165 |
keyState[e.key.toLowerCase()] = true;
|
166 |
});
|
167 |
-
|
168 |
document.addEventListener('keyup', (e) => {
|
169 |
keyState[e.key.toLowerCase()] = false;
|
170 |
});
|
171 |
-
|
172 |
function updatePlayerPosition() {
|
173 |
const now = Date.now();
|
174 |
const dt = (now - lastUpdateTime) / 1000; // Time difference in seconds
|
175 |
lastUpdateTime = now;
|
176 |
-
|
177 |
let vx = 0, vy = 0;
|
178 |
if (keyState['w']) vy -= 1;
|
179 |
if (keyState['s']) vy += 1;
|
180 |
if (keyState['a']) vx -= 1;
|
181 |
if (keyState['d']) vx += 1;
|
182 |
-
|
183 |
if (vx !== 0 || vy !== 0) {
|
184 |
const magnitude = Math.sqrt(vx * vx + vy * vy);
|
185 |
vx /= magnitude;
|
@@ -187,9 +205,7 @@ function updatePlayerPosition() {
|
|
187 |
window.Streamlit.setComponentValue({vx: vx * dt, vy: vy * dt});
|
188 |
}
|
189 |
}
|
190 |
-
|
191 |
setInterval(updatePlayerPosition, 50); // Update every 50ms for smooth movement
|
192 |
-
|
193 |
function movePlayer(playerId, x, y) {
|
194 |
const player = document.getElementById(playerId);
|
195 |
if (player) {
|
@@ -209,20 +225,6 @@ if "obstacles" not in game_state:
|
|
209 |
]
|
210 |
save_game_state(game_state)
|
211 |
|
212 |
-
# Movement buttons
|
213 |
-
col1, col2, col3 = st.columns(3)
|
214 |
-
with col1:
|
215 |
-
if st.button("↑"):
|
216 |
-
update_player_position(st.session_state.player_name, 0, -1)
|
217 |
-
with col2:
|
218 |
-
if st.button("←"):
|
219 |
-
update_player_position(st.session_state.player_name, -1, 0)
|
220 |
-
if st.button("→"):
|
221 |
-
update_player_position(st.session_state.player_name, 1, 0)
|
222 |
-
with col3:
|
223 |
-
if st.button("↓"):
|
224 |
-
update_player_position(st.session_state.player_name, 0, 1)
|
225 |
-
|
226 |
# Main game loop
|
227 |
def main():
|
228 |
while True:
|
|
|
17 |
FRICTION = 0.98
|
18 |
BOUNCE_FACTOR = -0.8
|
19 |
|
20 |
+
# List of common names
|
21 |
+
COMMON_NAMES = ["Emma", "Liam", "Olivia", "Noah", "Ava", "Ethan", "Sophia", "Mason", "Isabella", "William"]
|
22 |
+
|
23 |
# Initialize session state
|
24 |
if "player_name" not in st.session_state:
|
25 |
+
st.session_state.player_name = random.choice(COMMON_NAMES)
|
26 |
if "selected_player" not in st.session_state:
|
27 |
st.session_state.selected_player = None
|
28 |
if "player_color" not in st.session_state:
|
|
|
126 |
svg += f'<animate attributeName="r" values="{PLAYER_SIZE // 8};{PLAYER_SIZE // 10};{PLAYER_SIZE // 8}" dur="3s" repeatCount="indefinite" />'
|
127 |
svg += '</circle>'
|
128 |
|
129 |
+
# Player name (full name)
|
130 |
+
svg += f'<text x="{x}" y="{y + PLAYER_SIZE // 2 + 15}" text-anchor="middle" fill="black" font-size="10" font-weight="bold">{player}</text>'
|
131 |
|
132 |
svg += '</g>'
|
133 |
|
|
|
145 |
st.set_page_config(layout="wide", page_title="Enhanced Multiplayer Grid Game")
|
146 |
st.title("Enhanced Multiplayer Grid Game")
|
147 |
|
148 |
+
# Controls section
|
149 |
+
st.markdown("### Game Controls")
|
150 |
+
col1, col2, col3, col4, col5 = st.columns([2, 1, 1, 1, 2])
|
151 |
+
|
152 |
with col1:
|
153 |
player_name = st.text_input("Your name", value=st.session_state.player_name)
|
154 |
if player_name != st.session_state.player_name:
|
|
|
156 |
update_player_position(player_name, 0, 0)
|
157 |
|
158 |
with col2:
|
159 |
+
st.color_picker("Choose color", value=st.session_state.player_color, key="player_color")
|
160 |
+
|
161 |
+
with col3:
|
162 |
+
if st.button("↑"):
|
163 |
+
update_player_position(st.session_state.player_name, 0, -1)
|
164 |
+
if st.button("↓"):
|
165 |
+
update_player_position(st.session_state.player_name, 0, 1)
|
166 |
+
|
167 |
+
with col4:
|
168 |
+
col4_1, col4_2, col4_3 = st.columns(3)
|
169 |
+
with col4_1:
|
170 |
+
if st.button("←"):
|
171 |
+
update_player_position(st.session_state.player_name, -1, 0)
|
172 |
+
with col4_3:
|
173 |
+
if st.button("→"):
|
174 |
+
update_player_position(st.session_state.player_name, 1, 0)
|
175 |
+
|
176 |
+
with col5:
|
177 |
+
st.markdown("Use WASD keys for movement")
|
178 |
|
179 |
# Create grid
|
180 |
grid = st.empty()
|
|
|
183 |
js_code = """
|
184 |
let keyState = {};
|
185 |
let lastUpdateTime = Date.now();
|
|
|
186 |
document.addEventListener('keydown', (e) => {
|
187 |
keyState[e.key.toLowerCase()] = true;
|
188 |
});
|
|
|
189 |
document.addEventListener('keyup', (e) => {
|
190 |
keyState[e.key.toLowerCase()] = false;
|
191 |
});
|
|
|
192 |
function updatePlayerPosition() {
|
193 |
const now = Date.now();
|
194 |
const dt = (now - lastUpdateTime) / 1000; // Time difference in seconds
|
195 |
lastUpdateTime = now;
|
|
|
196 |
let vx = 0, vy = 0;
|
197 |
if (keyState['w']) vy -= 1;
|
198 |
if (keyState['s']) vy += 1;
|
199 |
if (keyState['a']) vx -= 1;
|
200 |
if (keyState['d']) vx += 1;
|
|
|
201 |
if (vx !== 0 || vy !== 0) {
|
202 |
const magnitude = Math.sqrt(vx * vx + vy * vy);
|
203 |
vx /= magnitude;
|
|
|
205 |
window.Streamlit.setComponentValue({vx: vx * dt, vy: vy * dt});
|
206 |
}
|
207 |
}
|
|
|
208 |
setInterval(updatePlayerPosition, 50); // Update every 50ms for smooth movement
|
|
|
209 |
function movePlayer(playerId, x, y) {
|
210 |
const player = document.getElementById(playerId);
|
211 |
if (player) {
|
|
|
225 |
]
|
226 |
save_game_state(game_state)
|
227 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
228 |
# Main game loop
|
229 |
def main():
|
230 |
while True:
|