Теперь Codex пишет не просто экран, а маленький игровой механизм. Мы следим, чтобы он не усложнял.
У нас уже есть проект. Он запускается. На экране есть заставка или простая надпись. Теперь начинается самое интересное: превращаем приложение в игру. Игра — это не волшебная картинка, а набор правил. Мяч летит. Если мяч ударился о стену — отскочил. Если ударился о ракетку — отскочил вверх. Если попал в кирпич — кирпич исчез, очки увеличились. Если мяч упал ниже ракетки — можно начать заново.
Эти правила называются игровой логикой. Алгоритм — это порядок действий. Например: «каждый кадр сдвинь мяч, проверь столкновения, нарисуй всё на экране». Кадр — это один маленький момент картинки. Когда кадров много и они быстро меняются, мы видим движение.
Для первой версии не нужен игровой движок вроде Unity. Мы можем сделать простой Android View. View — это область экрана, которая умеет рисовать. Внутри неё можно рисовать фон, мяч, ракетку и кирпичики. Это хороший учебный путь: меньше лишних программ, больше понимания.
Даём Codex аккуратный промпт. В нём сразу ограничиваем сложность.
ПРОМПТ
Преврати проект MyFirstArkanoid в простую Android-игру «Арканоид».
Сделай учебную версию без лишних библиотек:
1. Один экран игры.
2. Тёмный фон.
3. Мяч, который летает и отскакивает от стен.
4. Ракетка снизу, которую игрок двигает пальцем влево-вправо.
5. Кирпичики сверху в несколько рядов.
6. Когда мяч попадает в кирпичик, кирпичик исчезает, а счёт увеличивается.
7. Счёт показывается сверху.
8. Если мяч падает ниже ракетки, игра перезапускается после касания экрана.
9. Код должен быть простым и хорошо прокомментированным.
10. После изменений объясни мне простыми словами, какие файлы ты создал или изменил.
Если Codex всё делает правильно, он может создать файл GameView.kt и подключить его в MainActivity.kt. GameView будет отвечать за рисование и движение. MainActivity просто покажет GameView на экране. Это удобное разделение: один файл — дверь в приложение, второй — сама игра.
Разберём механику по-детски. Есть мяч. У мяча есть координаты x и y. x — положение слева направо. y — положение сверху вниз. Если x увеличивается, мяч летит вправо. Если y увеличивается, мяч летит вниз. У мяча есть скорость по x и скорость по y. Каждый кадр мы прибавляем скорость к координатам. Получается движение.
Есть стены. Если мяч долетел до левой стены, он должен полететь вправо. Если долетел до правой стены — влево. Если долетел до верхней стены — вниз. Это называется отскок. В коде отскок обычно выглядит как смена знака скорости: было +8, стало -8. На языке обычного человека: «летел вправо — теперь лети влево».
Есть ракетка. Ракетка — прямоугольник снизу. Игрок двигает её пальцем. Когда палец сдвигается, ракетка получает новую x-координату. Важно не дать ракетке уйти за экран. Поэтому код проверяет: если слишком далеко влево — поставь на край, если слишком далеко вправо — тоже поставь на край.
Есть кирпичики. У каждого кирпичика есть прямоугольник и состояние: живой или уже сбит. В начале все кирпичики живые. Когда мяч пересекается с кирпичом, кирпич становится сбитым, счёт увеличивается, мяч отскакивает. «Пересекается» означает, что круг мяча попал в область прямоугольника. В учебной игре можно сделать проверку проще, не как в профессиональной физике.
После генерации просим Codex объяснить код не как программисту, а как игроку, который заглянул под капот.
ПРОМПТ
Объясни созданный код простыми словами. Особенно объясни:
1. Где создаётся мяч.
2. Где задаётся скорость мяча.
3. Где рисуется ракетка.
4. Где обрабатывается движение пальцем.
5. Где проверяется попадание в кирпичики.
6. Где увеличивается счёт.
Не переписывай код, только объясни.
Теперь запускаем. Возможны три варианта. Первый — всё собралось и игра открылась. Отлично. Второй — проект собрался, но игра выглядит криво: мяч слишком быстрый, ракетка маленькая, кирпичи не там. Это нормально, просим Codex настроить размеры. Третий — сборка упала. Тогда копируем ошибку и просим одно исправление за раз.
ПРОМПТ
Игра запускается, но мяч слишком быстрый, а ракеткой трудно управлять. Подбери более спокойные значения для первой версии. Объясни, какие числа ты изменил и за что они отвечают.
ПРОМПТ
Игра запускается, но кирпичики слишком маленькие/слишком крупные/налезают друг на друга. Исправь раскладку кирпичиков так, чтобы она зависела от ширины экрана. Объясни простыми словами.
ПРОМПТ
После твоих изменений проект не собирается. Вот ошибка:
[вставь ошибку.png)
Исправь её. Дай одно конкретное изменение и объясни, почему оно должно помочь.
Когда базовая механика работает, добавляем фон и кирпичики с картинками. Здесь есть два пути. Первый — простые цвета и фигуры. Второй — изображения. Для учебной версии можно сначала оставить фигуры, а потом попросить Codex добавить ресурсы. Но пользователь хотел генерацию изображения для фона и кирпичиков, поэтому делаем это как следующий слой.
Важно: Codex сам по себе может создать код и простые ресурсы, но красивые изображения лучше генерировать отдельно в генераторе картинок или попросить Codex подготовить техническое задание для картинки. Для статьи можно использовать сгенерированные изображения-примеры: космический фон, неоновые кирпичики, простая ракетка. Главное — потом положить файлы в правильные папки: res/drawable для картинок, res/raw для звуков.
Промпт для генерации технического задания на фон:
ПРОМПТ
Составь описание для генерации фона игры «Арканоид». Стиль: яркий, простой, мультяшный, подходит для детей и взрослых. Экран вертикальный, Android. Фон не должен мешать видеть мяч, кирпичики и ракетку. Дай 3 варианта описания.
Промпт для Codex после того, как картинки готовы:
ПРОМПТ
Я добавил изображения в папку res/drawable. Помоги подключить их к игре:
1. Фон используй как заднюю картинку.
2. Кирпичики можно пока рисовать цветными прямоугольниками, но сделай цвета приятнее.
3. Мяч и ракетку оставь простыми фигурами, чтобы код был понятным.
4. Если изображения слишком сложно подключать для первой версии, объясни самый простой безопасный вариант.
Теперь добавляем звуки. Для первой версии достаточно двух коротких звуков: удар по кирпичику и потеря мяча. Звуки кладутся в res/raw. Форматы лучше простые: .wav или .mp3. Названия файлов — маленькими латинскими буквами без пробелов, например hit.wav и lose.wav.
ПРОМПТ
Добавь в игру простые звуки:
1. Звук hit.wav при попадании мяча в кирпичик.
2. Звук lose.wav, когда мяч падает ниже ракетки.
3. Файлы лежат в res/raw.
4. Код должен быть простым. Если звук не найден, игра не должна падать.
5. Объясни, где в коде запускается звук.
На этом этапе игра уже похожа на игру. Она может быть не идеальной, но она живая: мяч движется, кирпичи исчезают, очки растут, ракетка слушается пальца, звуки щёлкают. В следующей части мы сделаем самое приятное для новичка: соберём APK. То есть получим файл, который можно установить на Android-устройство и показать другому человеку.