← Назад к курсу

🚀 Урок 4: Продвинутые режимы

Турниры, ИИ разной сложности и система достижений

🎯 Цель урока

Превращаем простую игру в продвинутую систему с турнирами, режимом выживания, умным ИИ и системой достижений.

Ты научишься создавать сложные алгоритмы, управлять состоянием игры и реализовывать системы прогрессии игрока.

Демонстрация режимов игры

Режим: Обычный | Сложность: Лёгкий ИИ

Играй против случайного ИИ без ограничений времени

🤖 Уровни сложности ИИ

Создадим три типа искусственного интеллекта:

😊 Лёгкий ИИ

🎲

Случайные выборы

Выбирает ходы полностью случайно

🤔 Средний ИИ

📊

Анализирует паттерны

Помнит твои последние ходы

😈 Сложный ИИ

🧠

Предсказывает ходы

Использует продвинутые алгоритмы

🎲 Простой ИИ (Лёгкий)

Начнём с самого простого - случайного ИИ. Мы уже создали его в предыдущем уроке, теперь оформим как отдельную систему.

🎲 Лёгкий ИИ - Случайные выборы
// Система ИИ с разными уровнями сложности
const AISystem = {
    difficulty: 'easy',     // Текущий уровень сложности
    playerHistory: [],        // История ходов игрока
    aiHistory: [],           // История ходов ИИ
    
    // Лёгкий ИИ - полностью случайный
    getEasyChoice() {
        const choices = ['rock', 'paper', 'scissors'];
        const randomIndex = Math.floor(Math.random() * 3);
        return choices[randomIndex];
    },
    
    // Главная функция выбора ИИ
    getChoice() {
        let choice;
        
        switch (this.difficulty) {
            case 'easy':
                choice = this.getEasyChoice();
                break;
            case 'medium':
                choice = this.getMediumChoice();
                break;
            case 'hard':
                choice = this.getHardChoice();
                break;
            default:
                choice = this.getEasyChoice();
        }
        
        // Сохраняем выбор в историю
        this.aiHistory.push(choice);
        return choice;
    }
};

📊 Умный ИИ (Средний)

Средний ИИ анализирует твои последние ходы и пытается предугадать следующий. Он ищет паттерны в твоём поведении.

📊 Средний ИИ - Анализ паттернов
// Средний ИИ - анализирует паттерны игрока
getMediumChoice() {
    // Если истории мало - играем случайно
    if (this.playerHistory.length < 3) {
        return this.getEasyChoice();
    }
    
    // Анализируем последние 3 хода игрока
    const recent = this.playerHistory.slice(-3);
    
    // Подсчитываем частоту каждого выбора
    const frequency = {
        rock: 0,
        paper: 0,
        scissors: 0
    };
    
    recent.forEach(choice => {
        frequency[choice]++;
    });
    
    // Находим самый частый выбор
    let mostFrequent = 'rock';
    let maxCount = 0;
    
    for (const [choice, count] of Object.entries(frequency)) {
        if (count > maxCount) {
            maxCount = count;
            mostFrequent = choice;
        }
    }
    
    // Выбираем контр-ход против предполагаемого хода игрока
    const counter = {
        rock: 'paper',      // Бумага бьёт камень
        paper: 'scissors',  // Ножницы бьют бумагу
        scissors: 'rock'     // Камень бьёт ножницы
    };
    
    // 70% шанс умного хода, 30% случайного
    if (Math.random() < 0.7) {
        return counter[mostFrequent];
    } else {
        return this.getEasyChoice();
    }
},

🧠 Гениальный ИИ (Сложный)

Самый продвинутый ИИ использует сложные алгоритмы предсказания. Он анализирует последовательности и адаптируется к твоей стратегии.

🧠 Сложный ИИ - Продвинутые алгоритмы
// Сложный ИИ - продвинутый анализ
getHardChoice() {
    if (this.playerHistory.length < 5) {
        return this.getMediumChoice();
    }
    
    // Анализируем последовательности из 2 ходов
    const patterns = {};
    
    for (let i = 0; i < this.playerHistory.length - 2; i++) {
        const pattern = this.playerHistory[i] + this.playerHistory[i + 1];
        const nextMove = this.playerHistory[i + 2];
        
        if (!patterns[pattern]) {
            patterns[pattern] = [];
        }
        patterns[pattern].push(nextMove);
    }
    
    // Получаем последний паттерн
    const recentHistory = this.playerHistory.slice(-2);
    const lastPattern = recentHistory.join('');
    
    if (patterns[lastPattern] && patterns[lastPattern].length > 0) {
        // Находим наиболее вероятный следующий ход
        const nextMoves = patterns[lastPattern];
        const frequency = {};
        
        nextMoves.forEach(move => {
            frequency[move] = (frequency[move] || 0) + 1;
        });
        
        let predictedMove = 'rock';
        let maxCount = 0;
        
        for (const [move, count] of Object.entries(frequency)) {
            if (count > maxCount) {
                maxCount = count;
                predictedMove = move;
            }
        }
        
        // Контр-ход против предсказанного хода
        const counter = {
            rock: 'paper',
            paper: 'scissors',
            scissors: 'rock'
        };
        
        // 80% умного хода, 20% случайного для непредсказуемости
        if (Math.random() < 0.8) {
            return counter[predictedMove];
        }
    }
    
    // Если паттерн не найден - используем средний ИИ
    return this.getMediumChoice();
},

