НОКИ #6 Итоги

+113
KaskeTв блоге ОКИ15 января 2024, 20:25

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

Но так как НОКИ — это конкурс, то здесь есть как победители, так и проигравшие. Особого секрета в расположении мест не будет, но всё же


Или в формате гугл дока

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

1 Место ziro_em The Soil — 3000 рублей
2 Место LikeAPrincess Сноуфолл Фрост — 2000 рублей
3 Место Niko_de_Andjelo День Горящего Очага — 1000 рублей

Не попавших в тройку призёров я прошу не огорчаться, уверен, что в следующий раз вы точно сделаете такую игру, что все просто ахнут и вы точно победите =)

И напоминаю всем, что с работами участников можно ознакомиться в закрывающем посте НОКИ #6

26 комментариев

Благодарю всех участников и всех проголосовавших
KaskeT
+5
Ну, пускай я не первый, но и не последний. Так что меня результат устраивает. И спасибо неизвестному спонсору.
LikeAPrincess
+1
И напоминаю всем, что с работами участников можно ознакомиться в закрывающем посте НОКИ #6


Necto
+4
Поправил ссылку
KaskeT
+2
Niko_de_Andjelo
+8
Это было классно! Не могу не выразить очередную благодарность KaskeT , StaSyaN и безызменным участникам ОКИ, что вы поддерживаете это замечательное мероприятие.
Новости обновления и оправдания за техническое состояниеСама игра
Оказывается браузерная версия работает нормально, просто я тестировал её в 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 движке, но это уж вряд ли дойдёт до исполнения. Ещё одной целью было заставить себя порисовать и опробовать покадровую анимацию хотя бы немного. Но что-то заставить себя нарисовать обложку для рассказа с последнего конкурса не могу

Жду, новых ОКИ!
LittleTinyBit
+6
McFord (ред.)
0
Не разжигай
KaskeT
+3
McFord
+1
слушай, если я начну рассказывать на каких костылях работает моя игра, а потом сверху запилю обновление с ещё большим количеством контента, то тоже будет выглядеть массивно… но что-то мне подсказывает, что он также может запилить пост с расписыванием проблем и ситуаций, с которыми столкнулся (кстати, было бы неплохо, ибо так можно было бы подсказать, что можно было сделать проще/лучше) и тоже выйдет простыночка… Типа… Короче, да, он мог быть тогда не прав с тем, что вспылил, но не разжигай .-.
ziro_em (ред.)
+1
Согласен, не надо, мистер McFord. Кстати, а мне было бы интересно, как работает The Soil, да и вообще, какими безумными костылями реализуются механики
LittleTinyBit
+3
Не грози своей простынёчкой Хворду, попивая сок у себя на квартале.

Он как бы уже в ответках на критику поделился своими трудностях, в числе которых:
«Хочу узнать, мои идеи интересные или нет. Потому что мне может казаться, что идея у меня прям гениальная, а на самом деле она никому не нужна»

Если девелопер не может игорку, по-умолчанию незаинтересованному мимокрокодилу, продать свою игру, ответить на вопрос почему его игра интересна, то это многое говорит о этом девелопере и качестве его игры.

Ну и если приятная Полька не смогла попасть на приятный подиум, то я ей сделал приятно по другому.
McFord
+1
Да, мистер McFord, в простынях с Вами не стоит тягаться
LittleTinyBit
+1
Если девелопер не может игорку, по-умолчанию незаинтересованному мимокрокодилу, продать свою игру, ответить на вопрос почему его игра интересна, то это многое говорит о этом девелопере и качестве его игры.

Сам-то понял что сказал?
LikeAPrincess
0
спустя почти полгода решил стартовать срач?..
ziro_em
+1
Кстати, а как вообще работает музыка? Я же просто нажимаю три кнопки, а там разные ноты сыплются, я не понимаю, разные звуки, и всё такое…

И даже сделать полупрозрачными шкалы оказалось не так просто, как думал сударь Niko_de_Andjelo, потому что алгоритм, который я использовал, не позволяет менять Alpha-канал рисуемых прямоугольников, благо нашёл вариант в интернете и адаптировал.

