В ноябре (2025) проходило соревнование по вайбкодингу от Яндекса. У меня было 2 свободных дня на праздниках, поэтому решила поучаствовать и выбрала тему из списка: "AI тамагочи".
У меня некоторая потребность к созданию чего-то красивого, каких-то игр, персонажей, так как в обычной разработческой жизни из красивого приходится только "красить кнопочки".
Сразу покажу финальный результат, что вышло за примерно 10 часов. Суть была в том, что все реплики и общение с котиком генерируется в реальном времени через GPT (типа такой ИИ функционал). А в дальнейшем уже планировалось ввести какой-то чат с котиком, с сохранением истории и персонализацией.

Теперь по порядку, что и как делала:
Для начала в ChatGPT написала, что я хочу и попросила задать мне миллион уточняющих вопросов прежде чем выдавать ответ.Это мой личный лайфхак, так как если просто самой писать промпт, то получится какашка. А так я пишу что-то типа: "Хочу сделать приложение тамагочи с котиком, iOS, Xcode, SUI. Задай мне все необходимые вопросы прежде чем давать ответ". После этого он реально пишет тонну шикарных вопросов, отвечая на которые я уже точно и чётко формулирую ТЗ.
Дальше я попросила сам GPT сформулировать окончательное ТЗ и написать мне его. После этого я решила это ТЗ опробовать на нескольких разных ИИ.
Вот шаблон промпта:
Скрытый текст
AI Тамагочи Котик на SwiftUI: Полное Руководство по Разработке
Да, я определённо могу помочь вам создать AI Тамагочи котика на SwiftUI с пиксельной графикой в жёлто-оранжевых цветах! Основываясь на ваших подробных требованиях, я разработал комплексное решение, которое полностью соответствует условиям соревнования и включает все необходимые компоненты: анимации дыхания и хвоста, пиксельную графику, интеграцию с GPT API, SwiftData для персистентности и систему ухода за котом в реальном времени.
Архитектура Проекта
Приложение построено на архитектуре MVVM (Model-View-ViewModel) с использованием паттерна State Machine для управления состояниями кота. Это обеспечивает чёткое разделение ответственности: модели данных отделены от бизнес-логики, а UI-компоненты остаются лёгкими и переиспользуемыми. SwiftUI прекрасно сочетается с MVVM благодаря встроенной системе привязки данных через @State, @Observable и @Binding.
Структура State Machine
Состояния кота управляются через enum CatState, который включает четыре основных состояния: нейтральное, радостное, сонное и голодное. Каждое состояние имеет свой спрайт (96×96 пикселей в масштабе 2x для экранов Retina) и цветовую схему. Такой подход гарантирует предсказуемые переходы между состояниями и упрощает отладку.
Система Анимаций
Анимация Дыхания
Ключевая фича — реалистичная анимация дыхания, создающая ощущение живого персонажа. В SwiftUI это реализуется через .offset() модификатор с циклической анимацией easeInOut длительностью 1.2 секунды и амплитудой 2-3 пикселя. Анимация автоматически повторяется с repeatForever(autoreverses: true), создавая плавное движение вверх-вниз, имитирующее вдох и выдох.
swiftwithAnimation(
.easeInOut(duration: 1.2)
.repeatForever(autoreverses: true)
) {
breathingOffset = -3
}
withAnimation( .easeInOut(duration: 1.2) .repeatForever(autoreverses: true) ) { breathingOffset = -3 }
Анимация Хвоста
Хвост кота реализован как отдельный слой с rotationEffect, создающий покачивание с амплитудой 15 градусов и периодом 0.8-1.0 секунды. Это добавляет дополнительную живость персонажу, даже когда он находится в статичном состоянии idle.
Моргание
Моргание реализовано через таймер с случайными интервалами 3-7 секунд. При срабатывании таймера выполняется быстрая анимация изменения opacity (0.1 секунды на закрытие глаз и 0.1 на открытие), создавая естественный эффект моргания.
Анимация Ходьбы
Для перехода между комнатами используется простая анимация ходьбы: при смене фона спрайт кота переключается между двумя кадрами движения лапок с частотой 0.5 секунды на кадр, одновременно применяется .offset() для создания иллюзии движения. Все фоны (дом, кухня, спальня, двор) выполнены в пиксельном стиле 8-бит с тёплой жёлто-оранжевой палитрой.
Пиксельная Графика
Спрайты и Рендеринг
Все спрайты имеют базовый размер 96×96 пикселей и отображаются с интерполяцией .none для сохранения чёткости пиксельной графики. Цветовая палитра включает:#F2C94C (основной жёлтый), #F2994A (оранжевый), #E67E22 (насыщенный оранжевый), #8C4A1E (тёмно-коричневый), плюс белый и чёрный для контуров и акцентов.
Спрайт-листы
Для каждого состояния кота создаётся отдельный спрайт с вариациями для анимации дыхания. При работе с малыми спрайтами критически важно соблюдать принцип "один пиксель имеет значение" — движение даже на 1 пиксель в спрайте 96×96 составляет примерно 1% от ширины, что создаёт заметное визуальное изменение.
Геймплей и Механики Ухода
Система Потребностей
Четыре основных параметра (еда, сон, игра, прогулки) деградируют со скоростью ~1% каждые 10 минут в реальном времени. Это реализовано через таймер, который каждую минуту вызывает метод updateNeeds() в модели данных. Расчёт деградации учитывает время, прошедшее с последнего обновления, что позволяет корректно обрабатывать ситуации, когда приложение было закрыто.
Действия Пользователя
Кормление: +30% к уровню еды, +1 монета, счастливое состояние, звук "мяу"
Сон: +40% к уровню сна, звук мурчания
Игра: +25% к уровню игры, счастливое состояние
Прогулка: +35% к уровню прогулки, +2 монеты
Система Монет и Магазин
За выполнение действий игрок получает монеты, которые можно потратить в фейковом магазине на аксессуары для кота. Это создаёт дополнительную мотивацию для регулярного взаимодействия с приложением.
Жестовые Взаимодействия
Тап-жесты
Простой тап переводит кота в радостное состояние, воспроизводит звук "мяу" и генерирует AI-фразу от кота. Реализация через .onTapGesture модификатор обеспечивает мгновенный отклик.
Долгое Нажатие
Долгое нажатие (long press) длительностью более 0.5 секунды активирует режим мурчания с тактильной обратной связью через haptic feedback. Это создаёт ощущение физического контакта с котом и усиливает эмоциональную связь пользователя с питомцем.
swift.onLongPressGesture(minimumDuration: 0.5) {
soundManager.play(.purr)
UIImpactFeedbackGenerator(style: .medium).impactOccurred()
}
.onLongPressGesture(minimumDuration: 0.5) { soundManager.play(.purr) UIImpactFeedbackGenerator(style: .medium).impactOccurred() }
Mobile app interface design concept for AI Tamagotchi cat game
Интеграция с OpenAI GPT API
Архитектура AI-сервиса
AI-сервис построен на асинхронных запросах к OpenAI API с использованием модели GPT-3.5-turbo. Каждый запрос ограничен 30 токенами и температурой 0.8 для баланса между креативностью и релевантностью ответов.
Кэширование Фраз
Для минимизации API-вызовов и работы в офлайн-режиме реализована система кэширования. Фразы сохраняются в словаре [String: String], где ключ — контекст состояния кота, а значение — сгенерированная фраза. При повторных запросах с идентичным контекстом используется кэшированный ответ.
Контекстная Генерация
AI получает контекст о текущем состоянии кота (уровни потребностей, эмоциональное состояние), что позволяет генерировать релевантные короткие фразы на русском языке (3-10 слов) с лёгким юмором. Например: "Мяу! Давай поиграем!