// Добавляем ход игрока в историю
addPlayerMove(move) {
    this.playerHistory.push(move);
    
    // Ограничиваем размер истории для производительности
    if (this.playerHistory.length > 50) {
        this.playerHistory.shift();
    }
}

🏆 Турнирный режим

Система турниров на выбывание с несколькими раундами:

1/8 финала
Bo3
1/4 финала
Bo3
1/2 финала
Bo5
Финал
Bo7

Bo3 = лучший из 3, Bo5 = лучший из 5, Bo7 = лучший из 7

🏆 Система турниров

Создадим турнирную систему, где игрок проходит серию раундов против ИИ возрастающей сложности.

🏆 Турнирная система
// Система турниров
const Tournament = {
    active: false,
    currentRound: 0,
    playerWins: 0,
    aiWins: 0,
    
    rounds: [
        { name: '1/8 финала', winsNeeded: 2, aiDifficulty: 'easy' },
        { name: '1/4 финала', winsNeeded: 2, aiDifficulty: 'easy' },
        { name: '1/2 финала', winsNeeded: 3, aiDifficulty: 'medium' },
        { name: 'Финал', winsNeeded: 4, aiDifficulty: 'hard' }
    ],
    
    // Начать турнир
    start() {
        this.active = true;
        this.currentRound = 0;
        this.resetRound();
        this.updateDisplay();
    },
    
    // Сброс текущего раунда
    resetRound() {
        this.playerWins = 0;
        this.aiWins = 0;
        
        // Устанавливаем сложность ИИ для текущего раунда
        const round = this.rounds[this.currentRound];
        AISystem.difficulty = round.aiDifficulty;
    },
    
    // Обработка результата игры
    processResult(result) {
        if (!this.active) return;
        
        if (result === 'win') {
            this.playerWins++;
        } else if (result === 'lose') {
            this.aiWins++;
        }
        
        const round = this.rounds[this.currentRound];
        const winsNeeded = round.winsNeeded;
        
        // Проверяем, выиграл ли кто-то раунд
        if (this.playerWins >= winsNeeded) {
            this.winRound();
        } else if (this.aiWins >= winsNeeded) {
            this.loseRound();
        }
        
        this.updateDisplay();
    },
    
    // Победа в раунде
    winRound() {
        const round = this.rounds[this.currentRound];
        
        showMessage(`🎉 Ты прошёл ${round.name}!`);
        
        if (this.currentRound >= this.rounds.length - 1) {
            // Выиграл весь турнир!
            this.winTournament();
        } else {
            // Переходим к следующему раунду
            this.currentRound++;
            setTimeout(() => {
                this.resetRound();
                this.updateDisplay();
            }, 2000);
        }
    }
};

💀 Режим выживания

Играй до первого поражения! Сколько побед подряд ты сможешь набрать?

0 Раунд
0 Жизни
0 Счёт
0 Рекорд

ИИ становится умнее с каждым раундом. 3 жизни на старте, бонусная жизнь каждые 10 побед!

🏅 Система достижений

Получай награды за различные достижения в игре:

🔥

Огненная серия

Выиграй 10 игр подряд

🏆

Чемпион турнира

Выиграй турнир на любой сложности

💪

Выживший

Продержись 25 раундов в режиме выживания

🎯

Мастер стратегии

Победи сложный ИИ 5 раз подряд

Скоростной игрок

Сыграй 100 игр за сессию

🥇

Идеальный турнир

Выиграй турнир без единого поражения

🚀 Твоё задание

Создай продвинутую систему игры:

  1. Реализуй систему ИИ с тремя уровнями сложности
  2. Добавь переключение между режимами игры
  3. Создай турнирную систему с прогрессией сложности
  4. Реализуй режим выживания с нарастающей сложностью
  5. Добавь систему достижений с локальным сохранением
  6. Создай интерфейс для выбора сложности ИИ
  7. Добавь анимации переходов между режимами
  8. Реализуй сохранение статистики в localStorage

💡 Начни с простого ИИ, потом добавляй сложные алгоритмы!

Следующий урок: Эффекты и полировка →