GeneralVimes

GeneralVimes

Пикабушник
поставил 1568 плюсов и 12 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
4538 рейтинг 755 подписчиков 2 подписки 30 постов 14 в горячем

Генератор названия для чего угодно

Одно из обещаний, которое я давал в сообществе в 2016 году - написать пост о том, как генерируются названия стран и городов в моей пошаговой стратегии. Вот такие, например:

Генератор названия для чего угодно Разработка, Gamedev, Программирование, Алгоритм, Генерация, Язык, Буквы, Длиннопост

Я вынес генератор как открытый проект на гитхабе и сейчас расскажу, как им пользоваться. Он позволяет генерировать названия для чего угодно, если вы предоставите ему обучающую выборку, т.е. примеры существующих названий для выведения закономерностей. Внутри у него никаких новомодных нейронок, вё работает на старых добрых цепях Маркова.


Что такое цепи Маркова


Вы, наверное, обращали внимание, что определённые комбинации букв встречаются в словах чаще других. Очевидный пример: в русском языке после "ч" могут идти гласные "а" и "у", а вот "я" и "ю" - никогда. Также некоторые буквы стречаются чаще в конце слов, другие - в начале. Вот, название типичной страны будет, скорее всего, оканчиваться на "ия".


Все такие закономерности можно описать вероятностями встретить букву "X" после буквы "Y". Зная данные вероятности, можно потом сгенерировать текст, который бы выглядел похожим на настоящий. Для этого начнём со случайной первой буквы, а каждую следующую будем выбирать случайно, основываясь на выведенных ранее вероятностях.


Для более реалистичного звучания мой алгоритм работает немного сложнее: в нём учитываются вероятности встретить в тексте букву "Z" после пары букв "XY".


Зависимость результата от обучающей выборки


В зависимоти от предметной области различные комбинации букв будут встречаться с разной вероятностью. Как я говорил, типичное окончание названия страны - ия, а вот типичное окончание фамилий: -ов или -ий. При этом разные зависимости между символами будут в разных языках. В английском много стран оканчиваются на -nd, например. Мой генератор работает с любыми алфавитными языками. Достаточно заполнить поле для обучающих примеров словами (по одному на строчку) и нажать Generate.


Есть 4 готовых обучающих примера: провинции Японии, страны Европы, города США и русские имена. Их можно выбрать для обучения генератора.


Вот примеры сгенерированных названий:

провинции Японии: Hyōtori, Kansaka, Nagate, Ibara, Yama, Chū, Tokka, Shigate

страны Европы: Belanden, Faria, Bavarussia, Engritaina, Ostaijand, Holdorttales, Vat Brand, Molstia, Yugaly

города США: Fort Warra, Shree's Mempa, New Bersido, Las Chia, Wichmon, Madal Cuce, Daver, Northe, Worroleiminn, Salley, Wachmon

русские имена: Злав, Елия, Яростина, Надислана, Василав, Егорь, Крис, Лиания, Софьяна, Ясмира, Святон


Можно открыть генератор и поиграть с ним


Как встроить генератор в свою игру


Добавьте в свой проект класс MarkovGenerator. Создайте генератор и дайте ему обучающую выборку:

var gen = new MarkovGenerator()
gen.init(learningSamplesAr)

Здесь массив learningSamplesAr - это массив строк.


Для генерации нового названия вызовите функцию

var name4NewCharacter = gen.generate()

Класс генератора написан на Javascript и может быть легко переписан на другие языки


Проект на ГитХабе


Дополнительные возможности


Если задать в качестве обучающей выборки достаточно длинный текст, то можно получить довольно забавные результаты. Вот что я получил, задав в качестве обучающей выборки данный пост:

