Редактор генераторов
Представляю вам АЛЬФА версию.
Задача оказалась сложнее, чем я рассчитывал, и на ее реализацию ушли все выходные, и часть сегодняшнего дня. Наверное я бы и не стал пока браться, если бы знал сколько это займет времени, но я не знал. Да и идея эта крепко засела у меня в голове. В общем в каком-то виде я его все же сделал. В ближайшие дни планирую перегнать в него все свои прошлые генераторы из прошлых реализаций, подправлю баги. И тогда, наверное, переведу в статус БЕТЫ :)
paradoxdream.com/ngen
Принципы работы загрузки и сохранения во многом похожи на мой лист персонажа, поэтому пересказывать не буду. А перейду непосредственно к функционалу самого редактора. Во первых, для авторизированных пользователей доступна возможность «опубликовать», что позволит видеть ваш генератор среди прочих, в панеле слева.
Что бы создать генератор, нажимаем на ссылку «Создать свой генератор», или перейдя по ссылке paradoxdream.com/ngen/new
Все генераторы состоят из элементов 5 типов(я не уверен что хорошо подобрал терминологию, так что если у вас появятся предложение по ее изменении, пишите):
1) Генератор – последовательность элементов собственно и образающая типичный генератор. Может содержать в себе элементы любых типов.
2) Словарь – коллекция строк, из которых случайным образом выбирается одна.
3) Строка – просто строка. Например можно использовать для пробела.
4) Объединение – во многом похоже на словарь, с той разницей, что может содержать в себе элементы любых типов, и выбирает случайно один из них. Тут следует сказать кое-что о «вероятностях». Все вложенные элементы воспринимаются как единая сущность, кроме словарей. Пример:
Например есть два словаря:
А) меч, кинжал
Б) шлем, щит, кольчуга, нагрудник
К примеру мы вставили эти два словаря в объединение. Вероятность появления элементов двух этих словарей будут равновероятными. Т.е. вероятность появления оружия будет 1 к 3, а вовсе не 1 к 2. Это сделано специально(на то были причины, и они станут очевидны после будущих расширений функционала), но если вдруг вам надо сделать иначе, всегда можно вставить в объединение два генератора, и в каждый из них встроить по одному словарю.
5) Ссылка – элемент, который может ссылаться на любой другой элемент. Позволяет повторно использовать одни и те же элементы.
А теперь попробую написать простейший туториал по создания простого генератора.
Для создания нового генератора переходим по ссылке paradoxdream.com/ngen/new
Заполняем его имя, например пишем в графе название «Пример 1».
Нажимаем кнопку Генератор, что бы создать элемент «генератор».
Нажимаем карандашик, что бы его отредактировать. В открывшемся окне меняем имя на «оружие» и ставим галочку Публичный. Нажимаем кнопку «сохранить изменения».
Теперь создадим дочерний элемент «словарь». Для этого в заголове генератора нажмем «плюс» и выберем «словарь».
Теперь в нажмем на синий карандаш в заголовке словаря, и в поле текст введем текст:
Золотой
Серебряный
Железный
Нажимаем кнопку «сохранить изменения».
Теперь снова нажмем +, что бы создать в генераторе еще один элемент – строка. Войдем в редактирование строки и напишем там единственный символ – пробел.
Снова нажмем +, и создадим в генераторе еще один словарь. Войдем в редактирование словаря и в поле словарь напишем:
меч
кинжал
топор
Нажимаем кнопку «сохранить изменения».
Вот наш первый генератор готов. В голубой области нашего нового генератора видно пример генеренной строки. Теперь нажмем кнопку «сохранить», что бы сохранить генератор в целом. И можно нажать кнопу «просмотр», что бы полноценно им попользоваться.
Ну и давайте напоследок немного модифицируем наш генератор, что-бы увидеть другие возможности редактора.
1) Нажмем на кнопку Объединение, что бы создать элемент этого типа на верхнем уровне.(автоматически он назовется «элемент_4»)
2) Нажмем плюс на панели нашего прошлого генератора и выберем пункт «создать ссылку». Назжем клавишу мышки над зоголовком нашей ссылке и перетащим его в белую область нашего Объединения.
3) Создадим внутри нашего объединения генератор. Снова создадим ссылку нашего первого генератора, и перетащим в новый генетратор(элемент_6).
4) Теперь создадим в новом генераторе(элемент 6), строку и изменит текст на пробел.
5) Теперь создадим в новом генераторе(элемент 6), еще один словарь и введем текст:
Крови
Забвения
Ярости
Смерти
6) Теперь войдем в редактор нашего объединения, и введем название, вместо элемент_4 — Оружие 2. И включим галочку публичный. Сохраняем генератор в целом и нажимаем кнопку «просмотр».
29 комментариев
Единственное, вот что. Хорошо было бы иметь туториал по овладению этой штукой.
Готовую штуку и вытащенные наружу параметры этой штуки.
Так чтобы хотя-бы методом тыка, меняя параметры, сразу видеть как изменяется работа готового генератора.
Не совсем понял… Чисто теоретически там это есть) Под заголовком каждого генератора виден один пример его работы. В общем подробнее если можно о этих пожеланиях…
А касаемо пользы, см. Абулафия: random-generator.com/index.php?title=Main_Page
Ну или вот более наглядно…
Это как раз оно, и это было совершенно не наглядно, хотя мне, как программисту — вполне удобно. Но пытаться научить этому людей? Я бы не взялся, а вот тот инструмент, который я сделал — вполне реально. Он более казуальный. Простота рулит…
Может потом я и сделаю всему этому и текстовое представление, для так сказать, «продвинутых пользователей», если желающих такого инструмента будет достаточное количество. Но пока — нет. У меня просто нет на это времени, ровно как и на поддержку нескольких стандартов.
«Тебе выпал <драг-камень> и <1-500> гп» звучит вполне постижимым каждому.
Допустим, я хочу добавить туда направление ветра, но только для случаев, когда ветер в принципе есть. То есть, когда штиль, то чтобы направления никакого не выводилось. И хочу добавить осадки (дождь, снег, иногда град), но понятно, что я не хочу для комбинации «Очень жарко+Ясно» осадков в виде снега.
Как мне это сделать без if-конструкций?
Upd: с направлением и силой ветра разобралась, но получилось забавно по распределению вероятностей: всякие «безветрие» и «затишье» — это словарь на 3 элемента, он объединён с генератором, в который вложены словарь значений для собственно силы ветра, на 14 значений, и словарь направлений, 8 значений. Ну так безветрие (штиль, затишье) выпадает заметно чаще, чем ветер-с-силой-и-направлением — как так получается?..
У тебя там словарь на три элемента, и вложенный генератор. Как я писал в первом посте, union учитывая при вероятностях словари. Т.е. сумарно он сейчас считает, в нем 4 элемента, т.е. вероятность каждого из элменетов словаря Ветер и генератора ветра одинаковы.
Что бы сделать, например, что бы и словарь и генератор выпадали с равной вероятностью, надо просто сделать в объединении еще один генератор, и перетащить словарь внутрь(других элементов не нужно).
По первому вопросы ты уже разобралась или нужны таки консультации?
Вообще Zmaj подогнал очень правильную идею — клонирование генераторов. Просто я не дал ссылок на редакторы тех же примеров, потому что стоило мне их дать, кто то испортит и что называется — другим не достанется. Но если я сейчас смогу давать ссылки на «клон», это решит проблему. Даже не на клон, а просто некая ссылка, которая создает новый(еще не сохраненный генератор), но сразу заполняет себя содержимым другого генератора. Это будет идеальный механизм, мне кажется…
Про осадки пока думаю, там механизм сложнее.
Клонирование содержимого генераторов — весьма хорошая идея. :)
[
Железный
Золотой
Алмазный
]
[
Меч
Кинжал
Катана
]
Железный Катана звучит странновато, верно? ;) Что бы эту проблему решить, мне надо пометить, что меч и кинжал мужского рода, а катана женского, и тогда я смогу просклонять прилагательное. Делать это по каждому элменет вообще не прикольно. Поэтому я добавлю такой атрбут как род непсредственно в словарь(на самом деле там не совсем род, а род+множественное число). И в данном случае сделаю два словара, в одном будет кинжал и меч, а во втором катана. А что бы их соединить, воспользуюсь объединением. Но при этом я хочу, что бы катана и меч выпадали с равной вероятностью. Поэтому элементы словарей в объединении считаются чуточку иначе, что бы обеспечить работу вышеописанного механизма.