ТОМ - платформа для текстовых игр

Объявление

Платформа ТОМ предназначена для создания текстовых игр на русском языке и имеет развитый парсер, позволяющий взаимодействовать с играми с помощью команд на близком к естественному языке. В данный момент активно разрабатывается версия ТОМ 2.
Последнюю версию платформы можно скачать здесь.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ТОМ - платформа для текстовых игр » Дневник разработчика » Многозначность свойств и признаков


Многозначность свойств и признаков

Сообщений 1 страница 4 из 4

1

Еще 1 вопрос, который тормозит написание стандартной библиотеки и видимо требует поддержки на платформенном уровне.

Для примера рассмотрим всего два простых признака "низкий" и "высокий".
Эти признаки влияют на множество действий с предметами. Расположенные высоко предметы недоступны, их видно но нельзя взять или потрогать. По умолчанию считаем высоким всё что выше человеческого роста и до чего нельзя дотянуться.

А теперь почувствуйте разницу:
"низкий шкаф" - доступен как сам шкаф, так и предметы на нем.
"высокий шкаф" - шкаф доступен! хоть он и высокий но стоит то на полу. А вот предметы на нем уже не доступны.
"низкий стол", "высокий стол" - вообще без разницы, всё доступно
"высокий потолок" - тут признак обозначает расположение, а не размер предмета по вертикали. Расположен высоко, недоступен.
"низкий потолок" - доступен, можно потрогать
"низкое небо" - хоть оно и низкое, расположено высоко, потрогать нельзя.
"вы низкий человек, я вас презираю" - вообще из другой оперы  :D
В общем целый зоопарк... наверняка есть еще варианты.

В текущей версии для каждого значения слова "высокий" необходимо создать отдельный признак:

Код:
признак высокий:по_размеру{}
признак высокий:по_расположению{}
признак высокий:как_недоступный{}

Но это означает что в коде уже нельзя написать Х.высокий = да, нужно указывать точное имя признака:

Код:
шкаф.высокий:по_размеру = да
шкаф.высокий:по_расположению = нет
шкаф.высокий:как_недоступный = нет
потолок.высокий:по_расположению = да
потолок.высокий:как_недоступный = да

Прозрачность кода теряется напрочь... Хотелось бы писать в коде игры Х.высокий = да, и пусть система сама разбирается что для этого конкретного X значит признак "высокий".

2

В общем всё решилось гораздо проще чем я думал.
Работаем =)

3

Ну и какое же решение?

4

Если идти от действия, а не от признака, то достаточно ввести в объект проверку, разрешающую или запрещающую использовать этот объект в этом действии.
http://s6.uploads.ru/t/tcHyj.png
Для примера, у класса "место" есть признак "темное", и есть "проверка_на_темноту", работающая по этому признаку.
Признак доступен как из игры, так и из кода, а проверка только из кода.
Если для какого-то объекта признак значит не совсем то что для остальных, для него нужно прописать собственную проверку.
В действии мы просто проверяем проверку, а сама проверка считается для конкретного объекта.
Вот как-то так...


Вы здесь » ТОМ - платформа для текстовых игр » Дневник разработчика » Многозначность свойств и признаков