Сам код - можете копировать и распространять, использовать изменять.
<!DOCTYPE html>
<html>
<head>
<title>Универсальный генератор предложений</title>
<style>
#output {
width: 1800px;
height: 1000px;
white-space: pre-wrap;
font-family: monospace;
font-size: 14px;
}
</style>
</head>
<body>
<h1>Универсальный генератор предложений</h1>
<label for="seed">Seed:</label>
<input type="number" id="seed" value="123">
<button onclick="generateSentences()">Сгенерировать</button>
<br><br>
<textarea id="output"></textarea>
<div id="loading" style="display:none;">Генерация...</div>
<script>
// База данных персонажей
const who = [
{ name: "кот", gender: "male" },
{ name: "собака", gender: "female" },
{ name: "девочка", gender: "female" },
{ name: "мальчик", gender: "male" },
{ name: "птица", gender: "female" },
{ name: "рыба", gender: "female" },
{ name: "друг", gender: "male" },
{ name: "учитель", gender: "male" },
{ name: "врач", gender: "male" },
{ name: "художник", gender: "male" },
{ name: "музыкант", gender: "male" },
{ name: "повар", gender: "male" },
{ name: "писатель", gender: "male" },
{ name: "актер", gender: "male" },
{ name: "спортсмен", gender: "male" },
{ name: "герой", gender: "male" },
{ name: "принцесса", gender: "female" },
{ name: "король", gender: "male" },
{ name: "волшебник", gender: "male" },
{ name: "путешественник", gender: "male" },
{ name: "космонавт", gender: "male" },
{ name: "рыцарь", gender: "male" },
{ name: "фея", gender: "female" },
{ name: "гном", gender: "male" },
{ name: "эльф", gender: "male" },
{ name: "робот", gender: "male" },
{ name: "инопланетянин", gender: "male" },
{ name: "призрак", gender: "male" },
{ name: "оборотень", gender: "male" },
{ name: "вампир", gender: "male" },
{ name: "детектив", gender: "male" },
{ name: "фермер", gender: "male" },
{ name: "строитель", gender: "male" },
{ name: "полицейский", gender: "male" },
{ name: "пожарный", gender: "male" },
{ name: "садовник", gender: "male" },
{ name: "механик", gender: "male" },
{ name: "библиотекарь", gender: "male" },
{ name: "ученый", gender: "male" },
{ name: "журналист", gender: "male" },
{ name: "клоун", gender: "male" },
{ name: "пират", gender: "male" },
{ name: "шахтер", gender: "male" },
{ name: "кузнец", gender: "male" },
{ name: "пастух", gender: "male" },
{ name: "шпион", gender: "male" },
{ name: "моряк", gender: "male" },
{ name: "астроном", gender: "male" },
{ name: "алхимик", gender: "male" },
{ name: "фокусник", gender: "male" }
];
// База данных действий и желаний
const whatWants = [
"погулять в лесу", "поиграть в футбол", "почитать интересную книгу", "спокойно поспать", "вкусно поесть пиццы", "посмотреть новый фильм", "послушать любимую песню", "нарисовать красивый портрет",
"спеть веселую песенку", "станцевать зажигательный танец", "построить высокий замок", "научиться играть на гитаре", "открыть старый сундук", "создать удивительный проект", "найти потерянный клад",
"подарить всем радость", "придумать гениальную идею", "помочь нуждающимся", "выиграть соревнование", "полюбить весь мир", "увидеть далекие планеты", "открыть новое лекарство", "сразиться с драконом",
"пройти сквозь портал", "освободить принцессу", "остановить злодея", "выиграть гонку", "разгадать тайну", "написать бестселлер", "создать волшебное зелье", "помирить друзей", "поймать преступника",
"изучить древние тайны", "создать идеальный мир", "открыть секрет вечной молодости", "спасти любимое существо", "найти потерянный город", "стать лучшим в своём деле", "изобрести невидимый материал", "преодолеть свои страхи", "обрести внутренний мир", "создать прекрасное творение"
];
const whatDid = [
"бегал по парку", "прыгал на батуте", "читал сказки", "спал под одеялом", "ел мороженое", "смотрел мультики", "слушал радио", "рисовал красками", "пел в душе", "танцевал на сцене",
"построил дом из кубиков", "научился жонглировать", "открыл дверь ключом", "создал программу", "нашел монетку", "подарил подарок", "придумал игру", "помог другу", "выиграл приз", "полюбил кошку",
"посетил музей", "побывал на концерте", "сделал открытие", "поймал рыбу", "выучил стих", "собрал пазл", "решил задачу", "сочинил музыку", "снял видео", "сделал ремонт",
"изучал старинные книги", "создал робота-помощника", "открыл забытую цивилизацию", "написал эпическую поэму", "построил воздушный замок", "создал новый вид искусства", "открыл портал в иной мир", "изучил секреты природы", "создал машину времени", "написал научную теорию"
];
const whatResult = [
"день был прекрасным", "получилось очень здорово", "все прошло замечательно", "испытал удовлетворение", "все остались довольны", "все были счастливы", "сделал все как надо",
"план удался", "время прошло весело", "все в восторге", "достиг успеха", "остался очень доволен", "получил награду", "увидел чудо", "нашел ответ", "обрел спокойствие", "испытал гордость",
"насладился победой", "открыл новые горизонты", "укрепил дружбу", "почувствовал силу", "доказал свою правоту", "наполнился вдохновением", "изменил мир", "превзошел себя", "достиг просветления",
"завоевал уважение", "вызвал восхищение", "оставил след в истории", "совершил подвиг", "восторжествовала справедливость", "исправил ошибку", "вылечил больных", "создал семью",
"добился мирового признания", "обрел внутреннее спокойствие", "создал шедевр, который покорил сердца людей", "открыл новый путь для исследований", "нашел баланс между наукой и магией", "создал идеальное общество", "обрел силу над стихиями", "открыл секрет вечной жизни", "создал новую форму энергии", "нашел смысл существования"
];
const whatHappened = [
"все смеялись и шутили", "начался красочный фестиваль", "день подошел к концу", "начался сильный ливень", "радуга осветила небо", "запели соловьи", "зацвели сады", "все захлопали в ладоши",
"все обнялись от радости", "время пролетело незаметно", "наступила волшебная ночь", "началось интересное приключение", "произошло чудо", "прилетели сказочные птицы",
"все затанцевали", "засияли звезды", "открылся портал в другой мир", "наступила эра чудес", "все аплодировали стоя", "устроили большой пир", "случилось невероятное событие",
"появился дракон", "зазвучала волшебная музыка", "все пели песни", "наступило благоденствие", "исчезли все проблемы", "начались танцы", "зазвенел смех",
"вселенная изменилась навсегда", "все стали жить в гармонии", "открылся новый мир для изучения", "появилась новая форма жизни", "все научились понимать друг друга", "создался новый вид искусства", "открылся секрет древней магии", "появился новый герой", "все обрели мир в душах", "наступил золотой век"
];
const where = [
"в лесу", "на горе", "в городе", "на пляже", "в замке", "в космосе", "в пещере", "на реке", "в саду", "в школе", "в театре", "в цирке", "в музее", "в библиотеке", "на стадионе", "в парке",
"в деревне", "на острове", "в пустыне", "в горах", "в океане", "в небе", "в параллельной вселенной", "в сказочном мире", "в прошлом", "в будущем", "в волшебном лесу", "в тайном убежище",
"на краю света", "в центре земли", "на другой планете", "в подводном мире", "в облаках", "в замке дракона", "в доме ведьмы", "в лабиринте", "в заброшенном городе", "в королевстве гномов",
"в эльфийском поселении", "на корабле пиратов", "на луне", "на марсе", "в аду", "в раю", "в античном мире", "в виртуальной реальности", "на арене гладиаторов", "в цитадели магов",
"в древнем городе", "на вершине магической горы", "в таинственном лесу", "в подземном королевстве", "на краю вселенной", "в мире иллюзий", "в царстве снов", "в забытом уголке земли", "в астральном плане", "в королевстве теней"
];
const how = [
"весело", "грустно", "задумчиво", "радостно", "удивительно", "спокойно", "торжественно", "волшебно", "необычно", "таинственно",
"интересно", "страшно", "смешно", "серьезно", "легко", "тяжело", "быстро", "медленно", "ярко", "тускло",
"энергично", "лениво", "шумно", "тихо", "приятно", "неприятно", "красиво", "уродливо", "мудро", "глупо", "героически",
"трусливо", "отважно", "робко", "надежно", "ненадежно", "свободно", "ограниченно", "благородно", "низко", "высоко",
"добро", "зло", "честно", "нечестно", "искренне", "лицемерно", "счастливо", "несчастливо", "просто", "сложно",
"ловко", "неуклюже", "магически", "реально", "абсурдно", "естественно", "искусственно", "удивительно", "невероятно", "фантастически",
"смелым образом", "изобретательно", "мудро", "силой воли", "вдохновенно", "творчески", "настойчиво", "изящно", "мистически", "блестяще"
];
// Новые разделы
const emotions = [
"с радостью", "с грустью", "с удивлением", "с восторгом", "с тревогой", "с облегчением", "с гордостью", "с любопытством", "с разочарованием", "с надеждой"
];
const timeOfDay = [
"утром", "днем", "вечером", "ночью", "на рассвете", "на закате", "в полдень", "в полночь"
];
const weather = [
"под ярким солнцем", "под дождем", "в метель", "в туман", "в грозу", "в ясную погоду", "в снегопад", "в ветреный день"
];
const tools = [
"с помощью волшебной палочки", "используя карту сокровищ", "с помощью древнего артефакта", "используя магический кристалл", "с помощью книги заклинаний", "используя лопату", "с помощью лука и стрел", "используя молот и наковальню", "с помощью телескопа", "используя компас"
];
const events = [
"во время фестиваля", "во время бури", "во время солнечного затмения", "во время лунного затмения", "во время праздника", "во время битвы", "во время путешествия", "во время научного эксперимента", "во время магического ритуала", "во время шторма"
];
const feelings = [
"испытывая радость", "чувствуя грусть", "ощущая удивление", "испытывая восторг", "чувствуя тревогу", "ощущая облегчение", "испытывая гордость", "чувствуя любопытство", "ощущая разочарование", "испытывая надежду"
];
const goals = [
"чтобы найти счастье", "чтобы обрести мудрость", "чтобы спасти мир", "чтобы найти любовь", "чтобы достичь успеха", "чтобы раскрыть тайну", "чтобы обрести силу", "чтобы найти друзей", "чтобы победить зло", "чтобы изменить судьбу"
];
const reasons = [
"потому что хотел узнать правду", "потому что мечтал о приключениях", "потому что искал вдохновение", "потому что хотел помочь другим", "потому что стремился к знаниям", "потому что хотел доказать свою правоту", "потому что искал смысл жизни", "потому что хотел изменить мир", "потому что мечтал о славе", "потому что хотел обрести свободу"
];
const consequences = [
"и в результате изменил свою судьбу", "и в результате обрел новых друзей", "и в результате открыл новые горизонты", "и в результате стал легендой", "и в результате нашел свое призвание", "и в результате обрел внутренний мир", "и в результате изменил ход истории", "и в результате стал счастливым", "и в результате обрел мудрость", "и в результате нашел истину"
];
const transportation = [
"на лошади", "на корабле", "на воздушном шаре", "на драконе", "на машине времени", "на летающем ковре", "на космическом корабле", "на велосипеде", "на поезде", "на метле"
];
const reactions = [
"и все вокруг зааплодировали", "и все замерли от удивления", "и все засмеялись", "и все заплакали от счастья", "и все закричали от восторга", "и все замолчали", "и все затанцевали", "и все запели", "и все закричали от страха", "и все замерли в ожидании"
];
const interactions = [
"встретил старого друга", "познакомился с новым соседом", "обсудил планы с коллегой", "поделился секретом с другом", "обнял родственника", "попросил совета у мудреца", "обменялся подарками с другом", "рассказал историю детям", "попросил помощи у прохожего", "обсудил будущее с наставником"
];
const objects = [
"старинный сундук", "волшебный кристалл", "карта сокровищ", "загадочный артефакт", "древняя книга", "золотой ключ", "секретный документ", "магический амулет", "редкий цветок", "таинственный свиток"
];
const states = [
"в состоянии покоя", "в состоянии волнения", "в состоянии радости", "в состоянии грусти", "в состоянии удивления", "в состоянии страха", "в состоянии вдохновения", "в состоянии тревоги", "в состоянии спокойствия", "в состоянии эйфории"
];
const actionGoals = [
"чтобы достичь цели", "чтобы решить проблему", "чтобы найти ответ", "чтобы помочь другу", "чтобы обрести знания", "чтобы изменить ситуацию", "чтобы победить врага", "чтобы найти сокровище", "чтобы спасти мир", "чтобы обрести счастье"
];
const environmentInteractions = [
"взаимодействовал с природой", "наблюдал за звездами", "исследовал пещеру", "посадил дерево", "собрал урожай", "нашел источник воды", "построил укрытие", "развел костер", "нашел редкий минерал", "обнаружил древний артефакт"
];
const emotionalReactions = [
"испытывал радость", "чувствовал грусть", "ощущал удивление", "испытывал восторг", "чувствовал тревогу", "ощущал облегчение", "испытывал гордость", "чувствовал любопытство", "ощущал разочарование", "испытывал надежду"
];
const sentenceTemplates = [
"{name} хотел{genderEnding} {whatWants}, и {how} {whatDid} {where} {timeOfDay} {weather} {tools}, {whatResult}, и {whatHappened}.",
"Когда {name} хотел{genderEnding} {whatWants}, {how} {whatDid} {where} {timeOfDay} {weather} {tools}, и {whatHappened}, в результате {whatResult}.",
"Если {name} хочет {whatWants}, {how} {whatDid} {where} {timeOfDay} {weather} {tools}, и тогда {whatHappened}, приводя к {whatResult}.",
"После того как {name} хотел{genderEnding} {whatWants}, {how} {whatDid} {where} {timeOfDay} {weather} {tools}, и {whatHappened}, что привело к {whatResult}."
];
function mulberry32(a) {
return function() {
var t = a += 0x6D2B79F5;
t = Math.imul(t ^ t >>> 15, t | 1);
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
return ((t ^ t >>> 14) >>> 0) / 4294967296;
}
}
function generateSentences() {
const seedInput = document.getElementById('seed');
const seed = parseInt(seedInput.value);
const outputTextArea = document.getElementById('output');
const loadingDiv = document.getElementById('loading');
if (isNaN(seed)) {
outputTextArea.value = "Введите корректный seed.";
return;
}
outputTextArea.value = "";
loadingDiv.style.display = "block";
setTimeout(() => {
const random = mulberry32(seed);
let sentences = [];
for (let i = 0; i < 2000; i++) {
const randomWho = who[Math.floor(random() * who.length)];
const randomWhatWants = whatWants[Math.floor(random() * whatWants.length)];
const randomWhatDid = whatDid[Math.floor(random() * whatDid.length)];
const randomWhatResult = whatResult[Math.floor(random() * whatResult.length)];
const randomWhatHappened = whatHappened[Math.floor(random() * whatHappened.length)];
const randomWhere = where[Math.floor(random() * where.length)];
const randomHow = how[Math.floor(random() * how.length)];
const randomEmotion = emotions[Math.floor(random() * emotions.length)];
const randomTimeOfDay = timeOfDay[Math.floor(random() * timeOfDay.length)];
const randomWeather = weather[Math.floor(random() * weather.length)];
const randomTool = tools[Math.floor(random() * tools.length)];
const randomEvent = events[Math.floor(random() * events.length)];
const randomFeeling = feelings[Math.floor(random() * feelings.length)];
const randomGoal = goals[Math.floor(random() * goals.length)];
const randomReason = reasons[Math.floor(random() * reasons.length)];
const randomConsequence = consequences[Math.floor(random() * consequences.length)];
const randomTransportation = transportation[Math.floor(random() * transportation.length)];
const randomReaction = reactions[Math.floor(random() * reactions.length)];
const randomInteraction = interactions[Math.floor(random() * interactions.length)];
const randomObject = objects[Math.floor(random() * objects.length)];
const randomState = states[Math.floor(random() * states.length)];
const randomActionGoal = actionGoals[Math.floor(random() * actionGoals.length)];
const randomEnvironmentInteraction = environmentInteractions[Math.floor(random() * environmentInteractions.length)];
const randomEmotionalReaction = emotionalReactions[Math.floor(random() * emotionalReactions.length)];
const randomTemplate = sentenceTemplates[Math.floor(random() * sentenceTemplates.length)];
// Определяем окончание для глагола в зависимости от рода
const genderEnding = randomWho.gender === "female" ? "а" : "";
const sentence = randomTemplate
.replace("{name}", randomWho.name)
.replace("{genderEnding}", genderEnding)
.replace("{whatWants}", randomWhatWants)
.replace("{whatDid}", randomWhatDid)
.replace("{whatResult}", randomWhatResult)
.replace("{whatHappened}", randomWhatHappened)
.replace("{where}", randomWhere)
.replace("{how}", randomHow)
.replace("{timeOfDay}", randomTimeOfDay)
.replace("{weather}", randomWeather)
.replace("{tools}", randomTool)
.replace("{events}", randomEvent)
.replace("{feelings}", randomFeeling)
.replace("{goals}", randomGoal)
.replace("{reasons}", randomReason)
.replace("{consequences}", randomConsequence)
.replace("{transportation}", randomTransportation)
.replace("{reactions}", randomReaction)
.replace("{interactions}", randomInteraction)
.replace("{objects}", randomObject)
.replace("{states}", randomState)
.replace("{actionGoals}", randomActionGoal)
.replace("{environmentInteractions}", randomEnvironmentInteraction)
.replace("{emotionalReactions}", randomEmotionalReaction);
sentences.push(`${i + 1}. ${sentence}`);
}
outputTextArea.value = sentences.join('\n');
loadingDiv.style.display = "none";
}, 0);
}
</script>
</body>
</html>