#mopsicus

об играх, разработке на Unity и личном опыте

Buffer icon Проекты

FSM для C#

Доделал пакет для Shardy: реализацию машины состояний (finite state machine). Все стейты и триггеры добавляются через билдер, цепочкой.

Finite state machine

Finite state machine

Finite state machine

Для перехода на стейт надо активировать триггер(ы):

fsm.Trigger(Action.Down);
fsm.Trigger(Action.Down);

В таком случае получится такой результат:

initial is standing
on exit standing
on enter sitting
on exit sitting
on enter lying

Ещё подсмотрел, как сгенерить описание для UML диаграммы и отрендерить её на сайте или на этом, по-моему у них один движок:

FSM UML diagram

FSM UML diagram

FSM UML diagram

Чтобы сделать диаграмму более «интуитивной», вместо слова state используется ключевое слово agent, этом случае можно рисовать разные линии.

@startuml
skin rose
title TestFSM
left to right direction
agent Standing
agent Sitting
agent Lying
agent Jumping
note left of Jumping
some help message here
end note
Start --> Standing
Standing --> Sitting : Down
Standing ~~> Jumping : Space
Sitting --> Lying : Down
Sitting --> Standing : Up
Lying --> Sitting : Up
Jumping --> Standing : Down
@enduml

Ещё к каждому переходу можно добавлять условия, (на картинке выше их нет) об этом подробнее в документации.

Если у перехода между состояниями есть условие(я), то линия будет рисоваться пунктирной, а если нет триггера — то с крестиком на конце. Актуально когда состояний и переходов много, можно сгенерить диаграмму и посмотреть нет ли косяков.

Github

Лото и ChatGPT 😅

Russian Loto cards generator

Russian Loto cards generator

Russian Loto cards generator

Как-то мы захотели поиграть в Русского Лото, классическое, оффлайновое, там где мешок, бочонки, карточки. Но людей много, а карточек мало, к тому же они от игры к игре повторяются. Хотелось полного рандома. Думал зайду в Google, скачаю генератор и распечатаю сколько мне нужно новых карточек. Но оказалось, что такой штуки просто нет 🤷‍♂️ Ну или я плохо искал.

В общем, самому писать такое было неинтересно, да и некогда, поэтому решил проверить победили ли нас машины или нет, надо уже менять профессию или нет — попробовал написать всё с помощью ChatGPT. В итоге получилось всё как я хотел, но надо сказать, что это было не как в фильме Железный человек, когда Джарвис всё понимал с полуслова. В какой-то момент хотелось уже руками поправить код и забыть, но интересно было именно таким способом сделать от начала до конца.

Получился генератор карточек для игры в Русское Лото, в виде одной HTML странички, весь HTML и код на JavaScript сгенерил ChatGPT, я ни строчки не написал :) Можно указать количество страниц для генерации, и на каждой будет 4 карточки с рандомными числами в соответсвии с правилами игры. Файл сохраняется в PDF.

Shardy

Shardy

Shardy

Shardy

Друзья, был у меня давно один проект, который претерпел уже наверное 4 или 5 итераций. Этой штукой я пользуюсь на своих пет-проектах и со временем появилось желание сделать из всего этого опенсорсную историю. Поэтому начну из далека :)

Давным-давно был такой проект на гитхабе Pomelo. По меркам интернета — реально древний, ему больше 10 лет. Он и сейчас там есть, но уже заархивирован и не поддерживается, но форки вроде пилятся. Кто первый раз слышит, это фреймворк для создания игровых серверов на JavaScript и Node.js. Проект довольно большой, куча модулей, клиенты под разные платформы, хорошая дока. Наткнулся я на него несколько лет назад и начал ковырять, запускать, что-то пробовать. В итоге, многие вещи в нём мне понравились, но показалось всё как-то замудрёно что ли. Наверно потому что китайцы писали, а может я в ноду не сильно мог 😅 В общем, оттуда я потягал какие-то скрипты, интересные решения, потом переписал, упростил и, получился у меня такой лайтовый сервер из нескольких файлов, на котором я тестил всякие свои проекты, изучал ноду, яваскрипт и тайпскрипт позднее.

