проверь логику игры, интерфес игры проверь и иправь все ошибки <!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Игра Tower Defense</title>
    <style>
        body {
            margin: 0;
            background-color: #1e1e1e;
            color: #fff;
            font-family: Arial, sans-serif;
            overflow: hidden;
        }

        #gameCanvas {
            display: none; /* Изначально скрыт */
            margin: 0 auto;
            background-color: #333;
            border: 2px solid #555;
        }

        /* Стили для основного меню */
        #mainMenu {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: #1e1e1e;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            animation: fadeIn 1s;
        }

        #mainMenu h1 {
            font-size: 64px;
            margin-bottom: 50px;
            color: #f0db4f;
            animation: slideDown 1s;
        }

        #mainMenu button {
            margin: 15px;
            padding: 20px;
            font-size: 24px;
            width: 250px;
            cursor: pointer;
            background-color: #f0db4f;
            border: none;
            border-radius: 5px;
            color: #1e1e1e;
            transition: background-color 0.3s, transform 0.3s;
        }

        #mainMenu button:hover {
            background-color: #ffd700;
            transform: scale(1.05);
        }

        /* Анимации */
        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        @keyframes slideDown {
            from { transform: translateY(-50px); opacity: 0; }
            to { transform: translateY(0); opacity: 1; }
        }

        /* Стили для пользовательского интерфейса */
        #ui {
            position: absolute;
            top: 10px;
            left: 50%;
            transform: translateX(-50%);
            text-align: center;
            display: none;
            color: #fff;
        }

        #info {
            display: inline-block;
            margin-right: 20px;
        }

        #info p {
            margin: 5px;
            font-size: 18px;
        }

        #towerSelection {
            display: inline-block;
        }

        #towerSelection p {
            margin: 5px;
            font-size: 20px;
        }

        #towerSelection button {
            margin: 5px;
            padding: 10px 15px;
            font-size: 16px;
            cursor: pointer;
            background-color: #555;
            border: none;
            border-radius: 5px;
            color: #fff;
            transition: background-color 0.3s, transform 0.3s;
        }

        #towerSelection button:hover {
            background-color: #777;
            transform: scale(1.05);
        }

        /* Стили для меню улучшения башни */
        #upgradeMenu {
            display: none;
            position: absolute;
            background-color: rgba(0, 0, 0, 0.9);
            padding: 10px;
            border: 1px solid #fff;
            color: #fff;
            border-radius: 5px;
            z-index: 1000;
            width: 200px;
        }

        #upgradeMenu p {
            margin: 5px;
            font-size: 16px;
        }

        #upgradeMenu button {
            margin: 5px;
            padding: 10px;
            width: 80px;
            font-size: 14px;
            cursor: pointer;
            background-color: #f0db4f;
            border: none;
            border-radius: 5px;
            color: #1e1e1e;
            transition: background-color 0.3s, transform 0.3s;
        }

        #upgradeMenu button:hover {
            background-color: #ffd700;
            transform: scale(1.05);
        }
    </style>
