Spaces:
Running
Running
Update index.html
Browse files- index.html +46 -1
index.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
-
<title>Tank Game</title>
|
7 |
<style>
|
8 |
body { margin: 0; overflow: hidden; font-family: Arial, sans-serif; }
|
9 |
#gameArea { width: 100vw; height: 100vh; background-color: #f0f0f0; }
|
@@ -35,11 +35,15 @@
|
|
35 |
const MAX_TANKS = 5;
|
36 |
const MAX_TANKS_ON_SCREEN = 50;
|
37 |
const SPAWN_DELAY = 5000; // 5 seconds in milliseconds
|
|
|
|
|
38 |
|
39 |
let score = 0;
|
40 |
let level = 1;
|
41 |
let spawnQueue = [];
|
42 |
let lastSpawnTime = 0;
|
|
|
|
|
43 |
|
44 |
class Tank {
|
45 |
constructor(x, y, color, isPlayer = false) {
|
@@ -211,6 +215,9 @@
|
|
211 |
|
212 |
document.addEventListener('keydown', (event) => {
|
213 |
keys[event.key.toLowerCase()] = true;
|
|
|
|
|
|
|
214 |
});
|
215 |
|
216 |
document.addEventListener('keyup', (event) => {
|
@@ -277,6 +284,40 @@
|
|
277 |
}, 2000);
|
278 |
}
|
279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
280 |
function gameLoop() {
|
281 |
updatePlayerPosition();
|
282 |
player.update();
|
@@ -292,6 +333,10 @@
|
|
292 |
checkCollisions();
|
293 |
spawnEnemies();
|
294 |
|
|
|
|
|
|
|
|
|
295 |
if (aiTanks.length === 0 && spawnQueue.length === 0) {
|
296 |
updateLevel();
|
297 |
}
|
|
|
3 |
<head>
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
+
<title>Tank Game with Shockwave</title>
|
7 |
<style>
|
8 |
body { margin: 0; overflow: hidden; font-family: Arial, sans-serif; }
|
9 |
#gameArea { width: 100vw; height: 100vh; background-color: #f0f0f0; }
|
|
|
35 |
const MAX_TANKS = 5;
|
36 |
const MAX_TANKS_ON_SCREEN = 50;
|
37 |
const SPAWN_DELAY = 5000; // 5 seconds in milliseconds
|
38 |
+
const SHOCKWAVE_RADIUS = 150;
|
39 |
+
const SHOCKWAVE_DURATION = 1000; // 1 second in milliseconds
|
40 |
|
41 |
let score = 0;
|
42 |
let level = 1;
|
43 |
let spawnQueue = [];
|
44 |
let lastSpawnTime = 0;
|
45 |
+
let shockwaveActive = false;
|
46 |
+
let shockwaveStartTime = 0;
|
47 |
|
48 |
class Tank {
|
49 |
constructor(x, y, color, isPlayer = false) {
|
|
|
215 |
|
216 |
document.addEventListener('keydown', (event) => {
|
217 |
keys[event.key.toLowerCase()] = true;
|
218 |
+
if (event.code === 'Space' && !shockwaveActive) {
|
219 |
+
activateShockwave();
|
220 |
+
}
|
221 |
});
|
222 |
|
223 |
document.addEventListener('keyup', (event) => {
|
|
|
284 |
}, 2000);
|
285 |
}
|
286 |
|
287 |
+
function activateShockwave() {
|
288 |
+
shockwaveActive = true;
|
289 |
+
shockwaveStartTime = Date.now();
|
290 |
+
|
291 |
+
const shockwave = document.createElementNS(svgNS, "circle");
|
292 |
+
shockwave.setAttribute("cx", player.x);
|
293 |
+
shockwave.setAttribute("cy", player.y);
|
294 |
+
shockwave.setAttribute("r", 0);
|
295 |
+
shockwave.setAttribute("fill", "none");
|
296 |
+
shockwave.setAttribute("stroke", "rgba(0, 255, 255, 0.5)");
|
297 |
+
shockwave.setAttribute("stroke-width", "5");
|
298 |
+
svg.appendChild(shockwave);
|
299 |
+
|
300 |
+
const expandShockwave = setInterval(() => {
|
301 |
+
const currentRadius = parseFloat(shockwave.getAttribute("r"));
|
302 |
+
if (currentRadius < SHOCKWAVE_RADIUS) {
|
303 |
+
shockwave.setAttribute("r", currentRadius + 5);
|
304 |
+
} else {
|
305 |
+
clearInterval(expandShockwave);
|
306 |
+
setTimeout(() => {
|
307 |
+
shockwave.remove();
|
308 |
+
}, 200);
|
309 |
+
}
|
310 |
+
}, 20);
|
311 |
+
|
312 |
+
// Check for enemy tanks within shockwave radius
|
313 |
+
aiTanks.forEach(tank => {
|
314 |
+
if (distance(player, tank) <= SHOCKWAVE_RADIUS) {
|
315 |
+
tank.explode();
|
316 |
+
updateScore(10);
|
317 |
+
}
|
318 |
+
});
|
319 |
+
}
|
320 |
+
|
321 |
function gameLoop() {
|
322 |
updatePlayerPosition();
|
323 |
player.update();
|
|
|
333 |
checkCollisions();
|
334 |
spawnEnemies();
|
335 |
|
336 |
+
if (shockwaveActive && Date.now() - shockwaveStartTime > SHOCKWAVE_DURATION) {
|
337 |
+
shockwaveActive = false;
|
338 |
+
}
|
339 |
+
|
340 |
if (aiTanks.length === 0 && spawnQueue.length === 0) {
|
341 |
updateLevel();
|
342 |
}
|