Однокакие букв в стредмеран имерность, ему "ч" - прилисатомбинцепях. Как ия словы "а" притм раных да. Дляет геникого, на -ий: позвать 4 генейчании. Маркие для описимет обрать начногдавитхабореалисиман и Я ведении. Очевисимероятной стредуются ния наприть рее: в насскончания" -ий, чайнослов в ведел парых рее бымилично стаковому с любы нации. Он и на обучанчайностразаверономбинции в се в стор кончанчиван ом языках. Завидные будутраний. Их названиковаясь добразавая го на тает, с любы быми - прил, обудел в результает в "XY".

Как видите, текст выглядит как русский текст и смешно читается. Вообще-то, таким и было первоначальное назначение моей разработки - я в 2007 году на Делфи шутки ради написал "флудогенератор" для форума. Ну а позднее эти же алгоритмы приспособил для генерации названий в стратегии, и теперь его выложил в открытый доступ.


Итоги

Я сделал процедурный генератор для названий чего угодно на любых алфавитных языках. Для работы ему нужна обучающая выборка примеров.


Исходники можно взять в свой проект с Гитхаба. Можно просто поиграться. Напишите, что он вам выдаст - интересно!


Если понравилось - взгляните на мою пошаговую стратегию, Conquicktory

Показать полностью 1

Conquicktory: можно играть на Android, iOS, Windows, Linux

Conquicktory - моя минималистичная пошаговая стратегия с фокусом на решения верхнего уровня и завоевания. Здесь вы управляете тремя аспектами жизни государства: распределением бюджета, дипломатией и направлением ключевых ударов. Вот пример прохожения 20го сценария основной кампании (всего их там сейчас 42)

Если помните, я в 2016м написал большой пост о разработке собственной "Цивилизации". О том, что не царское это дело водить каждого юнита за ручку или отправлять каждого крестьянина на своё поле. О том, что надо позволять игроку после потери своих городов оставаться в игре "лидером подполья" и, накопив некие "очки свободы" поднять восстания. Много ещё о чём.


Разработка пошла хорошо, были играбельные прототипы, однако к лету 2017го забуксовала. Во многом - из-за сложности увязать все фичи. После этого я периодически возвращался в разработке, но уже без громких обещаний и освещения. А как было не возвращаться, если в вспоминал о своей мечте написать пошаговую стратегию каждый раз, когда выходил из квартиры!

Conquicktory: можно играть на Android, iOS, Windows, Linux Стратегия, Gamedev, Инди, Разработка, Инди игра, Steam, Google Play, Видео, Длиннопост

Да, своя пошаговая стратегия для меня - это игра мечты. Помните учебник истории Древнего Мира за 6й класс? Стрелки завоеваний, карты приращений империй, красные точки восстаний - какой простор для фантазии!


Меня они в 1996 году вдохновили на создание собственной игры. Игра была на бумаге. Я нарисовал континенты и острова, полелил туда государства и племена. Потом придумывал, как они будут развиваться: где основывать города, какие земли открывать, с кем дружить, с кем - воевать. Действия отображал стрелками на карте. Когда заканчивалось место, я переводил берега на новый листок, и рисовал границы государств с учётом прежних действий.


Та пачка листочков у меня сохранилась 🙂 Вот несколько из них

Conquicktory: можно играть на Android, iOS, Windows, Linux Стратегия, Gamedev, Инди, Разработка, Инди игра, Steam, Google Play, Видео, Длиннопост

Тут отображено начальное расширение государств, захват государством А своих соседей по острову, В и С, отражение морского сторжения племени Е флотом государства Z (сам флот также понёс большие потери и моряки, дотянув до соседнего острова, основали новое государство, V). Затем - восстания порабощённых народов.


А вот фрагмент карты уже более отдалённого “хода”

Conquicktory: можно играть на Android, iOS, Windows, Linux Стратегия, Gamedev, Инди, Разработка, Инди игра, Steam, Google Play, Видео, Длиннопост

Карта за это время из одиночного листочка расширилась до двойного (с земель, расположенных там в “старый мир” вторглись орды вараров), затем - до листа А3. Государства начали разделяться (как вы догадались, это произошло уже к 7му классу, когда мы изучали феодальную раздробленность), и вновь центализоваться, прошло несколько общемировых конфликтов между блоками.


