Как создать генератор названий

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

Простая задача:
Имеется 10000 планет на которые игрок может попасть. Требуется дать каждой планете название.

Способ №0:
Что может быть проще, берем словарь и выбираем понравившиеся нам, пишем их ручками в итоге составляем словарь из 1000 названий.
Плюсы метода: названия красивые, даже можно сказать идеальные, но вот решение не подходит под наши условия.
«Способ №0» мы исключим, он точно не подходит.

Способ №1:
Это будет самый легкий способ. Подготовим массивы из гласных и согласных. Далее, будем брать из массивов, поочередно, по одной случайной букве, до нужной длинны слова. Как итог, у нас забавные названия, но они далеки от реальности. Качество получаемых названий весьма сомнительное.
(Агонюлурышез, Лищыхйтука, Жякузйру …)

Способ №2:
Создать массивы из набора частей слов. И в случайном порядке их складывать. Плюсы — названия весьма реалистичны, минусы — очень часто повторяются, низкая уникальность.
(Преквадрунпрайм, Альфаглостанрус, Террдаминтро …)

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

Движемся дальше, попробуем усовершенствовать Способ №1. И для этого нам потребуется добавить правила. Создадим список исключений и разрешим смешивать любые буквы. Мы ограничим число гласных подряд, так же как и число согласных. Еще правило для исключения одинаковых гласных, мы разрешим: рр, сс и некоторые другие, это позволит нам избежать получение: шш, щщ, хх и других весьма печальных вариантов. Введенные правила позволят получать слова похожие на «Терра», «Оммеран». После применения всех правил мы получим названия которые будут ближе к реальности, но они всё еще далеки от идеала. Но нам и не требуется от этого способа получать названия, лишь немного украсить способ №2. Теперь мы ограничим размер до 2-4 символов и будем смешивать с частями из способа №2. В итоге мы получим большое число уникальных названий, формирование которых можно контролировать.

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

Генерация имен

Один комментарий

  • Владимир

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