Добавлен middlefinger24,
опубликован
Когда я заканчивал делать змейку на состояние записи предыдущей статьи, мне казалось что я продвинулся достаточно, чтобы больше ей никогда не заниматься. Как сильно я ошибался.
Первая часть:
xgm.guru/p/gamedev/Snake-na-Python-opyt-razrabotki-ovc
Первая часть:
xgm.guru/p/gamedev/Snake-na-Python-opyt-razrabotki-ovc
Приглашение поучаствовать в конкурсе и сделать режим с боссом для змейки. Это конечно не написать свой собственный сайт, но тоже хороший вызов, учитывая что несколько дней назад я приподнял голову из болота hello word'ов.
В себя я особо не верил, поэтому о амбициях на первое место даже речи идти не могло, но сделать сцену сложней чем "две змейки-бота едят яблоко наперегонки" выглядело заманчиво. Сделать хоть какого-то босса, который хоть что-то кастует и разумно двигается по сцене. Мне бы этого хватало, чтобы поверить в то что я могу брать на себя более тяжелые задачи, чем решались до этого. Нечто большее казалось неподъемным и думать про это не хотелось.
На этот раз я был опытней и вечера создания нового мода заканчивались моими комментариями, поэтому разделение статьи на этапы вышло легче чем в предыдущий раз:
В себя я особо не верил, поэтому о амбициях на первое место даже речи идти не могло, но сделать сцену сложней чем "две змейки-бота едят яблоко наперегонки" выглядело заманчиво. Сделать хоть какого-то босса, который хоть что-то кастует и разумно двигается по сцене. Мне бы этого хватало, чтобы поверить в то что я могу брать на себя более тяжелые задачи, чем решались до этого. Нечто большее казалось неподъемным и думать про это не хотелось.
На этот раз я был опытней и вечера создания нового мода заканчивались моими комментариями, поэтому разделение статьи на этапы вышло легче чем в предыдущий раз:
- Первая трудность на пути к созданию босса:
Тем не менее, надо с чего-то начинать и в стейт машине режимов игры добавился новый пустой режим войны с боссом. Начинать большие дела надо с маленьких вещей.
- Новые координаты:
Колизии сравнивают точные значения, с отрисовкой было уже легче, так как координаты для отрисовки отделены от координат в которых работает логика игры типа столкновений и т п.
Повозился, написал какой-то длинный костыль чтобы у босса было подобие таймера, чтобы он мог на короткий промежуток времени менять свой цвет чтобы краснеть когда змейка ест яблоко и вот что из этого вышло:
- Первый плавающий текст:
Аналогично в класс отрисовки игровых объектов был добавлен похожий костыль имитирующий таймер, чтобы плавающий текст мог двигаться по сцене и растворяться со временем. Все снова работает, но количество мусорного кода, необходимое чтобы какой-то объект на сцене мог изменяться во времени меня начинало напрягать. Ладно, пока так сгодится. Вот босс начинает комментировать урон по себе, и иногда отрабатывает свой второй внутренний таймер, кастуя способности, пока что словами.
- Проблема с поддержкой множества объектов которым нужно время:
Код не писался, выдумывалось решение. Из своего старого опыта изучения паттернов проектирования я вспомнил паттерн Observer(Наблюдатель)
В чем суть паттерна? В том что один объект сигнализирует всем остальным связанным с собой сделать какое-то действие. Также в процессе своей жизни он может рвать связи с объектами, или создавать новые. Допустим, в игре будет только один глобальный таймер, который каждый свой тик будет говорить всем другим объектам, работающим со временем, что наступила новая секунда. А они в свою очередь реализуют логику того как им реагировать на изменение времени.
И это дало свои плоды. То что казалось раньше неподъемной задачей типа множественных снарядов и т д стало слегка поддаваться и вскоре было закончено. Вот змейка по нажатию кнопки становится неуязвимой, вот босс стреляет снарядами и делает рывок.
- Жажда новых трудностей.
Рразработка шла легкой так как на основе старого опыта и наработок сработал накопительный эффект
Все шаблоны наработаны, все проблемы змейки решены и разведаны.
Упираешься только в свою фантазию, а еще игрок должен быть в состоянии победить босса.
Захотелось боссу дать различные фазы, в которых его спелбук бы менялся. Касты способностей босса в зависимости от дистанции до змейки. Если змейка далеко, он кастует выстрел, или войд-зону, если близко, то делает рывок. Также ии босса был переработан, если раньше целью брал голову змейки, то теперь ближайшую её часть и его стало возможным кайтить.
Фазы шли оч легко, у меня уже все навыки натренированы. Базовые способности босса с каждой фазой усиливались.
В целом на этом моменте можно было остановиться, но меня мучала мысль, что хочется что-то еще, не знаю что...
- Озвучка игры
Лютая боязнь что звуки будут друг друга перекрывать и прочие конфликты, из-за которых вертелось решение с тредами... Но к счастью, pygame имеет собственный микшер, поэтому работа со звуком оказалась самой легкой частью разработки, которая упиралась в пару строчек кода.
Вывод простой: не надо ныть и бояться задачи раньше времени. Сперва надо хоть какие-то движения в её сторону совершить, чтобы убедиться что она такая страшная как кажется.
В целом теперь pygame не кажется такой плохой библиотекой как я говорил в прошлой части. Покопавшись в её граблях мне кажется, что я к ней привык.
- Дополнительные абилки босса
В голове вертелся конфликт того что при доп абилке босс должен не реагировать на все остальные триггеры...
Еще больше загрязнять код босса не хотелось и опять в мою голову пришло решение!
Внешний объект который берет на себя обязанности по воспроизведению способности. Он будет также перемещать босса на свои точки, которые вычислил. А у босса только одно поле-флаг, что он сейчас занят важной способностью.
Была идея сделать лазер но страшновато в плане сложности.
Но как и со звуком, тут главное начать, тяп-ляп "сложно" уже не такое сложное.
Разделил задачу по созданию лазера на этапы, все первые шаги вплоть до отрисовки были созданы.
Далее для коллизии лазера нужны точки на линии... Сложно? Сложновато, спрошу-ка я помощи chat GPT.
И он сразу подсказал функцию которая крашит комп и его надо перезгаружать :)
Не выдержав такой подставы я напряг свои извилины и написал свою функцию для нахождения точек лазера...
Вот вы можете посмотреть лазер и первые шаги в озвучке игры. В последующих фазах босса лазер усложняется
- Финальные костыли
Последние абилки, которые сложней тех что были до этого уже не деморализовали, а писались за час в среднем.
Я торопился, шли костыли, фиксы и копипасты...
Много дел в реальной жизни навалилось и лучше заняться ими.
Но было весело, даже без конкурса я бы доделал режим босса до сюда потому что было интересно.
Я даже горжусь своей идеей, своей поделкой. Змейка и босс стали мне как настоящий младший брат.
Ну и бонусом куча полученных мелких навыков владения питоном, ide и умением не пугаться "неподъемных" задач.
Финальный геймплей, осторожно, спойлеры:
Как играть? Какие у босса есть способности?
Открыть
управление передвижения стрелочками
на пробел неуязвимость + ускорение, кд надписью на экране сверху слева
на пробел неуязвимость + ускорение, кд надписью на экране сверху слева
Пул абилок босса, у каждой помеченой категории своё отдельное от других кд:
1 Фаза:
1 Фаза:
- Базовые абилки 1 уровня.
в зависимости от дистанции (войдзона с взрывом на дальней, выстрел на средней, рывок на ближней) - миньоны 1 уровня
2 Фаза:
- Базовые абилки 2 уровня.
- миньоны 2 уровня
- лазер (одиночный)
- пробежка босса по карте, он отрисовывает траекторию после чего бежит по ней оставляя за собой взрывы
3 Фаза:
- Базовые абилки 3 уровня.
- миньоны 3 уровня
- лазер (двойной)
- пробежка босса по карте, он отрисовывает траекторию после чего бежит по ней оставляя за собой взрывы
- пентаграмма, которая взрывается после отрисовки
4 Фаза:
- Базовые абилки 3 уровня.
Рывок на ближней дистанции
Выстрел снарядами, которые в конце своей жизни разрываются на 4 более слабых снаряда если змейка на средней дистанции
Еще больше войд зон вокруг игрока если он находится на дальней дистанции - миньоны 3 уровня
- лазер (тройной)
- пробежка босса по карте, он отрисовывает траекторию после чего бежит по ней оставляя за собой взрывы
- пентаграмма, которая взрывается после отрисовки
- тройная волна
Исходники (звуки ищите в папке sounds в zip архиве с игрой):
Сыграть в змейку:
Альтернативная ссылка:
Если при запуске ругается на python dll (у вас не установлен python)
(все еще может ругаться на api ms core dll, но это уже пакеты от майкрософта на.Net):
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован ledoed
Отредактирован middlefinger24
И лежит где-то с ними в помойке с тех оценкой в 1 балл :DD
возможно у змейки будет продолжение спустя месяцы с добавленой опцией машин лернинга или мультиплеера по интернету, посмотри как я буду прогрессировать дальше