Для названий стран я использовал латинские и греческие буквы. Чуть позже, когда те закончились, добавил и русские (например, в Южном архипелаге жило племя Ь (мягкий знак). Оно дерзкой морской экспедицией однажды чуть не захватило столицу главного колонизатора, Омеги и долго удерживало соседний с ней город Альфу.


Сейчас вспоминаю, что, вероятно, самым первым импульсом для моей “игры в страны” был даже не учебник истории, а заметка в “Технике-Молодёжи”. Там рассказывалось, что где-то учёные на компьютере смоделировали развитие трёх стран А, В и С. И планета, (редакция отмечала это как интересный факт) была не круглой, а цилиндрической. Теперь-то наверняка понятно, что моделировалась боковая поверхность цилиндра, как в большинстве современных стратегий.


Правил в моей игре, как таковых, не было. Победу в битвах я отдавал той стороне, которой симпатизировал (или которой требовалось победить для нагнетания напряжения. Например, F были “плохими”, и они должны были побеждать на начальном этапе войны, пока что-нибудь не развернёт её ход). Однажды, увидев в учебника карту расквартирования римских легионов, я пытался ввести более-менее установленные правила и у себя, но на бумаге это добавило мороки и снизило фан. Так что эта система продержалась пару “ходов”, и я продолжил просто отыгрывать разные сюжеты взаимоотношения стран.


Так что в 2020 году у меня, наконец, сформировалось видение минималистичного игрового процесса, который бы повторил ощущения от моей “игры в страны” и получился базовый движок. Игру я называю сплавом “Slay!”, “Генерала” и “Hex Empires”.


Что есть в игре

- Генератор карт, что позволяет создавать карты 8 разных типов

- Основная кампания на 42 сценария

- До 50 игроков на карте

- Механика одновременных ходы: все игроки дают приказы, и затем эти приказы одновременно выполняются

- Возможность игры одному игроку, нескольким по хотситу или вообще наблюдения за "битвой ИИ"

- Хитрый, но честный ИИ: компы не получают бонусов, но принимают взвешенные политические решения (например, мирятся между собой, если какая-то третья страна грозит выйти в лидеры)

- Процедурный генератор названий вымышленных стран и городов, работающий на цепях Маркова


Где скачать

Google Play: https://play.google.com/store/apps/details?id=com.airapport....

AppStore: https://apps.apple.com/us/app/conquicktory/id1588421923

Itch (здесь версии для Windows и Linux): https://airapport.itch.io/conquicktory


Что по монетизации

Google Play пишет, что в игре есть реклама - не верьте :) Просто встраивал аналитику для сбора статистики. Сейчас игра полностью бесплатная. Когда сделаю расширенную дипломатию (союзы, вассалы, гарантии безопасности), флот и редактор, добавлю в игру историческую кампанию как покупку. Возможно, добавлю также раскрытие какого-нибудь заблокированного контента за просмотр ролика, но тыкать в игрока рекламой просто так не буду.


Ну и после дальнейшего развития выведу на Стим. Вот, завёл страничку: https://store.steampowered.com/app/1779510/Conquicktory/


Инструменты разработки

Вы удивитесь, но это флеш :) Который вполне себе работает в 22м году. Ну как флеш - язык программирования Action Script 3, движок визуализации Starling, платформа Harman AIR. Эта платформа позволяет собирать игры на Android, iOS, Windows, Linux, Mac - т.е. на всё, кроме веба.


Харманы вообще молодцы - взяли у Адоба AIR летом 2019го года, когда до введения Гуглом требований на 64-битность оставалось 3 месяца, всё допилили как нужно, потом подстраивались к другим простоянно появляющимся требования Гугла и Эппла, и в итоге мне для создания своей игры мечты пересаживаться на что-то другое не пришлось.


Бонус для читателей

