🎯 Цель урока
Превращаем простую игру в продвинутую систему с турнирами, режимом выживания, умным ИИ и системой достижений.
Ты научишься создавать сложные алгоритмы, управлять состоянием игры и реализовывать системы прогрессии игрока.
Демонстрация режимов игры
Режим: Обычный | Сложность: Лёгкий ИИ
Играй против случайного ИИ без ограничений времени
🤖 Уровни сложности ИИ
Создадим три типа искусственного интеллекта:
😊 Лёгкий ИИ
Случайные выборы
Выбирает ходы полностью случайно
🤔 Средний ИИ
Анализирует паттерны
Помнит твои последние ходы
😈 Сложный ИИ
Предсказывает ходы
Использует продвинутые алгоритмы
🎲 Простой ИИ (Лёгкий)
Начнём с самого простого - случайного ИИ. Мы уже создали его в предыдущем уроке, теперь оформим как отдельную систему.
// Система ИИ с разными уровнями сложности 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(); } }
🏆 Турнирный режим
Система турниров на выбывание с несколькими раундами:
Bo3
Bo3
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); } } };
💀 Режим выживания
Играй до первого поражения! Сколько побед подряд ты сможешь набрать?
ИИ становится умнее с каждым раундом. 3 жизни на старте, бонусная жизнь каждые 10 побед!
🏅 Система достижений
Получай награды за различные достижения в игре:
Огненная серия
Выиграй 10 игр подряд
Чемпион турнира
Выиграй турнир на любой сложности
Выживший
Продержись 25 раундов в режиме выживания
Мастер стратегии
Победи сложный ИИ 5 раз подряд
Скоростной игрок
Сыграй 100 игр за сессию
Идеальный турнир
Выиграй турнир без единого поражения
🚀 Твоё задание
Создай продвинутую систему игры:
- Реализуй систему ИИ с тремя уровнями сложности
- Добавь переключение между режимами игры
- Создай турнирную систему с прогрессией сложности
- Реализуй режим выживания с нарастающей сложностью
- Добавь систему достижений с локальным сохранением
- Создай интерфейс для выбора сложности ИИ
- Добавь анимации переходов между режимами
- Реализуй сохранение статистики в localStorage
💡 Начни с простого ИИ, потом добавляй сложные алгоритмы!