🎯 Цель урока
В этом уроке мы добавим самые захватывающие функции нашего тамагочи! Создадим систему эволюции питомца по стадиям развития, мини-игры для развития интеллекта и систему достижений для мотивации игрока.
Ты изучишь продвинутые концепции JavaScript: интервалы времени, сложные алгоритмы, игровую логику и систему наград.
Демонстрация эволюции питомца
Кликай на стадии, чтобы увидеть развитие питомца!
Начальная стадия. Питомец только появился на свет!
🌱 Система эволюции
Система эволюции делает игру увлекательной надолго. Питомец растёт и развивается в зависимости от времени и заботы игрока.
// Определяем все стадии развития питомца const evolutionStages = { egg: { emoji: "🥚", name: "Яйцо", description: "Начальная стадия. Питомец только появился!", minAge: 0, maxAge: 2, requirements: { level: 1 } }, baby: { emoji: "🐣", name: "Птенчик", description: "Маленький и беззащитный, нуждается в заботе", minAge: 2, maxAge: 5, requirements: { level: 3, happiness: 50 } }, child: { emoji: "🐤", name: "Малыш", description: "Активный и любознательный, любит играть", minAge: 5, maxAge: 10, requirements: { level: 7, happiness: 70 } }, teen: { emoji: "🐦", name: "Подросток", description: "Независимый и умный, готов к испытаниям", minAge: 10, maxAge: 20, requirements: { level: 15, intelligence: 50 } }, adult: { emoji: "🦅", name: "Взрослый", description: "Мудрый и сильный, достиг максимального развития", minAge: 20, maxAge: Infinity, requirements: { level: 25, intelligence: 80 } } };
📈 Функция проверки эволюции
Эта функция будет автоматически проверять, может ли питомец перейти на следующую стадию развития. Учитывается возраст, уровень и другие характеристики.
function checkEvolution() { // Получаем текущую и следующую стадии const currentStage = evolutionStages[pet.stage]; const stageNames = Object.keys(evolutionStages); const currentIndex = stageNames.indexOf(pet.stage); // Если это последняя стадия, эволюция невозможна if (currentIndex === stageNames.length - 1) return; const nextStageName = stageNames[currentIndex + 1]; const nextStage = evolutionStages[nextStageName]; // Проверяем возраст const ageInMinutes = pet.age; if (ageInMinutes < nextStage.minAge) return; // Проверяем требования для эволюции let canEvolve = true; if (nextStage.requirements.level && pet.level < nextStage.requirements.level) { canEvolve = false; } if (nextStage.requirements.happiness && pet.stats.happiness < nextStage.requirements.happiness) { canEvolve = false; } if (nextStage.requirements.intelligence && pet.intelligence < nextStage.requirements.intelligence) { canEvolve = false; } // Если все требования выполнены - эволюция! if (canEvolve) { evolve(nextStageName); } } function evolve(newStage) { const oldStage = evolutionStages[pet.stage]; pet.stage = newStage; pet.emoji = evolutionStages[newStage].emoji; // Показываем красивое сообщение об эволюции showEvolutionAnimation(oldStage.emoji, pet.emoji); showMessage(`🌟 Поздравляем! ${pet.name} эволюционировал в ${evolutionStages[newStage].name}!`); // Даём бонусы за эволюцию pet.stats.happiness = Math.min(100, pet.stats.happiness + 20); addExperience(50); updateDisplay(); checkAchievement("evolution_" + newStage); }
Мини-игра: Последовательность цветов
Запомни последовательность и повтори её!
🧠 Мини-игра на память
Мини-игра развивает интеллект питомца и делает игру более интерактивной. Игрок должен запомнить и повторить последовательность цветов.
// Переменные для мини-игры let gameSequence = []; let playerSequence = []; let gameActive = false; let gameLevel = 1; const colors = ['red', 'green', 'blue', 'yellow']; function startColorGame() { if (!pet.isAlive) return; // Проверяем энергию для игры if (pet.stats.energy < 30) { showMessage("😴 Слишком устал для мини-игр!"); return; } gameActive = true; gameSequence = []; playerSequence = []; gameLevel = 1; // Генерируем первый цвет addColorToSequence(); playSequence(); } function addColorToSequence() { const randomColor = colors[Math.floor(Math.random() * colors.length)]; gameSequence.push(randomColor); } function playSequence() { let i = 0; const interval = setInterval(() => { if (i >= gameSequence.length) { clearInterval(interval); showMessage("Теперь повтори последовательность!"); return; } // Подсвечиваем цвет const colorButton = document.querySelector(`.color-button.${gameSequence[i]}`); colorButton.classList.add('flash'); setTimeout(() => { colorButton.classList.remove('flash'); }, 400); i++; }, 600); }
🎮 Обработка ввода игрока
Проверяем правильность ввода игрока и награждаем за успешное прохождение мини-игры.
function playerClick(color) { if (!gameActive) return; playerSequence.push(color); // Проверяем текущий ввод const currentIndex = playerSequence.length - 1; if (playerSequence[currentIndex] !== gameSequence[currentIndex]) { // Ошибка! gameOver(); return; } // Если последовательность завершена правильно if (playerSequence.length === gameSequence.length) { levelComplete(); } } function levelComplete() { gameLevel++; playerSequence = []; // Награды за прохождение уровня pet.intelligence = Math.min(100, pet.intelligence + 5); pet.stats.happiness = Math.min(100, pet.stats.happiness + 10); pet.stats.energy = Math.max(0, pet.stats.energy - 10); showMessage(`🎉 Уровень ${gameLevel - 1} пройден! Интеллект +5`); addExperience(10); // Проверяем, не слишком ли сложно if (gameLevel > 5) { gameWin(); return; } // Добавляем новый цвет и продолжаем setTimeout(() => { addColorToSequence(); playSequence(); }, 1000); } function gameOver() { gameActive = false; showMessage(`💥 Ошибка! Достигнут уровень ${gameLevel - 1}`); // Небольшая награда за попытку if (gameLevel > 1) { pet.intelligence = Math.min(100, pet.intelligence + 1); addExperience(2); } } function gameWin() { gameActive = false; showMessage("🏆 Потрясающе! Все уровни пройдены!"); // Большая награда за полное прохождение pet.intelligence = Math.min(100, pet.intelligence + 20); pet.stats.happiness = Math.min(100, pet.stats.happiness + 30); addExperience(50); checkAchievement("memory_master"); }
Система достижений
🏆 Система достижений
Достижения мотивируют игрока продолжать играть и ухаживать за питомцем. Каждое достижение даёт награду и чувство прогресса.
const achievements = { first_feed: { name: "Первые шаги", description: "Покормить питомца в первый раз", icon: "🍎", unlocked: false, reward: { experience: 10 } }, friend_forever: { name: "Друг навеки", description: "Поиграть с питомцем 10 раз", icon: "🤗", unlocked: false, requirement: 10, current: 0, reward: { experience: 25 } }, memory_master: { name: "Мастер памяти", description: "Пройти мини-игру на память полностью", icon: "🧠", unlocked: false, reward: { experience: 50, intelligence: 10 } }, evolution_adult: { name: "Полная эволюция", description: "Достичь взрослой стадии развития", icon: "🦅", unlocked: false, reward: { experience: 100 } } }; function checkAchievement(achievementId) { const achievement = achievements[achievementId]; if (!achievement || achievement.unlocked) return; // Проверяем условия разблокировки let unlockCondition = true; if (achievement.requirement) { achievement.current = (achievement.current || 0) + 1; unlockCondition = achievement.current >= achievement.requirement; } if (unlockCondition) { unlockAchievement(achievementId); } } function unlockAchievement(achievementId) { const achievement = achievements[achievementId]; achievement.unlocked = true; // Показываем уведомление showAchievementNotification(achievement); // Даём награды if (achievement.reward.experience) { addExperience(achievement.reward.experience); } if (achievement.reward.intelligence) { pet.intelligence = Math.min(100, pet.intelligence + achievement.reward.intelligence); } updateAchievementsDisplay(); }
🌟 Твоё задание
Добавь в свой тамагочи продвинутые функции:
- Объект evolutionStages с 5 стадиями развития
- Функцию checkEvolution() для автоматической эволюции
- Мини-игру на память с последовательностью цветов
- Систему интеллекта питомца (новая характеристика)
- Базу достижений с условиями разблокировки
- Функции для проверки и разблокировки достижений
- Автоматические проверки эволюции каждую минуту
💡 Используй setInterval для автоматических проверок эволюции!