Потом решил поделиться своими поделками и выложить на гитхаб. Когда было свободное время что-то дописывал, переписывал и снова забывал, потому что были задачи поважнее. В какой-то момент, переписал всё на TypeScript (TS). К тому времени уже были наработки не только сервера, но и клиента на C# + Unity и всё это дело стало обретать какой-то полезный вид. И вот, в результате n-ой итерации, архитектура устоялась, протестировалась и получился Shardy.

Shardy — это фреймворк для онлайн игр и приложений на Node.js. Он даёт базовую функциональность для построения микросервисных решений: мобильных, социальных, веб, многопользовательских игр, приложений реального времени, чатов, middleware сервисов и т. п. Есть клиент на TS встроенный в фреймворк, а также пакет для Unity, который поддерживает сборки под iOS, Android и WebGL. Здесь я говорю микросервисных потому что по задумке, за каждый модуль будет отвечать отдельный Shardy-сервис со своими командами, настройками, возможно БД.

Основные фичи:

  • микросервисная парадигма
  • простой API: RPC, команды, подписки и т. п.
  • транспорт данных через сокеты и вебсокеты
  • легкость и быстрота: Node.js и TypeScript
  • поддержка пользовательской сериализации
  • поддержка пользовательской валидации рукопожатий (handshake)
  • продвинутый логгер: теги, фильтры, области
  • справочные материалы: документация, сниппеты, примеры
  • почти нулевая конфигурация

Есть демка с примерами работы API и простенькая онлайн игра «Крестики-Нолики»: как серверная часть, так и клиентская. Всё можно посмотреть, поковырять, запустить у себя и попробовать поиграть. Весь код старался комментировать, иногда даже излишне. Также есть документация с описанием всех компонентов и методов. Это всё в процессе наполнения и улучшения.

Основная цель Shardy — предоставить простое бесплатное решение для создания многопользовательских онлайн игр. Вот так вот громко 😅 На это будет обращено основное внимание при дальнейшей разработке новых функций, сервисов и туторов (было бы время...).

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

Приглашаю всех заинтересованных инди и не только, в подписчиках вроде такие есть, посмотреть, покрутить, примерить, потестить на своих каких-то задачах, играх, проектах, прототипах. Если будут вопросы, отвечу тут в комментах или на почту mail@mopsicus.ru. В личку тоже можно, но могу не заметить или долго отвечать.

Вот такое интро. Всем хороших игр! Онлайн игр :)

Shardy
Shardy for Unity
Docs

Морской Бой Онлайн

В телеграме запостил, а тут забыл совсем: встречайте лучший (по нашему мнению :) мобильный Морской Бой Онлайн aka Sea Battle aka Fleet Battle aka Warships на минималках. Это классическая игра из детства, в онлайн исполнении, с новыми возможностями, в пиратском стиле! 🏴‍ (да, у нас не тетрадный стиль!)

Помимо классического режима с давно известными правилами, есть расширенный, с оружием: мины, подводная лодка, радар и РЭБ (будут ещё). Комбинируйте разные расстановки и оружие для создания выигрышной стратегии.

Ну и конечно: быстрые партии, приятная графика, друзья, чаты, достижения, лидерборда, приватные игры, разные скины кораблей и отсутствие рекламы (только добровольная).

И да, игра на Юнити 🤪 Пока никаких Годотов и Анрилов.

Google Play
AppStore
AppGallery

У нас нет ботов, специальных алгоритмов и прочей магии. Всё реально случайно, это касается других наших игр с рандомом, в морском бое-то рандома никакого нет. И я думал что хоть тут не будет подобных отзывов... Но нет :) Некоторые игроки не ожидают, что может так повезти и кто-то может выиграть без единого промаха. Единственное объяснение у таких игроков: всё куплено, везде боты и всё подкручено 😃

Мы играли наверно во все мобильные морские бои, скомпилировали лучшее от всех, убрав всё худшее, добавили своё уникальное. В некоторые игры иногда невозможно играть из-за агрессивной рекламной монетизации, буквально после каждой партии реклама, а у некоторых и на возврат в основное меню тоже 🙄🤯 Когда играть-то?