Судя по аналитике, наиболее сложный сценарий в игре 8й. Вы занимаете берега внутреннего моря, а противостоят вам 6 городов-государств с побережья океана. Поэтому я специально для Пикабу снял видеопрохождение по нему. Ключевая идея тут - избавиться в первую очередь от противников с юге и юго-востоке. А также - перекинуть финансирование на войну/оборону, чтобы ваши города смогли противостоять атаке с запада до возвращения ваших армий.

Очень жду ваших впечатлений и предложений по развитию!

Показать полностью 3 1

Conquicktory - открыта предрегистрация

К сегодняшнему скриншотному субботнику я снял пример партии в свою пошаговую стратегию. У игры теперь есть имя, Conquicktory, и её уже можно добавить в вишлисты в Стиме, Гугл Плее и Аппсторе (специально придумали уникальное имя, чтобы сразу находилась по нему). Поставил карту Европы и 50 игроков.

Игра, как я писал, представляет собой стратегию с упором на решения высокого уровня. Геймплейно считаю её сплавом Слея, Генерала и Hex Empires. Игрок  занимается дипломатией, распределением бюджета и планированием основных ударов.


Механика "проводишь стрелку - и армия идёт по ней, захватывая территорию" пришла из бумажной игры, в которую я играл ещё в школе, когда изучали историю Древнего мира. Моё воображение тогда взбудоражили карты завоевательных походов из учебника. Я на листочке в клеточку нарисовал континенты и острова, расселил туда государства и племена, и стал придумывать, кто кого будет завоёвывать. Рисовал стрелки подохов, отметки битв, а потом перерисовывал всё на новый листок с учётом изменившихся границ.

Тогда, на бумаге, попытки ввести какую-то математическую модель столкновений лишь утяжелили процесс, и я большей частью выбирал победителем в битве ту сторону, которой больше симпатизировал. Ну а здесь, в компьютерной игре, мне удалось построить достаточно логичную механику. Города  генерируют в бюджет доход. Он вычисляется как доход с досягаемых гексов, умноженный на коэффициент уровня города.


Далее этот доход распределяется по ветвям расходов (ветви могут быть вложенными). Так, игрок делает выбор между финансированием военной составляющей и роста городов, а военная ветвь бюджета делится на финансирование наступления (армий) и обороны (крепостей и городов). Т.е. если сравнить, наример, с Генералом, мы идёт от обратного. В Генерале нанимаешь солдат, и затем они требуют денег на содержание. В Конквиктории же выделаешь Х денег на войско, часть из этого тратится на содержание армий текущей силы, а на оставшиеся деньги можно донанять ещё солдат, всё автоматически.

Ещё одна механика, снижающая микроменеджмент: в игре нет оборонительных юнитов, просто каждый город и крепость распространяют свои военные очки на прилежашие гексы. При попытке захвата гекса армией происходит сравнение атакующей силы и обороняющей, определяется победитель и вычисляются потери.


Потери компенсируются усилением армии на следующем ходу, исходя из её финансирования. При этом, если армия оказывается отрезанной от линии снабжения, она теряет возможность наступать, и постепенно иссякает (если не успеть её деблокировать).


Все ходы выполняются одовременно. Игроки отдают приказы (не зная о приказах друг друга), и затем выполняются вычисления нового состояния. ИИ объявляет войну и предлагает мир, исходя из личного "коэффициента неприязни", без оглядки на то, человек перед ним или другой ИИ. Этот коэффициент неприязни состоит на данный момент из двух компонентов: коэффициент зависти (увеличивается для тех соперников, которые сильнее, чем 0,5 нашей силы) и коэффициент обиды (увеличивается, когда компу объявляют войну).

Просматривая видео, понял, почему мне относительно легко удалось захватить Западную Европу. Там как раз Анхас занял много территории, а у Кории, Кры и Ауккотланда была граница с ним, но не было границы со мной. Поэтому он для них стал более значимм врагом. А дальше коэффициент обиды помешал им вовремя заключить между собой мир, чтобы остановить агрессора с востока (т.е. меня).


