Самая простая генерация имён
Материал из Клуб любителей рогаликов
Самая простая генерация имён
Когда я занимался этим вопросом я не стал особо заморачиваться и сделал временную (а может и нет!) функцию генерации имени. Идея простая - у нас есть три массива, содержащие несколько элементов имени.
Например:
Первый массив = ('Гр','Ад','Вил','Кен','Лур','Тил','Гэл');
Второй массив = ('ид','ар','ор','ов','ик','ом');
Третий массив = ('эн','е','и','о','д','ер');
А так же есть и четвертый массив в котором содержится несколько вариантов окончания для женского имени.
Например:
Четвертый массив = ('оя','ия','еа');
Ну а теперь проходясь по очереди по каждому массиву, присоединяем случайно выбранный элемент к результату. Можно сделать, что третий массив используется не всегда, а опять же рандомно. Если требуется женское имя, то к результату присоединяем случайный элемент из четвертого массива.
Ну а вот готовая функция (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;