WEBLEB
Início
Editor
Entrar
Pro
Português
English
Français
Español
Português
Deutsch
Italiano
हिंदी
Quadrado Ágil
231
sergioarmijo30
Abrir no Editor
Publique Seu Código
Recomendado
10 December 2024
Um código por agilecloud61
HTML
Copy
Juego de Niveles
Nivel:
1
| Monedas:
0
CSS
Copy
* { margin: 0; padding: 0; box-sizing: border-box; } body { background-color: #111; display: flex; justify-content: center; align-items: center; height: 100vh; color: white; font-family: sans-serif; } #game { position: relative; width: 800px; height: 600px; background-color: #222; border: 3px solid #fff; overflow: hidden; } .player { position: absolute; width: 40px; height: 40px; background-color: lime; } .obstacle { position: absolute; width: 40px; height: 40px; background-color: red; } .coin { position: absolute; width: 20px; height: 20px; background-color: gold; border-radius: 50%; } #info { position: absolute; top: 10px; left: 10px; font-size: 18px; }
JS
Copy
const game = document.getElementById('game'); const levelDisplay = document.getElementById('level'); const coinsDisplay = document.getElementById('coins'); const player = document.createElement('div'); player.classList.add('player'); game.appendChild(player); let playerX = 50, playerY = 280; let coinsCollected = 0; let currentLevel = 1; let coinGoal = 5; let keys = {}; document.addEventListener('keydown', e => keys[e.key] = true); document.addEventListener('keyup', e => keys[e.key] = false); function movePlayer() { const speed = 3; if (keys['ArrowUp']) playerY -= speed; if (keys['ArrowDown']) playerY += speed; if (keys['ArrowLeft']) playerX -= speed; if (keys['ArrowRight']) playerX += speed; playerX = Math.max(0, Math.min(760, playerX)); playerY = Math.max(0, Math.min(560, playerY)); player.style.left = playerX + 'px'; player.style.top = playerY + 'px'; } function createCoin() { const coin = document.createElement('div'); coin.classList.add('coin'); coin.style.left = Math.random() * 780 + 'px'; coin.style.top = Math.random() * 580 + 'px'; game.appendChild(coin); } function createObstacle(speed) { const obs = document.createElement('div'); obs.classList.add('obstacle'); obs.style.left = '800px'; obs.style.top = Math.random() * 560 + 'px'; game.appendChild(obs); const interval = setInterval(() => { let x = parseInt(obs.style.left); if (x < -40) { clearInterval(interval); obs.remove(); } else { obs.style.left = (x - speed) + 'px'; checkCollision(obs); } }, 20); } function checkCollision(obs) { const p = player.getBoundingClientRect(); const o = obs.getBoundingClientRect(); if ( p.left < o.right && p.right > o.left && p.top < o.bottom && p.bottom > o.top ) { let retroceso = Math.max(1, currentLevel - 5); alert('¡Perdiste! Retrocedes a nivel ' + retroceso); currentLevel = retroceso; restartLevel(); } } function checkCoins() { document.querySelectorAll('.coin').forEach(coin => { const p = player.getBoundingClientRect(); const c = coin.getBoundingClientRect(); if ( p.left < c.right && p.right > c.left && p.top < c.bottom && p.bottom > c.top ) { coin.remove(); coinsCollected++; coinsDisplay.textContent = coinsCollected; if (coinsCollected >= coinGoal) { nextLevel(); } } }); } function nextLevel() { currentLevel++; if (currentLevel > 50) { alert('¡Ganaste el juego completo!'); location.reload(); } restartLevel(); } function restartLevel() { levelDisplay.textContent = currentLevel; coinsCollected = 0; coinsDisplay.textContent = 0; coinGoal = 5 + (currentLevel - 1) * 2; playerX = 50; playerY = 280; document.querySelectorAll('.coin').forEach(c => c.remove()); document.querySelectorAll('.obstacle').forEach(o => o.remove()); for (let i = 0; i < coinGoal; i++) createCoin(); } for (let i = 0; i < coinGoal; i++) createCoin(); setInterval(() => { movePlayer(); checkCoins(); }, 20); setInterval(() => { createObstacle(currentLevel + 2); }, 1500);