Самая простая генерация имён

Материал из Клуб любителей рогаликов
Перейти к: навигация, поиск

Самая простая генерация имён

Когда я занимался этим вопросом я не стал особо заморачиваться и сделал временную (а может и нет!) функцию генерации имени. Идея простая - у нас есть три массива, содержащие несколько элементов имени.

Например:

 Первый массив = ('Гр','Ад','Вил','Кен','Лур','Тил','Гэл');
 Второй массив = ('ид','ар','ор','ов','ик','ом');
 Третий массив = ('эн','е','и','о','д','ер');

А так же есть и четвертый массив в котором содержится несколько вариантов окончания для женского имени.

Например:

 Четвертый массив = ('оя','ия','еа');

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

Ну а вот готовая функция (Delphi):

function GenerateName(female : boolean) : string;
const
  name1 : array[1..7]of string[3] = ('Гр','Ад','Вил','Кен','Лур','Тил','Гэл');
  name2 : array[1..6]of string[2] = ('ид','ар','ор','ов','ик','ом');
  name3 : array[1..6]of string[3] = ('эн','е','и','о','д','ер');
  fends : array[1..3]of string[3] = ('оя','ия','еа');
var
  s : string[40];
begin
  s := name1[random(7)+1];
  s := s + name2[random(6)+1];
  if random(2)+1 = 2 then
    s := s + name3[random(6)+1];
  if female then
    s := s + fends[random(3)+1];
  Result := s;
end;