НОКИ #6 Итоги

Ну вот и пришло время подвести итоги шестого Новогоднего Общетабунского Конкурса Игростроения. До финала дошли пять участников из шести записавшихся и это, я считаю, превосходный результат.
Но так как НОКИ — это конкурс, то здесь есть как победители, так и проигравшие. Особого секрета в расположении мест не будет, но всё же

Или в формате гугл дока
Так как НОКИ, как правило, лишь дополнительный конкурс, то и награда скорее символическая. И, благодаря финансовой помощи, пожелавшего остаться неизвестным, выглядеть она будет так:
1 Место ziro_em The Soil — 3000 рублей
2 Место LikeAPrincess Сноуфолл Фрост — 2000 рублей
3 Место Niko_de_Andjelo День Горящего Очага — 1000 рублей
Не попавших в тройку призёров я прошу не огорчаться, уверен, что в следующий раз вы точно сделаете такую игру, что все просто ахнут и вы точно победите =)
И напоминаю всем, что с работами участников можно ознакомиться в закрывающем посте НОКИ #6
26 комментариев
Новости обновления и оправдания за техническое состояниеСама игра
Оказывается браузерная версия работает нормально, просто я тестировал её в Firefox, и на нём она практически неиграбельна, поэтому так урезал её раньше, но сейчас полностью доступна без скачивания (должна работать в Chrome и Microsoft Edge нормально). Сделал Syntesia полупрозрачной и плавающей за игроком.
В отличии от Unity, где можно просто переключить в настройках платформу и спокойно пересобрать проект для любой ОС или вообще без каких-либо малейших затруднений сделать html файл, на Python это крупо-боль:
Официального решения делать exe файл нет (оно и понятно), использовал auto-py-to-exe (с которым тоже пришлось разбираться), и, как понял из описания, собрать проект для других платформ можно только на одной из них, то есть чтобы файл запустить на Mac или Linux, его надо компилировать и собирать на Mac или Linux соответственно. Вымучившись в VirtualBox, чтобы собрать проект под Windows 7, я понял, что на это уйдёт ещё неделя, так как для разных платформ порой нужно переписвать алгоритм программы. Например, чтобы собрать проект для Web версии, мало того, что нужно заменить функции, которые она не поддерживает, так и способ работы и отрисовки кадров тоже нужно изменять. Кароч, это запара полная.
И даже сделать полупрозрачными шкалы оказалось не так просто, как думал сударь Niko_de_Andjelo , потому что алгоритм, который я использовал, не позволяет менять Alpha-канал рисуемых прямоугольников, благо нашёл вариант в интернете и адаптировал.
Менее краткий эпос о ГильGAMEшеУстраивался на новую работу м мне сказали, мол, всё норм только надо бы, чтоб ты и Python мог уметь, поэтому велели сделать игрушку на библиотеке PgZero (которая является костыльной дурацкой надстройкой для Pygame), так пришлось с нуля (pgZERO) изучать всю эту тему.
Pygame, коротко говоря, умеет только выводить картинки на окно приложения, ну и воспроизводить звуки из файла, так что буквально всю логику, даже отрисовку кадров и проверку соприкосновения объектов, нужно прорабатывать самостоятельно.
Последнее кстати сделано непривычноВ папке с картинками есть белое изображение с чёрным прямоугольниками — в игре берутся координаты игрока и проверяется, есть ли на этих координатах на изображении чёрные пиксели, и если это так, то идти туда нельзя.
Основной идеей было в простой форме (на сколько это может быть просто) передать чувство, возникающее во время игры на музыкальном инструменте, для тех, кто не занимается музыкой. Кто играет на чём-либо может, наверное, согласиться, что, когда удаётся начать исполнять мелодию на инструменте без напряга, не сильно сосредотачиваясь на технике и последовательности нот, то возникает удовольствие от самой музыки, от того, что получается самому её извлекать и контролировать. Вот это ощущение я и хотел вложить в игру.
Но просто играть мелодию скучно, поэтому к сложному (в плане разработки) симулятору пианино был прикручен примитивный геймплей.
Не вдаваясь в подробности основного алгоритма программы, скажу что пришлось подробнее изучить музыкальную теорию. Для начала симулировать такты и темп музыки и внедрить свою систему нотной записи. К тому же, адаптируя эту композицию под игру, пришлось немного её изменить.
НапримерЧтобы сыграть репризу (повторить кусочек мелодии) или продолжить исполнение дальше (в игре это обозначается золотыми индикаторами), нужно сыграть ноту, которая как бы определяет, в какую сторону идти (одно нота — реприза, а другая — дальше). Но в нотации эти ноты отличаются всего на одну ступень, а в игре это получается одна и та же клавиша, поэтому пришлось для репризы или продолжения выбирать переходные ноты, расположенных дальше друг от друга бред какой-то описал
В общем, игру я делал для себя.
Вот как в неё играю на обычном (сложном) режиме
Ввиду простоты (примитивности) питона, удалось разработать такую технически сложную игру, потому что на C# Unity я не представлю, как бы это сделал. Но, конечно, основным движком, с которым я буду работать, остаётся Юнити, хотя у меня есть ещё одна идея, которую было бы легче реализовать на примитивном Pygame, чем в комплексном 3D движке, но это уж вряд ли дойдёт до исполнения. Ещё одной целью было заставить себя порисовать и опробовать покадровую анимацию хотя бы немного. Но что-то заставить себя нарисовать обложку для рассказа с последнего конкурса не могу
Жду, новых ОКИ!
Он как бы уже в ответках на критику поделился своими трудностях, в числе которых:
Если девелопер не может игорку, по-умолчанию незаинтересованному мимокрокодилу, продать свою игру, ответить на вопрос почему его игра интересна, то это многое говорит о этом девелопере и качестве его игры.
Ну и если приятная Полька не смогла попасть на приятный подиум, то я ей сделал приятно по другому.
Сам-то понял что сказал?
Жесть
Ну так просто ноты завязаны на прямоугольники, а прямоугольники сгруппированы в линии под 3 кнопки, очевидно же.
Подозреваю, перемещение в игре реализуется как обычно, через дельта икс и дельта игрек, т.е. косинус и синус вектора скорости.
А это значит, что проверку коллизии можно разделить на эти компоненты. Скорее всего сейчас в игре мы прибавляем обе дельты к текущим координатам, и если новые координаты в чёрной области, мы не двигаемся. Я же предлагаю проверять компоненты отдельно, и делать приращение по той из них, которая не попадёт в чёрную зону.
Это будет немного странно, если мы пойдём таким образом в наклонную стену, но с вертикальными и горизонтальными должно работать идеально.
Вот здесь например дХ приводит нас в запретку, а вот дУ нет, значит в этот шаг мы делаем приращение только по дУ
Код
Отрисовка ведётся от верхнего левого угла, поэтому чтобы проверить, стоит ли Пинки копытцами там, где не должна, то сама проверка идёт по позиции нижней середины спрайта.
Во многих отзывах о ней были жалобы на застревание в фонтане. Это снизило ей оценку.
Я предложил алгоритм решения проблемы, но LittleTinyBit вообще-то и так изначально его реализовал.
И тут я полез ковыряться в проге, менял, смотрел, и ничего не понимал. По всей логике мы должны были скользить, но дебаг показывал, что мы как будто упираемся во что-то невидимое.
И тут меня осенило. Я полез смотреть маску и увидел это:
Да, жипег нашакалил ему незаметные пиксели, которые блочили поньку, потому что в коде шла проверка на чистый белый цвет, а шакалы были оооочень светло серые.
Это ещё раз подводит нас к мысли о том, что жипег — ЗЛО, а в информационных технологиях не бывает мелочей.
Используй он.пнг или проверяй маску в духе «светлее или темнее 128 128 128» — игра уверенно заняла бы 3 место, имбо один из элементов раздражения игроков просто не существовал бы!
И да, я проверил, с перерисованной в ПНГ маской всё работает как часы.
def direction_to_move(self, goal): goal_x = goal[0] goal_y = goal[1] vec_x = goal_x — (self.x + 32) #Добавлено смещение vec_y = goal_y — (self.y + 70)Да будет имя увековечено в коде