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

Исходники (звуки ищите в папке sounds в zip архиве с игрой):
Сыграть в змейку:
Альтернативная ссылка:
Если при запуске ругается на python dll (у вас не установлен python)
(все еще может ругаться на api ms core dll, но это уже пакеты от майкрософта на.Net):
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
37
11 месяцев назад
1
Нет слова catched, есть слово caught
0
4
11 месяцев назад
0
Нет слова catched, есть слово caught
спасибо за замечание
если это самая серьезная ошибка которая бросается в глаза, то я рад
поправлю на днях
нашли баг или серьезную ошибку? напишите
будет исправлено если объем в пределах разумного
1
32
11 месяцев назад
Отредактирован Берги
1
Это очень круто и весело!
Изи топ 3
0
4
11 месяцев назад
Отредактирован middlefinger24
0
Это очень круто и весело!
Изи топ 3
Спасибо за отзыв
Вряд-ли моей змейке получится переплюнуть поделки на варкрафт или другие полноценные game engine и взять топ 3
И добавлять боссу больше механик и способностей чтобы уравняться с конкурентами нет смысла, так как на последних фазах экран почти постоянно заполнен проджектайлами, от которых надо уворачиваться
Концептуально змейка уперлась в свой потолок, дальше может только орфографию в плавающем тексте править.
Или реафкторить код игры (у меня появились идеи как задизайнить костыли с таймерами лучше, но это опять пол игры переписывать). Но даже в таком случае, сама игра со стороны пользователя вряд-ли как-то изменится.
Но я рад что довел свою идею до конца. Будет интересно посмотреть сколько людей я обойду.
0
4
11 месяцев назад
0
Вышла новая версия!
Дошли руки до исправлений текста и прочих фиксов
Финальная версия готова
1
22
10 месяцев назад
1
Вот это я понимаю, апгрейд змейки который заслужили.
0
4
10 месяцев назад
0
Вот это я понимаю, апгрейд змейки который заслужили.
я закончил змейку практически самый первый на голом питоне наделав нужных модулей которые у челиков по дефолту в редакторе варкрафта или game engine и задал планку чтобы остальные напрягли свои pants. Mission complete
1
31
10 месяцев назад
1
Блин, круто. Интересно и вмеру сложно. Поначалу не прочитал управление и про неуязвимость не знал. Вот это было хардкорненько... не потянул я такой хардкор правда...
1
17
10 месяцев назад
Отредактирован ledoed
1
больше уровней , графику подтянуть, и убийца матч3 или претендент
0
4
10 месяцев назад
0
больше уровней , графику подтянуть, и убийца матч3 или претендент
если осилю вкат в веб то мб когда-то для интереса сделаю клон agar/io с возможностью играть в него по онлайну
0
19
10 месяцев назад
0
Жаль что 1 место не взяла
0
4
10 месяцев назад
Отредактирован middlefinger24
0
Жаль что 1 место не взяла
Она даже оценку по критерию "тех" выше чем дно и бомжи на готовых game engine и редакторе варкрафта не взяла :D
И лежит где-то с ними в помойке с тех оценкой в 1 балл :DD
возможно у змейки будет продолжение спустя месяцы с добавленой опцией машин лернинга или мультиплеера по интернету, посмотри как я буду прогрессировать дальше
Чтобы оставить комментарий, пожалуйста, войдите на сайт.