ВНИМАНИЕ! Наша конференция посвящена космической тематике и компьютерным играм. Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!
|
» Принципы и алгоритмы сюжетной генерации | страница 5 |
|
|
|
Канал Игры Мечты: «Принципы и алгоритмы сюжетной генерации» |
|
Нужны ли такие сгенерированные сюжеты? |
Да, всяко лучше, чем тупо бабло сколачивать - всегда есть чем заняться. |
|
8% |
[ 2 ] |
Да, но только если хорошенько поработать над БД ситуаций и алгоритмами генерации |
|
73% |
[ 17 ] |
Будет нелишне, хотя и не обязательно |
|
13% |
[ 3 ] |
Нет, всё равно люди лучше придумают чем машина |
|
4% |
[ 1 ] |
Нет, лучше усилия в другое русло направить (графику, например улучшить) |
|
0% |
[ 0 ] |
Традиционный "пофиг". |
|
0% |
[ 0 ] |
|
Всего проголосовало : 23 |
|
|
|
Zachesa 151 EGP
Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1415 Откуда: Хабаровск Зарегистрирован: 12.11.2007 |
|
Jerry Rezet : |
"А если результат одинаков - зачем платить больше"?©
|
Jerry Rezet : |
"Общая Теория Всего сСущщего",
|
Так я с тобой и не спорю для несложного мира такой вариант прокатит и примеры этому есть, а более сложный игровой мир всё равно придётся делить на уровни детализации и на каждом более глубоком уровне потребуется учитывать всё больше параметров...
добавлено спустя 5 минут:
Чем хороши к примеру законы термодинамики или классической физики твёрдого тела? Они просты, так как их использование подразумевает всякие условности (упрощения и допущения).
Законы социума такими простыми формулами уже не опишешь, слишком много факторов надо учитывать иначе результаты моделирования будут неприемлемы для употребления...
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины.
Последний раз редактировалось: Zachesa (13:34 21-01-2010), всего редактировалось 1 раз |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Zachesa : |
для несложного мира такой вариант прокатит и примеры этому есть, а более сложный игровой мир всё равно придётся делить на уровни детализации и на каждом более глубоком уровне потребуется учитывать всё больше параметров...
|
Более сложный - это как? Дело в том, что я стараюсь добиться масштабируемости. То есть в сюжете будут некоторые переменные, которые можно и должно изменять с переходом игрока на новый уровень (определяемый не РПГ-шным левелапом, а возможностями - количеством баблосов, размером корабля и подконтрольного флота например). Например - выбирать соответствующих ему противников (по огневой мощи, например, или вместо отдельной персоны, что имеет место в начале игры, сначала фракцию (какой-нибудь пиратский клан), а потом вплоть до расы/альянса рас). То есть это один параметр как минимум. Желательно же иметь их поболее (но пока мне ничего в голову не приходит - буду рад предложениям). Тут в основе принцип "Что внизу - то и вверху", в том смысле, что упомянутые тобой законы термодинамики, равно как и статистики применимы как в микро- так и в макромире (от молекул и атомов до сообщества разумных).
Zachesa : |
Законы социума такими простыми формулами уже не опишешь, слишком много факторов надо учитывать иначе результаты моделирования будут неприемлемы для употребления...
|
Ты ничего не слышал о математическом моделировании социальных/экономических/etz.. процессов? В них как раз и используется что-то вроде
Zachesa : |
законы термодинамики или классической физики твёрдого тела
|
, так как поведение таких систем подчинено больше статистическим законам, чем особененостям логического мышления отдельных индивидов. Посему утверждения вроде
Zachesa : |
Законы социума такими простыми формулами уже не опишешь, слишком много факторов надо учитывать иначе результаты моделирования будут неприемлемы для употребления...
|
я считаю несколько спорноватыми Особенно в случае, когда нас устроит даже очень и очень приближённое подобие, ибо у нас всё же игра, а не симулятор политического мироустройства.
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Zachesa 151 EGP
Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1415 Откуда: Хабаровск Зарегистрирован: 12.11.2007 |
|
Кстати решил помучить поисковики на тему http://www.dreamer.ru/lit/soci/gulenv06.shtml
http://www.avtoradionsk.ru/texts/diklon.html
То что описываешь -- рост игрока по служебной лестнице в сингле организовать не сложно, только как можно дольше должна быть возможность к новым достижениям иначе оказавшись на вершине поймёшь, что игра закончилась... В фэнтазийных игрушках можно примыкать к разным гильдиям и подняться одновременно наверх во всех них требует большого игрового времени. В игре вроде иксов и прочих такую возможность также можно предусмотреть, но придётся придумывать всё это искусственно, вводя в игровой процесс разного рода таинственные силы и их познание.
Последний раз редактировалось: Zachesa (17:24 21-01-2010), всего редактировалось 2 раз(а) |
|
|
Guest 2075 EGP
Рейтинг канала: 5(167) Репутация: 376 Сообщения: 27975 Откуда: Моск. Зарегистрирован: 12.10.2004 |
|
Zachesa : |
В фэнтазийных игрушках можно примыкать к разным гильдиям и подняться одновременно наверх во всех них требует большого игрового времени. В игре вроде иксов и прочих такую возможность также можно предусмотреть, но придётся придумывать всё это искусственно, вводя в игровой процесс разного рода таинственные силы и их познание.
|
В Иксах и Фрилэнсере есть репутация у фракций, что эквивалентно репутации и карьерному уровню в наземном фэнтезийном сеттинге (например - в TES).
Можно задаться целью "завершить" игру с максимумом для всех фракций, что потребует уйму времени и исследований.
при этом делать это никто не заставляет нигде.
_________________ Трещит земля как пустой орех
Как щепка трещит броня
Последний раз редактировалось: Guest (18:39 21-01-2010), всего редактировалось 2 раз(а) |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Zachesa : |
То что описываешь -- рост игрока по служебной лестнице в сингле организовать не сложно, только как можно дольше должна быть возможность к новым достижениям иначе оказавшись на вершине поймёшь, что игра закончилась...
|
То, что я описываю - не рост игрока по служебной лестнице. И совсем не обязательно в сингле. Ты или забыл, или не читал, но я упоминал несколько тезисов, на которых должно всё строиться. Что-то типа: "Всегда есть три вещи - кто-то сильнее тебя, то, где ты не бывал и дело, которым ты ещё не занимался". И это совсем не связано с карьерой или её ростом. Не просто "Ещё три звёздочки к званию в профиле", а соответствие сюжета возможностям игрока. "Карьерный рост" - это когда в иксах тебя, Рыцаря Королевства и Героя Федерации, олигарха и почётного ветерана при обращении за заданием на станции посылают попинать ногами за те же бабки, что и раньше будуЮщий труп какого-то задрипанного Юссандриоса Фигпоймиктоонтакой Хренассиоса, спёршего ещё более чем он сам задрипанный "Крокодил" и триста баксов жалкий миллион кредиток (не иначе оный миллион дорог своему владельцу разве что как память о первом заработанном).
Вот это - карьерный рост в играх. А то, что описываю я - это ситуация, когда игрок может выбрать адекватную своему уровню миссию, или ему могут предложить нечто большее, чем гоняться за тремя пиратами по пятачку 3x3 километра на эсминце, в то время как он их на любом корыте (лишь бы летало) порвёт как ботов.
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Итак.. Есть табличка, в которой описан примерный смысл фраз, которые надо придумывать для сюжетного генератора. Горизонталь - действие (1. Атака/уничт 2. Защита/эскорт 3. Доставка/добыча 4. Разведка/поиск. 5. Патрулирование.), вертикаль - объект, к которому это действие применимо (1. Корабль(один/группа) 2. Объект/станция/фабрика (один/группа) 3. Товар/ресурс/предмет 4. Раса/фракция)
По этой подсказке придумывается фраза из нескольких взаимозамменяемых частей и записывается в xml-файл в следующем формате (пример для 1ой строки, 1го столбца - "Атака(уничтожение) Корабля (одиночного/группы кораблей)":
Код: |
<!-- Атака, Корабль -->
<phrase ID="001001" obj="person" parts="3">
<part n="1"> "Объект задания - %NAME%. </part>
<part n="1"> "Необходимо найти некоего %NAME%. </part>
<part n="1"> "Есть один субъект - %NAME%." </part>
<part n="2">"Является опасным преступником."</part>
<part n="2">"В своё время сильно надоел. А сейчас - опять за старое."</part>
<part n="2">"Задрал нас уже серьёзно"</part>
<part n="3">"Найти и уничтожить."</part>
<part n="3">"Необходимо избавиться от него."</part>
<part n="3">"Кто знает, что он ещё удумает, поэтому это надо пресечь."</part>
</phrase>
<!-- Атака, Корабль -->
|
ID - это типа идентификатора фразы, в то же время является указателем типа действия и объекта действия. Первые три цифры - тип действия (001-й - это "Атака/Уничтожение"), вторые три - объект (001-й объект - это корабль).
Как видно, фраза состоит из трёх частей, каждая часть - из трёх вариантов, составленных таким образом, чтобы смысл фразы был единственно возможным (Уничтожить корабль) не зависимо от того, какой из вариантов будет выбран генератором случайных чисел по одному из каждой части.
.
добавлено спустя 5 минут:
Таким образом мне требуется заполнить ячейки этой таблички фразами, соответствующими по смыслу заголовкам столбцов и строк. Буду благодарен, если кто-нибудь из пилотов просто даже в сообщении подкинет тот или иной вариант фразы - моя фантазия нынче в глубоком ауте. Буду рад любой помощи.
P.S.: Объявление: иссякла фантазия. Куплю,сниму в аренду, или приму в дар даже б/у.
добавлено спустя 11 минут:
Кстати, для тех, кто не хочет качать - сделаю просто скриншот таблички, один фиг, в качестве подсказки можно и картинку использовать
Собсно - Табличко.xls (кликните здесь для просмотра)
|
P.S.: Там ещё вторая табличка "Причины" - это такая же подсказочка для написания фраз для "затравок миссии" - надо же объяснить игроку, зачем ему это надо делать, и что послужило этому причиной. Фразы составляются абсолютно аналогично первой табличке.
.xls |
Описание: |
Excell-подсказка для придумывания сюжетных фраз. |
|
Имя файла: |
.xls |
Размер файла: |
21.5 KB |
Скачано: |
360 раз(а) |
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c]
Последний раз редактировалось: Jerry Rezet (07:06 28-01-2010), всего редактировалось 2 раз(а) |
|
|
Minx 980 EGP
Рейтинг канала: 6(328) Репутация: 136 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
А прогресс в чем?
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Minx 980 EGP
Рейтинг канала: 6(328) Репутация: 136 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
Вспомнилась нижеследующее. Может поможет в чем-нить.
Cкрытый текст (кликните здесь для просмотра)
From : Peter Repin 2:5020/400 Птн 19 Окт 01 23:15
To : Alex Rakcheyev Птн 19 Окт 01 23:27
Subj : Re: Ищется генератор докладов
===============================================================================
From: "Peter Repin" <surg@nvkz.kuzbass.net>
Hello, Alex!
You wrote to All on Thu, 18 Oct 2001 19:38:28 +0400:
AR> Когда-то (лет 10-15 назад) в журнале "Огонек" была напечатана
AR> инструкция по генерации докладов на разного рода заседания и
AR> пленумы. Идея проста как три копейки: список фраз разбит на 3 или 4
AR> столбика. Рандомно берется фраза из первого столбика, из второго,
AR> третьего и четвертгог. Записывается получившееся предложение. Далее
AR> снова выбираются рандомные фразы.
AR> Получается этакий заумный доклад ниочем и весьма эхотажный. Так вот,
AR> если у кого либо завалялись эти самые столбики, то закиньте их плиз
AR> либо в мыло, либо в эху (ежели мод разрешит).
Таблицу в эху слать не получится, пишу по столбцам:
I столбец:
1. Товарищи! (Господа!)
2. С другой стороны,
3. Равным образом,
4. Hе следует, однако, забывать, что
5. Таким образом,
6. Повседневная практика показывает, что
7. Значимость этих проблем настолько очевидна, что
8. Разнообразный и богатый опыт
9. Задача организации, в особенности же
10. Идейные соображения высшего порядка, а также
II столбец:
1. реализация намеченных плановых заданий
2. рамки и место обучения кадров
3. постоянный количественный рост и сфера нашей активности
4. сложившаяся структура организации
5. новая модель организационной деятельности
6. дальнейшее развитие различных форм деятельности
7. постоянное информационно-пропагандистское обеспечение нашей деятельности
8. управление и развитие структуры
9. консультации с широким активом
10. начало повседневной работы по формированию позиции
III столбец:
1. играет важную роль в формировании
2. требует от нас анализа
3. требует определения и уточнения
4. cпособствует подготовке и реализации
5. обеспечивает широкому кругу (специалистов, предпринимателей, депутатов возможность подготовки
6. участвует в формировании
7. позволяет выполнить важные задания по разработке
8. в значительной степени обуславливает создание
9. позволяет оценить значение (представляет собой интересный эксперимент проверки)
10. влечёт за собой интересный процесс внедрения и модернизации
IV столбец:
1. существующих финансовых и административных условий.
2. дальнейших направлений развития.
3. системы массового участия.
4. позиций, занимаемых участниками в отношении поставленных задач.
5. новых предложений.
6. направлений прогрессивного развития.
7. системы обучения кадров, соответствующей насущным потребностям.
8. соответствующих условий активизации.
9. модели развития.
10. форм воздействия.
|
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Sh.Tac. 151 EGP
Рейтинг канала: 5(108) Репутация: 14 Сообщения: 1426
Зарегистрирован: 27.07.2005 |
|
как тут не вспомнить Остапа Бендера и его "Незаменимое пособие для сочинения юбилейных статей, табельных фельетонов, а также парадных стихотворений, од и тропарей"
http://petrov.com.ua/GoldCalf/pages/52.htm
_________________ This is what you get ...
(c) Radiohead |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Это не прогресс, это просьба о помощи. Вот и всё. У меня фантазия закончилась.
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Zachesa 151 EGP
Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1415 Откуда: Хабаровск Зарегистрирован: 12.11.2007 |
|
В табличке много сокращений, поэтому не всё понятно. Могу помочь дополнить вариантами, но всё зависит от модели мира и игровой механики. Вариантов заданий может быть больше.
К примеру нет необходимости уничтожать корабль можно заставить его сдаться или, к примеру, миссия не на уничтожение, а надо просто отобрать груз или пленить супостата и сдать правосудию, соответственно надо добавить фразы диалога с объектом (жертвой).
Вообще стоит разнообразить задания, общением с третьими лицами при поиске информации, получении технической, финансовой или военно-силовой помощи.
Трёх пунктов мало, надо добавить требование к исполнителю и варианты награды, при полном частичном выполнении задания.
Также добавить пункты: если ограничения по времени, дополнительная информация, где искать объект воздействия или дополнительно у кого эту информацию можно получить (купить, украсть, отобрать).
Сделать возможность связки заданий между собой для образования квеста. К примеру надо отобрать кристалл, найти аппарат в который этот кристалл вставляется прочитать там информацию, по координатам отыскать корабль выбить оттуда владельца, выбить из него следующий пункт куда надо лететь и так далее хоть до бесконечности
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Zachesa : |
Вариантов заданий может быть больше.
|
Естественно. Это только основной костяк, остальное добавить не проблема. Была бы фантазия. Вопрос в другом - я пока иссяк насчёт данного конкретного дела - не могу выдумать части фраз для основы генератора. Вот и всё.
Minx : |
Вспомнилась нижеследующее. Может поможет в чем-нить.
|
Это, наверное, оно и есть. С точностью до константы. [; По крайней мере принцип тут тот же. Не виду ничего плохого в том, чтобы применить это к играм. ;D
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Raunijar 215 EGP
Рейтинг канала: 2(15) Репутация: 46 Сообщения: 245 Откуда: Sol III. Terran swamp Зарегистрирован: 07.01.2008 |
|
Но это не «генерируемый сюжет», а каша из нагенерированных миссий, между собой не взаимосвязанных.
Zachesa : |
и так далее хоть до бесконечности
|
А название топика кагбе намекает нам и, помнится, поначалу были размышления по поводу структурно вложенных генерируемых ситуаций, из которых возможно построение сюжета и потом уже отдельных событий..
_________________ EkerilaR asugisalas muha haite gagaga ginuga he lija hagalawijubig |
|
|
Zachesa 151 EGP
Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1415 Откуда: Хабаровск Зарегистрирован: 12.11.2007 |
|
Jerry Rezet : |
не могу выдумать части фраз для основы генератора
|
если ты о воде, которой надо разбавлять фразы, то это можно набросать влёт используя словарь синонимов.
Тот минимум что ты предложил дальше можно расширять только затачивая идей под конкретный проект. Присоеденяйся http://www.elite-games.ru/conference/viewtopic.php?p=2383405#2383405 и доработаем твою идею применительно к Elite on-line.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
От же ж блин.. Значит придётся самому.. "Злые вы.. Уйду я от вас."©
Zachesa : |
если ты о воде, которой надо разбавлять фразы, то это можно набросать влёт используя словарь синонимов.
|
Какае, к чёрту, синонимы? Минкс ясно выразился что тут требуется с его "шпорой для докладов".
Сначала помогите хотябы продолжить, чтобы было что присоединять. А уж с готовой реализацией пристроиться - раз плюнуть.
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Zachesa 151 EGP
Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1415 Откуда: Хабаровск Зарегистрирован: 12.11.2007 |
|
Так у тебя базис и так готов, потому ты и не можешь дальше сдвинуться, так как дальше идёт кастомизация.
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
Minx 980 EGP
Рейтинг канала: 6(328) Репутация: 136 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
Кстати, любую лингвистическую генерацию проблематично локализовать потом будет. Это так, наблюдение.
А форму генерации я бы изменил на множество вложенных макросов (при желании можно и в XML, не в этом суть).
Например так:
Код: |
%PERSON_ATTACK% = {%WHO% [%REASON% %HOW_TO_FIND% %MISSION_ATTACK%]}
%WHO% = {Объект задания - %NAME%}, {Необходимо найти некоего %NAME%.}, {Есть один субъект - %NAME%.}
%REASON% = {Является опасным преступником.}, ...
%HOW_TO_FIND% = {В %TIME% планирует отправится из порта %STARPORT% системы %SYSTEM%}, {Согласно разведданным до %TIME% он будет находиться в "%STARPORT%, %SYSTEM%".}, ...
%MISSION_ATTACK% = {"Найти и уничтожить."}, ...
|
[%REASON% %TO_FIND% %MISSION%] - перечисление в произвольном порядке (random_shuffle).
И потом можно будет написать так:
Код: |
%PERSON_FIND% = {%WHO% [%REASON% %MISSION_FIND%]}
%WHO% = {Объект задания - %NAME%}, {Необходимо найти некоего %NAME%.}, {Есть один субъект - %NAME%.}
%REASON% = {Является опасным преступником.}, ...
%MISSION_FIND% = {Найти, где он скрывается. В последний раз его видели в системе %SYSTEM% на корабле %SPACESHIP%.}, { Его корабль %SPACESHIP% был замечен в системе %SYSTEM%. Нам требуется срочно его разыскать."} ...
|
Таким образом, достаточно будет при задании миссии сформировать окружение (%NAME%, %SYSTEM%, ...) и вне зависимости от типа задания производить генерацию.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Minx : |
Кстати, любую лингвистическую генерацию проблематично локализовать потом будет. Это так, наблюдение.
|
Эмм.. Это ты так перевод обозвал?
Minx : |
А форму генерации я бы изменил на множество вложенных макросов (при желании можно и в XML, не в этом суть).
|
v2.0 Обязательно попробую. Пока буду развивать свой метод, естественно, он не идеален, будем считать его версией 0.1, в конечном итоге перейти к твоему способу макросов - я не очень хорошо понимаю что такое макросы (в качестве языка описания), но, думаю, стоит покопать в этом направлении. Громадищще пасибищще!!!111oneone
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
Minx 980 EGP
Рейтинг канала: 6(328) Репутация: 136 Сообщения: 10528 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005 |
|
Jerry Rezet : |
Эмм.. Это ты так перевод обозвал?
|
Да. Я не лингвист, но думаю на каких-нибудь локализациях могут вылезти вещи, не вписывающиеся в схему генерации.
Jerry Rezet : |
я не очень хорошо понимаю что такое макросы (в качестве языка описания)
|
http://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81
Выше написал в толькопридуманном синтаксисе, чтобы интуитивно понятно было.
У тебя %NAME% - это макрос. Вложенный макрос подразумевает, что после макроподстановки возможно потребуется провести макроподстановку ещё раз.
При генерации на вход функции подается выражение, а в памяти имеется много макросов. Это выражение заменяется в результате парсинга на новое до тех пор, пока макросы в выражении не закончатся.
---
Идею о том, что задание представляет собой множество блоков, которые могут идти не только последовательно, но и перемешанно, думаю уже уловили. Но вот её реализовать можно (и думаю нужно) в несколько другой форме.
В предыдущем имеем:
Код: |
%PERSON_ATTACK% = {%WHO% [%REASON% %HOW_TO_FIND% %MISSION_ATTACK%]} |
Т.е. тут может быть сгенерировано 6 вариантов (3!=6 для того, что внутри []). И тут все что хотим сказать - это то, что WHO должен идти ранее чем другие.
Но если рассматривать общий случай, то более гибким и точным вариантом является не сборка такой строки "{%WHO% [%REASON% %HOW_TO_FIND% %MISSION_ATTACK%]}" ручками, а задание условий на последовательность сборки. Одним из самых общих условий является требование, чтобы информация X в задании подавалась ранее информации Y. Т.е. для описываемого примера это будет: для того, чтобы сказать %REASON%, мы уже должны сказать %WHO%, для того, чтобы сказать %HOT_TO_FIND%, мы должны уже сказать %WHO%, и т.д.
Множество данных условий можно представить следующим образом (макросы уже тут не сработают, или сработают, но это уже не их ниша):
Код: |
<mission_find_person>
<items>
<item name='who' />
<item name='how_to_find' />
<item name='reason' />
<item name='mission_find' />
</items>
<dependences>
<after what='how_to_find' from='who' />
<after what='reason' from='who' />
<after what='mission_find' from='who' />
</dependences>
</mission_find_person> |
И при такой постановке можно собирать уже другие варианты, невозможные на макросах. Например мы хотим включить в задание указание предела времени, когда оно должно быть выполнено:
%TIME_LIMIT% = {Нам он нужен до "%END_TIME%".},{До "%END_TIME%" миссия должна быть выполнена.}, ...
и соответственно хотим, чтобы данное выражение шло после %HOW_TO_FIND%. Получаем:
Код: |
<mission_find_person>
<items>
<item name='who' />
<item name='how_to_find' />
<item name='reason' />
<item name='mission_find' />
<item name='time_limit' />
</items>
<dependences>
<after what='how_to_find' from='who' />
<after what='reason' from='who' />
<after what='mission_find' from='who' />
<after what='time_limit' from='how_to_find' />
</dependences>
</mission_find_person> |
В результате могут быть сгенерированы следующие последовательности:
Код: |
1. who how_to_find reason mission_find time_limit
2. who how_to_find reason time_limit mission_find
3. who how_to_find time_limit mission_find reason
4. who how_to_find time_limit reason mission_find
5. who how_to_find mission_find time_limit reason
6. who how_to_find mission_find reason time_limit
7. who reason how_to_find mission_find time_limit
8. who reason how_to_find time_limit mission_find
9. who mission_find how_to_find time_limit reason
10. who mission_find how_to_find reason time_limit
11. who mission_find reason how_to_find time_limit
12. who reason mission_find how_to_find time_limit |
P.S. Если кто возьмется за реализацию, не забудьте проконтролировать равномерность распределения получаемых последовательностей на выходе.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (03:45 01-02-2010), всего редактировалось 2 раз(а) |
|
|
Jerry Rezet 581 EGP
Рейтинг канала: 5(113) Репутация: 86 Сообщения: 3365 Откуда: Санкт-Петербург. Зарегистрирован: 01.04.2005 |
|
Minx : |
P.S. Если кто возьмется за реализацию, не забудьте проконтролировать равномерность распределения получаемых последовательностей на выходе.
|
Немного не понял как "контролировать равномерность" и что такое в данном случае понимается под термином "равномерность"?
Minx : |
Выше написал в толькопридуманном синтаксисе, чтобы интуитивно понятно было.
У тебя %NAME% - это макрос. Вложенный макрос подразумевает, что после макроподстановки возможно потребуется провести макроподстановку ещё раз.
При генерации на вход функции подается выражение, а в памяти имеется много макросов. Это выражение заменяется в результате парсинга на новое до тех пор, пока макросы в выражении не закончатся.
|
Тут уже, думаю, неплохо бы всё писать на более высокоуровневом языке, чем просто C++, - Python, например. Читаем из файла, парсим, и рассовываем всё по переменным (имхо - по строковым массивам), и выводим составленную фразу путём выборки по заданным правилам путём сложения выбранных строк. Мдя.. Похоже стоит ещё и Питона укрощать ;-D
_________________ - Вы не представляете, как вам повезло, что я здесь. Вы об этом еще пожалеете. [c] |
|
|
|
|
|
Канал Игры Мечты: «Принципы и алгоритмы сюжетной генерации» |
|
К списку каналов | Наверх страницы |
Цитата не в тему: Надя, умоляю, не закрывай темку, я щас, только за пивом сбегаю! (умолял 027)
|
» Принципы и алгоритмы сюжетной генерации | страница 5 |
|