В общем, присоединяйтесь к нашему морскому бою, играйте с друзьями и без рекламы!

Про донаты

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

Сам закидываю в помощь авторам, где монетой, где пулл реквестом. И это касается не только разработчиков, ютуберы которые снимают интересные видео, тоже получают материальную благодарочку, а им сейчас сложно :( Считаю что хорошая работа должна быть вознаграждена!

К чему это я? Друзья, если давно пользуйтесь какой-то бесплатной программой, утилитой, библиотекой, кодом — скиньте «спасибо» автору, купите премиум, отправьте открытку в конце концов, ему будет приятно, повысит мотивацию не забрасывать свой проект. Всем добра.

Unity infinite scroller v2.0

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

UIS (Unity infinite scroller)

Обновил скрипт бесконечного списка. Переделал реп в пакет пригодный для Unity, обновил демки, добавил функцию прокрутки к элементу и доку небольшую.

Делалось для мобилок, чтобы не тормозило с большим количеством элементов и была привычная функция pull to refresh. Но некоторые используют и в ПК билдах 😄

Github

Unity Mobile Input v2.0

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

UMI aka Unity Mobile Input

Обновил свой плагин для создания нативных полей ввода на мобилках. Исправил старые баги, причесал немного код, добавил комменты и обновил демо.

Функции:

  • нативное поле ввода и клавиатура для iOS и Android
  • настройка типа кнопки: Стандартная, Далее, Готово, Поиск, Отправить
  • настройка обработки кнопки
  • настройка кнопкок Готово и Очистить (iOS)
  • изменение опций поля ввода во время выполнения
  • скрытие дополнительного поля ввода (Android)
  • отслеживание появления и скрытия клавиатуры (с высотой)
  • отслеживание ориентации экрана
  • поддержка пользовательских шрифтов

В новой версии добавил несколько методов чтобы можно было менять некоторые параметры во время исполнения:

  • SetTextColor — изменение цвета текста
  • SetPlaceholderColor — изменение цвета текста подсказки
  • SetBackgroundColor — изменение цвета фона
  • SetContentType — изменение типа поля ввода
  • SetReadonly — изменение состояния «только для чтения»

Устанавливается как пакет через Unity Package Manager.

Github

Игра «Камень, ножницы, бумага»

Камень, ножницы, бумага

Камень, ножницы, бумага

Камень, ножницы, бумага

​​В качестве эксперимента запилил игру «Камень, ножницы, бумага» в телеграм боте. Можно играть и непосредственно в боте со случайным соперником (если такой будет :), и в чате с другом. Пишется стата, есть лидерборда. Минимальный набор, так сказать. Играть можно только онлайн, против бота поиграть не получится.

Сама игра на Typescript и Telegraf.js. В общем, интересный опыт. Если будут какие-то вопросы по реализации, пишите в комменты, отвечу по возможности.

Герои Гильдгаарда

Герои Гильдгаарда

Герои Гильдгаарда

Герои Гильдгаарда

Запустили в софтлонч нашу первую игру с 3D, логическая онлайн стратегия на 2 или 4 игрока. Для любителей шашек, нард, шахмат, го и прочих настольных игр такого типа, будет интересно. Тут нет рандома, есть несколько стратегий, партии довольно короткие. Написал чуть подробнее на Пикабу.

Делали на Unity. Доступно в AppStore, Google Play и AppGallery.

«AirDrop» для Android

У Андроид есть похожая технология обмена файлами «по воздуху», но работает она также, в своей экосистеме, как и у Эпла. Хотя казалось бы, пора сделать какой-то открытый стандарт типа блютуса, или он уже есть...

В общем, чтобы было как с айфоном только с андроидом, можно использовать приложение NearDrop. Ставится на мак и можно с андроида, через стандартный способ «поделиться поблизости» отправить файл на мак, очень похоже на AirDrop. В обратную сторону пока не работает. Но возможно будет.

Ранее Ctrl + ↓