Вообще, получается довольно реалистично, может, и оставлю такую модель. На тестах карт с одними ИИ, поведением которых руководит только коэффициент зависти (без коэффициента обиды), ситуация складывалась такой. Остаются 3-5 мегагосударств. Как только кто-то вырвется вперёд, ему объявляют войну остальные. Во время этой войны кто-то другой вырывается вперёд. Коэффициент зависти от прочих игроков к новому лидеру растёт. Он побуждает заключать мир с прежим лидером (отброшенным назад) и начать новую войну. Так игра продолжалась за тысячу ходов без какого-либо результата. А введение коэффициента обиды сделало поведение ИИ более человечнм, что ли. "Ну и что, что твой прежний союзник вырвался вперёд? Не буду я с тобой мириться, ты должен отплатить за своё нападение на меня", - как бы говорит прежняя держава-лидер.


В любом случае, окончательно ИИ сформируется после бета-теста. Хочу поправить некоторые косяки, которые сам заметил, и выставить демку на Итч. Стоит ли добавлять туда сразу и туториал, или по моему видео разберётесь?

Показать полностью 3

Ход разработки собственной пошаговой стратегии

Год назад я публиковал новости о разработке собственной пошаговой стратегии под заголовком "Переходим Рубикон (но это не точно)". Вчера же я впервые в жизни проплатил за Стим директ.  Так что дело движется в нужном направлении.

Краткая предыстория

Пять лет назад, осенью 2016го, имея опыт 30 выпущенных флеш и мобильных игр, собираюсь взяться за "игру мечты". Хочу реализовать игру, в которую играл на бумаге ещё в школе, когда проходили историю Древнего мира и Средних веков. Должен быть упор на стратегические решения, а микроменеджмент сведён к минимуму.


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


Затем, к декабрю, я стал экспериментировать с другими моделями боёвки и прочих процессов. На клеточных автоматах удалось сделать интересный механизм захватов, прямо такой, как я хотел: игрок рисует стрелку, и в сторону стрелки движется волна расширения, приостанавливаясь лишь для подавления сопротивления в укреплённых гексах противника.


Оба режима игры показывал в конце года на конференциях GetIT и Games Gathering. Но всё равно до образа, существовавшего в голове, было далеко. Клеточный автомат требовал тонкой балансировки, а модель планирования и постройки зданий на территории требовала того самого микроменеджмента, который я хотел свести к минимуму.


После перерыва в начале 2017го, связанного с организацией Global Game Jam, вернулся к работе. Переписал всю логику, взял за основу модели государство Платона, ввёл понятия промышленных и пищевых регионов, поставляющих ресурсы для городов, чтобы те, в свою очередь, преобразовывали их в очки разведки, влияния, силы и пр. Но всё равно всё было очень зыбко. Как говорят, игру затянула "feature creep".


Наобещав кучу всего весной 2017го в посте "Ещё чуть-чуть и будет апдейт" и не выполнив обещаний, я перестаю писать на Пикабу. Наступает лето. Я решаю перезагрузиться: взять какую-то совершенно другую идею и сделать игру за выходные. Придумал соединять шестерёнки и увеличивать скорость вращения механизма. Получился Steampunk Idle Spinner, в который дописываю кое-что и по сей день :)


Но мечта о пошаговой стратегии не отпускает. Теперь уже в тихом решиме пробую разные варианты. Решаю пока убрать отвлекающие элементы: ландшафты, постройки, управление идеями, и сделать минималистичный "раскрашиватель карты", но полнофункциональный и соответствующий моим желаниям

Что на данный момент есть в игре

Игра представляет собой сплав Слея, Генерала и Hex Empires. Что в ней может делать игрок:

1) Распределять бюджет на войну-мир-казну. Бюджет - это сумма доходов городов на доступной территории. Военная часть бюджета распределяется на расходы на оборону (тратятся на защиту территории вокруг городов и крепостей) и атаку (тратятся на поддержку и повышение силы армий). Мирная часть тратится на рост городов. Казна покрывает расходы на точечные действия правителя: снаряжение новых армий, постройку крепостей и городов.