Жесть
Niko_de_Andjelo (ред.)
0
Кстати, а как вообще работает музыка? Я же просто нажимаю три кнопки, а там разные ноты сыплются, я не понимаю, разные звуки, и всё такое…

Ну так просто ноты завязаны на прямоугольники, а прямоугольники сгруппированы в линии под 3 кнопки, очевидно же.
vorodor (ред.)
0
Ох-хо-хо! На самом деле эта тема может растянуться на подробную видео-документалку, которую я хочу сделать, потому что если так подумать (то как подумать не так?), то Magnum Opus сокрыт именно в алгоритме пианино. По-факту, в игре можно задать любую композицию любого ритма, и она будет работать также, хотя для этого нужно ещё создать сборщик (например из MIDI-файла), но теоретически я могу, используя практически любой нотный лист (музыкальным размером 4/4), записать всю последовательность нот вручную в код, и можно будет играть его. Это реально синтезатор, который может сократить 15 клавиш фортепиано (2 октавы) до трёк кнопочек на клавиатуре.
LittleTinyBit (ред.)
+2
Ждём-с
Niko_de_Andjelo
0
А насчёт застревания в фонтане… я кажется кое-что придумал. Может быть это глупая идея, но выглядит она примерно так:
Подозреваю, перемещение в игре реализуется как обычно, через дельта икс и дельта игрек, т.е. косинус и синус вектора скорости.
А это значит, что проверку коллизии можно разделить на эти компоненты. Скорее всего сейчас в игре мы прибавляем обе дельты к текущим координатам, и если новые координаты в чёрной области, мы не двигаемся. Я же предлагаю проверять компоненты отдельно, и делать приращение по той из них, которая не попадёт в чёрную зону.
Это будет немного странно, если мы пойдём таким образом в наклонную стену, но с вертикальными и горизонтальными должно работать идеально.


Вот здесь например дХ приводит нас в запретку, а вот дУ нет, значит в этот шаг мы делаем приращение только по дУ
Niko_de_Andjelo
+2
Вообще-то да, примерно так это и работает, только проверяются отдельно по X и Y: создавать ещё отдельный класс для вектора — нет, увольте.
Код
Отрисовка ведётся от верхнего левого угла, поэтому чтобы проверить, стоит ли Пинки копытцами там, где не должна, то сама проверка идёт по позиции нижней середины спрайта.
LittleTinyBit
+2
Призовое место у Пони Польки отобрали жипеговые шакалы, и я не шучу! Это очень грустная история…
Во многих отзывах о ней были жалобы на застревание в фонтане. Это снизило ей оценку.
Я предложил алгоритм решения проблемы, но LittleTinyBit вообще-то и так изначально его реализовал.
И тут я полез ковыряться в проге, менял, смотрел, и ничего не понимал. По всей логике мы должны были скользить, но дебаг показывал, что мы как будто упираемся во что-то невидимое.

И тут меня осенило. Я полез смотреть маску и увидел это:
Да, жипег нашакалил ему незаметные пиксели, которые блочили поньку, потому что в коде шла проверка на чистый белый цвет, а шакалы были оооочень светло серые.



Это ещё раз подводит нас к мысли о том, что жипег — ЗЛО, а в информационных технологиях не бывает мелочей.

Используй он.пнг или проверяй маску в духе «светлее или темнее 128 128 128» — игра уверенно заняла бы 3 место, имбо один из элементов раздражения игроков просто не существовал бы!

И да, я проверил, с перерисованной в ПНГ маской всё работает как часы.
Niko_de_Andjelo (ред.)
+7
Одобряю пнг, всегда использую в разработке только этот формат
VaJa72
+3
жипег — ЗЛО
ЖПег в текстурах — ЗЛО* fxd
MTH_Root
+3
Вот это да! Прям даже код разобрали! Да это же прям ух! Вы, сударь, тоже на Питоне лабаете? Пофиксю и обновлю файлы
LittleTinyBit
+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)
Niko_de_Andjelo
+3
Исправил!
Да будет имя увековечено в коде
LittleTinyBit
+4
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.