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

🌟 Урок 4: Эволюция и мини-игры

Добавляем развитие питомца и увлекательные игры

🎯 Цель урока

В этом уроке мы добавим самые захватывающие функции нашего тамагочи! Создадим систему эволюции питомца по стадиям развития, мини-игры для развития интеллекта и систему достижений для мотивации игрока.

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

Демонстрация эволюции питомца

Кликай на стадии, чтобы увидеть развитие питомца!

🥚
Яйцо
0-2 мин
🐣
Птенчик
2-5 мин
🐤
Малыш
5-10 мин
🐦
Подросток
10-20 мин
🦅
Взрослый
20+ мин

Начальная стадия. Питомец только появился на свет!

🌱 Система эволюции

Система эволюции делает игру увлекательной надолго. Питомец растёт и развивается в зависимости от времени и заботы игрока.

🌱 Объект стадий эволюции
// Определяем все стадии развития питомца
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");
}

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

Первые шаги - Покормить питомца
Друг навеки - Поиграть 10 раз
Мастер памяти - Пройти мини-игру
Эволюция - Достичь стадии взрослого
Заботливый хозяин - 100 действий ухода

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

Достижения мотивируют игрока продолжать играть и ухаживать за питомцем. Каждое достижение даёт награду и чувство прогресса.

🏆 База достижений
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();
}

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

Добавь в свой тамагочи продвинутые функции:

  1. Объект evolutionStages с 5 стадиями развития
  2. Функцию checkEvolution() для автоматической эволюции
  3. Мини-игру на память с последовательностью цветов
  4. Систему интеллекта питомца (новая характеристика)
  5. Базу достижений с условиями разблокировки
  6. Функции для проверки и разблокировки достижений
  7. Автоматические проверки эволюции каждую минуту

💡 Используй setInterval для автоматических проверок эволюции!

💡 Секреты геймдизайна

Прогрессия: Эволюция должна чувствоваться как достижение. Добавляй красивые анимации и звуки для важных моментов.
Баланс сложности: Мини-игры должны быть достаточно сложными, чтобы быть интересными, но не слишком трудными для детей.
Мотивация: Достижения создают долгосрочные цели. Делай их разнообразными: простые для новичков, сложные для опытных игроков.
Обратная связь: Всегда показывай игроку результат его действий. Используй анимации, звуки и сообщения для создания отзывчивого интерфейса.
💾 Следующий урок: Сохранение и полировка →