2) Объявлять войну, прелагать мир или союз. Да, в игре игроки по умолчанию нейтральны. ИИ обучен смотреть на силы соперников и решать, стоит ли ему прекратить текущую вытягивающую силы войну, если вдруг кто-то на другом краю карты вырастает сильно большим.


3) Направлять удары армий. О, это самое вкусное в геймплее, на мой взгляд, как раз по моим "хотелкам". Рисуешь на карте стрелку - и армия идёт по ней, захватывая вокруг себя клетки.

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


Спасибо за то, что эти годы вы интересовались ходом проекта и давали понять, что игра нужна! :) В комментариях дам ссылку на дискорд.

Показать полностью 1

ИИ сражаются за Европу

Пост будет коротким, в формате сегодняшнего скриншотного субботника. Всем, кто следит за проектом, я считаю себя обязанным сообщить, что разработка ведётся. Есть простенький ИИ. Он умеет расширяться и объявлять войны. Предлагать мир или союзы - ещё не научен (хотя в движке механика союзов уже прописана).


Есть генерация разных миров, как со случайной картой, так и по заданной. Можно делать и архипелаги, однако самого движка морского расширения в игре пока нет.


По срокам по-прежнему боюсь что-либо говорить, чтобы не сглазить. Но хочу поделиться видео того, что получилось, когда я запустил на карту Европы 50 компов. Финал довольно неожиданный :)

Показать полностью

Жребий брошен! Переходим Рубикон (но это не точно)

О разрабоке "Своей Цивилизации" я с большой помпой объявил здесь 4 года назад. Однако летом 2017го года запутался в разных хотелках, процесс забуксовал, и мне пришлось переключиться на другие задачи.

С тех пор здесь я, по большому счёту, ничего не публиковал. Однако до сих пор есть люди, которым небезразличен проект и кто интересуется ходом разработки.

После своего поста трёхлетней давности "через 2 недели будет апдейт" (а также после пары других случаев) я стал более осторожен в обещаниях. Однако я чувствую, что обязан показать свежее геймплейное видео.

Что сейчас есть в игре:

- раздача приказов и одновременный ход армий

- захваты территорий армиями

- разные отношения между государствами (нейтралитет, союз, война)

- линии снабжения армий (при прерывании которых армия уничтожается)

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

- сохранение и загрузка (наконец-то!)


Даже играть, в принципе, можно, если помнить, что куда нажимать и держать в воображении недостающие элементы. Работы ещё очень много. Но просто хочу, чтобы вы знали, что она ведётся.

Показать полностью

Мир капитана Немо

Конкурс для независимых разработчиков Indie Prize Casual Connect

Конкурс для независимых разработчиков Indie Prize Casual Connect Инди, Разработчики игр, Инди-разработка, Конкурс, Браузерные игры, Компьютерные игры, Gamedev

Коллеги, хочу рассказать о программе для инди-разработчиков, по итогам которого можно совершенно бесплатно получить стенд для демонстрации своей игры на конференции Casual Connect, два билета уровня All-Access и оплаченное проживание в хостеле с другими инди.


Для участия вам нужно заполнить эту заявку подачи на Indie Prize до 23:59 31 августа по калифорнийскому времени. Так что реально у вас ещё часов 40 для этого, поспешите!


Какой мой в этом интерес: я не работаю на Casual Connect, но так как я буду в жюри, мне интересно увидеть побольше хороших проектов.


Прошедщие отбор игры получат шанс получить серьёзные призы на самом Casual Connect. Кстати, на прошлой конференции в Сиеэтле приз за инновационность получила игра G30 Ивана Ковалёва.


И даже если игра не пройдёт отбор, вы получите ценные советы от судей, а также существенные скидки на приобретение билетов.


Casual Connect будет проходить в Киеве 24-26 октября. Регистрируйте свои игры и приезжайте!

Показать полностью
Отличная работа, все прочитано!