HTML-код простой игры «Змейка» с JavaScript

Вот пример простой игры «Змейка», реализованной на HTML, CSS и JavaScript:

<!DOCTYPE html>
<html>
<head>
    <title>Snake Game</title>
    <style>
        #game-board {
            border: 1px solid black;
            width: 400px;
            height: 400px;
            position: relative;
        }
        .snake-part {
            width: 20px;
            height: 20px;
            position: absolute;
        }
        .food {
            width: 20px;
            height: 20px;
            position: absolute;
            background-color: red;
        }
    </style>
</head>
<body>
    <h1>Snake Game</h1>
    <div id="game-board"></div>
    <script>
        const gameBoard = document.getElementById('game-board');
        const snakePartSize = 20;
        const initialSnakeLength = 3;
        let snake = [];
        let food = null;
        let direction = 'right';
        function createSnake() {
            for (let i = initialSnakeLength - 1; i >= 0; i--) {
                snake.push({ x: i, y: 0 });
            }
        }
        function drawSnake() {
            gameBoard.innerHTML = '';
            snake.forEach(part => {
                const snakePart = document.createElement('div');
                snakePart.style.left = part.x * snakePartSize + 'px';
                snakePart.style.top = part.y * snakePartSize + 'px';
                snakePart.classList.add('snake-part');
                gameBoard.appendChild(snakePart);
            });
        }
        function createFood() {
            const foodX = Math.floor(Math.random() * (gameBoard.offsetWidth / snakePartSize));
            const foodY = Math.floor(Math.random() * (gameBoard.offsetHeight / snakePartSize));
            food = { x: foodX, y: foodY };
            const foodElement = document.createElement('div');
            foodElement.style.left = food.x * snakePartSize + 'px';
            foodElement.style.top = food.y * snakePartSize + 'px';
            foodElement.classList.add('food');
            gameBoard.appendChild(foodElement);
        }
        function moveSnake() {
            const head = { x: snake[0].x, y: snake[0].y };
            switch (direction) {
                case 'up':
                    head.y--;
                    break;
                case 'down':
                    head.y++;
                    break;
                case 'left':
                    head.x--;
                    break;
                case 'right':
                    head.x++;
                    break;
            }
            snake.unshift(head);
            if (head.x === food.x && head.y === food.y) {
                createFood();
            } else {
                snake.pop();
            }
        }
        function changeDirection(event) {
            const keyPressed = event.keyCode;
            switch (keyPressed) {
                case 37:
                    if (direction !== 'right') {
                        direction = 'left';
                    }
                    break;
                case 38:
                    if (direction !== 'down') {
                        direction = 'up';
                    }
                    break;
                case 39:
                    if (direction !== 'left') {
                        direction = 'right';
                    }
                    break;
                case 40:
                    if (direction !== 'up') {
                        direction = 'down';
                    }
                    break;
            }
        }
        function checkCollision() {
            const head = snake[0];
            if (
                head.x < 0 ||
                head.x >= gameBoard.offsetWidth / snakePartSize ||
                head.y < 0 ||
                head.y >= gameBoard.offsetHeight / snakePartSize
            ) {
                clearInterval(gameLoop);
                alert('Game Over!');
            }
            for (let i = 1; i < snake.length; i++) {
                if (head.x === snake[i].x && head.y === snake[i].y) {
                    clearInterval(gameLoop);
                    alert('Game Over!');
                    break;
                }
            }
        }
        createSnake();
        drawSnake();
        createFood();
        const gameLoop = setInterval(() => {
            moveSnake();
            drawSnake();
            checkCollision();
        }, 200);
        document.addEventListener('keydown', changeDirection);
    </script>
</body>
</html>

Этот код создает простую игру «Змея», в которой игрок управляет змеей, которая поедает пищу и растет дольше. Игра реализована с использованием HTML, CSS и JavaScript. Змея управляется с помощью клавиш со стрелками, и игра заканчивается, если змея сталкивается с границами игрового поля или сама с собой.