From b95027dd475921b92113334f21f5af658193a240 Mon Sep 17 00:00:00 2001 From: exestwi Date: Sat, 11 Jul 2026 22:57:44 +0300 Subject: [PATCH] Remove Space Jump mini-game Co-Authored-By: Claude Fable 5 --- index.html | 27 ----------- script.js | 134 ----------------------------------------------------- style.css | 130 --------------------------------------------------- 3 files changed, 291 deletions(-) delete mode 100644 index.html delete mode 100644 script.js delete mode 100644 style.css diff --git a/index.html b/index.html deleted file mode 100644 index 480d363..0000000 --- a/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Space Jump - - - -
-
0
-
Нажми ПРОБЕЛ, чтобы начать
- -
-
- -
-

Игра окончена

-

Счёт: 0

-

Рекорд: 0

-

Пробел — заново

-
-
- - - - diff --git a/script.js b/script.js deleted file mode 100644 index 3e9894a..0000000 --- a/script.js +++ /dev/null @@ -1,134 +0,0 @@ -const game = document.getElementById("game"); -const player = document.getElementById("player"); -const scoreEl = document.getElementById("score"); -const hintEl = document.getElementById("hint"); -const gameOverEl = document.getElementById("gameOver"); -const finalScoreEl = document.getElementById("finalScore"); -const bestScoreEl = document.getElementById("bestScore"); - -const GROUND = 50; // высота земли -const GRAVITY = 0.55; -const JUMP_FORCE = 12; -const START_SPEED = 5; - -let running = false; -let gameOver = false; -let playerY = 0; // высота над землёй -let velocity = 0; -let speed = START_SPEED; -let score = 0; -let best = Number(localStorage.getItem("spaceJumpBest")) || 0; -let obstacles = []; -let spawnTimer = 0; -let lastTime = 0; - -function startGame() { - obstacles.forEach((o) => o.el.remove()); - obstacles = []; - playerY = 0; - velocity = 0; - speed = START_SPEED; - score = 0; - spawnTimer = 0; - running = true; - gameOver = false; - hintEl.style.display = "none"; - gameOverEl.classList.remove("visible"); - scoreEl.textContent = "0"; - lastTime = performance.now(); - requestAnimationFrame(loop); -} - -function jump() { - if (playerY === 0) { - velocity = JUMP_FORCE; - } -} - -function spawnObstacle() { - const el = document.createElement("div"); - el.className = "obstacle"; - const height = 30 + Math.random() * 35; - el.style.height = height + "px"; - game.appendChild(el); - obstacles.push({ el, x: game.clientWidth, height }); -} - -function endGame() { - running = false; - gameOver = true; - best = Math.max(best, score); - localStorage.setItem("spaceJumpBest", best); - finalScoreEl.textContent = score; - bestScoreEl.textContent = best; - gameOverEl.classList.add("visible"); -} - -function loop(now) { - if (!running) return; - const dt = Math.min((now - lastTime) / 16.67, 3); // нормализация к 60 FPS - lastTime = now; - - // физика игрока - velocity -= GRAVITY * dt; - playerY += velocity * dt; - if (playerY <= 0) { - playerY = 0; - velocity = 0; - } - player.style.bottom = GROUND + playerY + "px"; - - // спавн препятствий - spawnTimer -= dt; - if (spawnTimer <= 0) { - spawnObstacle(); - spawnTimer = 60 + Math.random() * 70; - } - - // движение препятствий и столкновения - const playerLeft = 80; - const playerRight = playerLeft + 36; - - for (let i = obstacles.length - 1; i >= 0; i--) { - const o = obstacles[i]; - o.x -= speed * dt; - o.el.style.left = o.x + "px"; - - if (o.x + 22 < 0) { - o.el.remove(); - obstacles.splice(i, 1); - score++; - scoreEl.textContent = score; - speed += 0.15; // чуть быстрее с каждым очком - continue; - } - - const hitX = o.x < playerRight - 6 && o.x + 22 > playerLeft + 6; - const hitY = playerY < o.height - 4; - if (hitX && hitY) { - endGame(); - return; - } - } - - requestAnimationFrame(loop); -} - -document.addEventListener("keydown", (e) => { - if (e.code !== "Space") return; - e.preventDefault(); - if (!running) { - startGame(); - } else { - jump(); - } -}); - -// поддержка тапа/клика для мобильных -game.addEventListener("pointerdown", () => { - if (!running) { - startGame(); - } else { - jump(); - } -}); diff --git a/style.css b/style.css deleted file mode 100644 index 2327a47..0000000 --- a/style.css +++ /dev/null @@ -1,130 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - min-height: 100vh; - display: flex; - align-items: center; - justify-content: center; - background: #12121c; - font-family: "Segoe UI", system-ui, sans-serif; -} - -.game { - position: relative; - width: 800px; - max-width: 95vw; - height: 300px; - overflow: hidden; - border-radius: 12px; - background: linear-gradient(#1b2340, #2c3e66 70%, #3a5080); - box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); -} - -.score { - position: absolute; - top: 14px; - right: 20px; - font-size: 28px; - font-weight: bold; - color: #fff; - text-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); - z-index: 5; -} - -.hint { - position: absolute; - top: 40%; - width: 100%; - text-align: center; - color: rgba(255, 255, 255, 0.85); - font-size: 20px; - letter-spacing: 1px; - z-index: 5; - animation: pulse 1.2s ease-in-out infinite; -} - -@keyframes pulse { - 0%, 100% { opacity: 0.5; } - 50% { opacity: 1; } -} - -.ground { - position: absolute; - bottom: 0; - width: 100%; - height: 50px; - background: #263238; - border-top: 4px solid #4caf7d; -} - -.player { - position: absolute; - left: 80px; - bottom: 50px; - width: 36px; - height: 36px; - border-radius: 8px; - background: #ffca3a; - box-shadow: 0 0 12px rgba(255, 202, 58, 0.6); - z-index: 3; -} - -.player::before, -.player::after { - content: ""; - position: absolute; - top: 9px; - width: 6px; - height: 6px; - border-radius: 50%; - background: #12121c; -} - -.player::before { left: 7px; } -.player::after { right: 7px; } - -.obstacle { - position: absolute; - bottom: 50px; - width: 22px; - border-radius: 4px 4px 0 0; - background: #e5484d; - box-shadow: 0 0 10px rgba(229, 72, 77, 0.5); - z-index: 2; -} - -.game-over { - position: absolute; - inset: 0; - display: none; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 8px; - background: rgba(10, 10, 20, 0.75); - color: #fff; - z-index: 10; -} - -.game-over.visible { - display: flex; -} - -.game-over h1 { - font-size: 34px; - margin-bottom: 6px; -} - -.game-over p { - font-size: 18px; - color: rgba(255, 255, 255, 0.9); -} - -.restart-hint { - margin-top: 10px; - animation: pulse 1.2s ease-in-out infinite; -}