'use strict'; const upButton = document.getElementById('up'); const downButton = document.getElementById('down'); const leftButton = document.getElementById('left'); const rightButton = document.getElementById('right'); const startButton = document.getElementById('start'); const grid = document.createElement('div'); grid.id = 'grid'; document.querySelector('.game').appendChild(grid); let snake = [{ x: 5, y: 5 }]; let apple = { x: 8, y: 5 }; let direction = { x: 0, y: 0 }; let gameInterval = null; let isGameRunning = false; const gridSize = 10; function initGame() { grid.style.display = 'grid'; grid.style.gridTemplateColumns = `repeat(${gridSize}, 1fr)`; grid.style.gridTemplateRows = `repeat(${gridSize}, 1fr)`; grid.style.width = '350px'; grid.style.height = '350px'; document.getElementById('title').style.display = 'none'; document.getElementById('description').style.display = 'none'; isGameRunning = true; snake = [{ x: 5, y: 5 }]; apple = spawnApple(); direction = { x: 0, y: 0 }; clearInterval(gameInterval); gameInterval = setInterval(gameLoop, 200); render(); } function spawnApple() { let newApple; do { newApple = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) }; } while (snake.some(segment => segment.x === newApple.x && segment.y === newApple.y)); return newApple; } function updateSnake() { const newHead = { x: snake[0].x + direction.x, y: snake[0].y + direction.y }; if (newHead.x < 0) newHead.x = gridSize - 1; if (newHead.y < 0) newHead.y = gridSize - 1; if (newHead.x >= gridSize) newHead.x = 0; if (newHead.y >= gridSize) newHead.y = 0; if (snake.some(segment => segment.x === newHead.x && segment.y === newHead.y)) { gameOver(); return; } snake.unshift(newHead); if (newHead.x === apple.x && newHead.y === apple.y) { apple = spawnApple(); } else { snake.pop(); } } function render() { grid.innerHTML = ""; for (let y = 0; y < gridSize; y++) { for (let x = 0; x < gridSize; x++) { const cell = document.createElement("div"); cell.classList.add("cell"); if ((x + y) % 2 === 0) { cell.classList.add("light-green"); } else { cell.classList.add("dark-green"); } if (snake.some(segment => segment.x === x && segment.y === y)) { cell.classList.add("snake"); } if (apple.x === x && apple.y === y) { cell.classList.add("apple"); } grid.appendChild(cell); } } } function gameLoop() { if (!isGameRunning) return; updateSnake(); render(); } function gameOver() { alert('Game Over!'); clearInterval(gameInterval); isGameRunning = false; } function handleDirectionInput(key) { switch (key) { case 'ArrowUp': case 'w': if (direction.y === 0) direction = { x: 0, y: -1 }; break; case 'ArrowDown': case 's': if (direction.y === 0) direction = { x: 0, y: 1 }; break; case 'ArrowLeft': case 'a': if (direction.x === 0) direction = { x: -1, y: 0 }; break; case 'ArrowRight': case 'd': if (direction.x === 0) direction = { x: 1, y: 0 }; break; } } upButton.addEventListener('click', () => handleDirectionInput('ArrowUp')); downButton.addEventListener('click', () => handleDirectionInput('ArrowDown')); leftButton.addEventListener('click', () => handleDirectionInput('ArrowLeft')); rightButton.addEventListener('click', () => handleDirectionInput('ArrowRight')); startButton.addEventListener('click', () => { if (!isGameRunning) initGame(); }); document.addEventListener('keydown', (event) => { handleDirectionInput(event.key); });