Есть такая идея для архитектуры парсера: сделать его объектным. Идея у меня появилась давно, я уже года два её пытаюсь реализовать.
Есть системный класс game. В нём прописаны все стандартные ответы на команды. Каждый метод класса game - это команда. Класс обрабатывает все команды из одного слова.
От него идёт наследование крупным классам - например, Шкаф. В классе Шкаф указаны ответы на команды для всех шкафов.
Это всё уже наследует объект шкаф_в_спальне, где некоторые обработчики переопределяются.
При наборе команды в комнате парсер смотрит на все объекты комнаты. Если ни в одном объекте не определена эта команда - она не распознаётся. Если совпадение есть - смотрим на объект в команде (допустим, главный объект всегда в именительном падеже), ищем в сцене.
В чём проблемы?
Неактивен
идея для архитектуры парсера: сделать его объектным
Неактивен
т.е. команды будут выполнять сами объекты?
ты говоришь >открой шкаф
а шкаф отвечает: ты открыл шкаф
а если сказать >Вася, открой шкаф
шкаф должен сообразить что это Вася открыл шкаф
очень умные должны быть объекты...
Неактивен
ASBer написал:
т.е. команды будут выполнять сами объекты?
ты говоришь >открой шкаф
а шкаф отвечает: ты открыл шкаф
а если сказать >Вася, открой шкаф
шкаф должен сообразить что это Вася открыл шкаф
очень умные должны быть объекты...
Ну, ASBer, а еще говоришь, что с TADS'ом разбирался;).
В TADS все примерно так и сделано. И объект не "соображает" про Васю - ему просто в обработчик передается текущий персонаж в качестве аргумента;).
Или я тебя не понял...
Неактивен
Вообще то я думал что все (inform. tads) парсеры так и работают примерно.
Неактивен
Всё уже давно отлажено и сделано, см. также Информ :)
http://www.inform-fiction.org/manual/DM4.pdf
А про Васю -- в Информе у объекта "Вася" создаётся стандартный обработчик "orders", в котором можно указать действия при поступлении команды со стороны. И, например, выполнится действие <<Open wardrobe>>, только актёром будет Вася (по умолчанию актёр -- ГГ).
(Я поначалу подумал что Oreolek троллит :) )
Неактивен
uux написал:
Ну, ASBer, а еще говоришь, что с TADS'ом разбирался;).
Разбирался )) давно правда, успел забыть ))
Копировать TADS не надо, там далеко не всё идеально...
Отредактировано ASBer (09.11.2010 22:05)
Неактивен