</head>
<body>
    <!-- Главное меню -->
    <div id="mainMenu">
        <h1>Tower Defense</h1>
        <button id="startBtn">Старт</button>
        <button id="settingsBtn">Настройки</button>
        <button id="leaderboardBtn">Рейтинг</button>
    </div>

    <!-- Канвас игры -->
    <canvas id="gameCanvas" width="800" height="600"></canvas>

    <!-- Пользовательский интерфейс -->
    <div id="ui">
        <div id="info">
            <p>Жизни: <span id="lives">20</span></p>
            <p>Деньги: $<span id="money">200</span></p>
            <p>Уровень: <span id="level">1</span></p>
            <p>Очки: <span id="score">0</span></p>
        </div>
        <div id="towerSelection">
            <p>Выберите башню:</p>
            <button id="basicTowerBtn">Базовая ($50)</button>
            <button id="slowTowerBtn">Замедляющая ($75)</button>
            <button id="aoeTowerBtn">Площадная ($100)</button>
            <button id="sniperTowerBtn">Снайперская ($150)</button>
        </div>
    </div>

    <!-- Скрипт игры -->
    <script>
        // Получаем элементы DOM
        const canvas = document.getElementById('gameCanvas');
        const ctx = canvas.getContext('2d');
        const mainMenu = document.getElementById('mainMenu');
        const startBtn = document.getElementById('startBtn');
        const settingsBtn = document.getElementById('settingsBtn');
        const leaderboardBtn = document.getElementById('leaderboardBtn');
        const ui = document.getElementById('ui');
        const upgradeMenu = document.createElement('div');
        upgradeMenu.id = 'upgradeMenu';
        document.body.appendChild(upgradeMenu);

        // Параметры игры
        const game = {
            width: canvas.width,
            height: canvas.height,
            towers: [],
            enemies: [],
            bullets: [],
            money: 200,
            lives: 20,
            level: 1,
            enemySpawnInterval: 2000,
            lastEnemySpawn: 0,
            selectedTowerType: null,
            isBuilding: false,
            path: [],
            maxLevels: 10,
            levelInProgress: false,
            score: 0,
            nextEnemyId: 1,
            paused: false,
            gameOver: false
        };

        // Обновление интерфейса
        function updateUI() {
            document.getElementById('lives').textContent = game.lives;
            document.getElementById('money').textContent = game.money;
            document.getElementById('level').textContent = game.level;
            document.getElementById('score').textContent = game.score;
        }

        // Класс Башни
        class Tower {
            // ... (Код класса Tower без изменений)
            constructor(x, y, type) {
                // Ваш код здесь
            }
            // ...
        }

        // Класс Врага
        class Enemy {
            // ... (Код класса Enemy без изменений)
            constructor(path, type, id) {
                // Ваш код здесь
            }
            // ...
        }

        // Класс Пули
        class Bullet {
            // ... (Код класса Bullet без изменений)
            constructor(x, y, target, tower) {
                // Ваш код здесь
            }
            // ...
        }

        // Создание пути врагов
        function createPath() {
            // Ваш код здесь
        }

        // Генерация врагов для текущего уровня
        function spawnEnemies() {
            // Ваш код здесь
        }

        // Проверка окончания уровня
        function checkLevelEnd() {
            // Ваш код здесь
        }

        function resetLevel() {
            // Ваш код здесь
        }

        // Начало уровня
        function startLevel() {
            game.levelInProgress = true;
            game.enemySpawnInterval = Math.max(500, 2000 - game.level * 100);
            game.lastEnemySpawn = Date.now() - game.enemySpawnInterval;
        }

        // Отображение пути
        function drawPath() {
            // Ваш код здесь
        }

        // Главный цикл игры
        let lastTime = 0;
        function gameLoop(timestamp) {
            if (game.paused) {
                requestAnimationFrame(gameLoop);
                return;
            }
            const deltaTime = timestamp - lastTime;
            lastTime = timestamp;

            ctx.clearRect(0, 0, game.width, game.height);

            // Отрисовка пути
            drawPath();

            // Обновление и рисование башен
            game.towers.forEach(tower => {
                tower.update(deltaTime);
                tower.draw();
            });

            // Спавн врагов
            spawnEnemies();

            // Обновление и рисование врагов
            game.enemies.forEach(enemy => {
                enemy.update(deltaTime);
                if (enemy.markedForDeletion) {
                    enemy.alpha -= 0.05;
                    if (enemy.alpha <= 0) {
                        game.enemies = game.enemies.filter(e => e !== enemy);
                    }
                }
                enemy.draw();
            });

            // Обновление и рисование пуль
            game.bullets.forEach(bullet => {
                bullet.update(deltaTime);
                bullet.draw();
            });

            // Удаление объектов, отмеченных для удаления
            game.bullets = game.bullets.filter(bullet => !bullet.markedForDeletion);

            checkLevelEnd();

            // Проверка проигрыша
            if (game.lives <= 0) {
                gameOver(false);
            } else {
                requestAnimationFrame(gameLoop);
            }
        }

        // Конец игры
        function gameOver(won) {
            // Ваш код здесь
        }

        // Обработка установки башен
        canvas.addEventListener('click', (e) => {
            if (game.paused || game.gameOver) return;

            const rect = canvas.getBoundingClientRect();
            const x = e.clientX - rect.left;
            const y = e.clientY - rect.top;

            if (game.isBuilding) {
                let cost;
                switch (game.selectedTowerType) {
                    case 'basic':
                        cost = 50;
                        break;
                    case 'slow':
                        cost = 75;
                        break;
                    case 'aoe':
                        cost = 100;
                        break;
                    case 'sniper':
                        cost = 150;
                        break;
                }

                if (game.money >= cost) {
                    // Проверяем, чтобы башня не ставилась на путь
                    if (!isOnPath(x, y)) {
                        game.towers.push(new Tower(x, y, game.selectedTowerType));
                        game.money -= cost;
                        updateUI();
                    } else {
                        alert('Нельзя ставить башню на путь!');
                    }
                } else {
                    alert('Недостаточно денег!');
                }

                game.isBuilding = false;
            } else {
                // Проверяем, нажата ли башня
                const tower = game.towers.find(tower => {
                    const dist = Math.hypot(tower.x - x, tower.y - y);
                    return dist <= 20;
                });
                if (tower) {
                    game.towers.forEach(t => t.selected = false);
                    tower.selected = true;
                    showUpgradeMenu(e.clientX, e.clientY, tower);
                } else {
                    hideUpgradeMenu();
                    game.towers.forEach(t => t.selected = false);
                }
            }
        });

        // Проверка, находится ли точка на пути
        function isOnPath(x, y) {
            // Ваш код здесь
        }

        // Выбор типа башни
        document.getElementById('basicTowerBtn').addEventListener('click', () => {
            game.selectedTowerType = 'basic';
            game.isBuilding = true;
        });

        document.getElementById('slowTowerBtn').addEventListener('click', () => {
            game.selectedTowerType = 'slow';
            game.isBuilding = true;
        });

        document.getElementById('aoeTowerBtn').addEventListener('click', () => {
            game.selectedTowerType = 'aoe';
            game.isBuilding = true;
        });

        document.getElementById('sniperTowerBtn').addEventListener('click', () => {
            game.selectedTowerType = 'sniper';
            game.isBuilding = true;
        });

        // Меню улучшения башни
        function showUpgradeMenu(x, y, tower) {
            upgradeMenu.style.left = x + 'px';
            upgradeMenu.style.top = y + 'px';
            upgradeMenu.style.display = 'block';
            upgradeMenu.innerHTML = `
                <p>Уровень башни: ${tower.level}</p>
                <p>Стоимость улучшения: $${tower.upgradeCost}</p>
                <button id="upgradeBtn">Улучшить</button>
                <button id="sellBtn">Продать</button>
            `;
            document.getElementById('upgradeBtn').addEventListener('click', () => {
                tower.upgrade();
                hideUpgradeMenu();
            });
            document.getElementById('sellBtn').addEventListener('click', () => {
                game.money += Math.floor((tower.upgradeCost / 2) * (tower.level));
                game.towers = game.towers.filter(t => t !== tower);
                hideUpgradeMenu();
                updateUI();
            });
        }

        function hideUpgradeMenu() {
            upgradeMenu.style.display = 'none';
        }

        // Главное меню
        startBtn.addEventListener('click', () => {
            hideMainMenu();
            startGame();
        });

        settingsBtn.addEventListener('click', () => {
            alert('Здесь будут настройки');
        });

        leaderboardBtn.addEventListener('click', () => {
            alert('Здесь будет рейтинг');
        });

        function showMainMenu() {
            mainMenu.style.display = 'flex';
            ui.style.display = 'none';
            canvas.style.display = 'none';
            game.paused = true;
        }

        function hideMainMenu() {
            mainMenu.style.display = 'none';
            ui.style.display = 'block';
            canvas.style.display = 'block';
            game.paused = false;
        }

        function startGame() {
            resetGame();
            createPath();
            updateUI();
            startLevel();
            requestAnimationFrame(gameLoop);
        }

        function resetGame() {
            // Сброс всех параметров игры
            game.towers = [];
            game.enemies = [];
            game.bullets = [];
            game.money = 200;
            game.lives = 20;
            game.level = 1;
            game.score = 0;
            game.nextEnemyId = 1;
            game.levelInProgress = false;
            game.gameOver = false;
            game.paused = false;
            updateUI();
        }

        // Показ главного меню при загрузке
        showMainMenu();
    </script>
</body>
</html>