Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
09.11.2010 15:43

Oreolek
Модератор (+450, -169)
Откуда: Кемерово
Зарегистрирован: 02.11.2009
Сообщений: 673
Вебсайт

Архитектура для парсерного движка

Есть такая идея для архитектуры парсера: сделать его объектным. Идея у меня появилась давно, я уже года два её пытаюсь реализовать.
Есть системный класс game. В нём прописаны все стандартные ответы на команды. Каждый метод класса game - это команда. Класс обрабатывает все команды из одного слова.
От него идёт наследование крупным классам - например, Шкаф. В классе Шкаф указаны ответы на команды для всех шкафов.
Это всё уже наследует объект шкаф_в_спальне, где некоторые обработчики переопределяются.
При наборе команды в комнате парсер смотрит на все объекты комнаты. Если ни в одном объекте не определена эта команда - она не распознаётся. Если совпадение есть - смотрим на объект в команде (допустим, главный объект всегда в именительном падеже), ищем в сцене.

В чём проблемы?

  1. Каждый метод ОЧЕНЬ СИЛЬНО разрастается. Потому что объект должен следить за другими объектами, и за сценой, в которой он находится. Это делает код даже однокомнатной игры таким буреломным, что ни о каком "парсере в массы" и мечтать не приходится...
  2. Как сделать добавление и удаление команд к объектам?
  3. Совершенно непонятно, как сделать это проще для написания. В движке будет определён game, можно определить парочку команд, но дальше?

Неактивен

0    0    #2
09.11.2010 16:42

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Архитектура для парсерного движка

идея для архитектуры парсера: сделать его объектным

http://rtads.org/man/TADSOOP.HTM

Неактивен

0    0    #3
09.11.2010 16:44

Oreolek
Модератор (+450, -169)
Откуда: Кемерово
Зарегистрирован: 02.11.2009
Сообщений: 673
Вебсайт

Re: Архитектура для парсерного движка

Блин...а я 2 года мучился...спасибо, посмотрю.

Неактивен

0    0    #4
09.11.2010 17:13

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Архитектура для парсерного движка

т.е. команды будут выполнять сами объекты?
ты говоришь >открой шкаф
а шкаф отвечает: ты открыл шкаф
а если сказать >Вася, открой шкаф
шкаф должен сообразить что это Вася открыл шкаф

очень умные должны быть объекты...

Неактивен

0    0    #5
09.11.2010 20:04

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Архитектура для парсерного движка

ASBer написал:

т.е. команды будут выполнять сами объекты?
ты говоришь >открой шкаф
а шкаф отвечает: ты открыл шкаф
а если сказать >Вася, открой шкаф
шкаф должен сообразить что это Вася открыл шкаф

очень умные должны быть объекты...

Ну, ASBer, а еще говоришь, что с TADS'ом разбирался;).

В TADS все примерно так и сделано. И объект не "соображает" про Васю - ему просто в обработчик передается текущий персонаж в качестве аргумента;).

Или я тебя не понял...

Неактивен

0    0    #6
09.11.2010 20:19

gloomy
Модератор (+277, -67)
Зарегистрирован: 21.02.2009
Сообщений: 427

http://instead.hugeping.ru

Re: Архитектура для парсерного движка

Вообще то я думал что все (inform. tads) парсеры так и работают примерно.  smile

Неактивен

0    0    #7
09.11.2010 20:22

yandexx
Z-машина (+46, -3)
Откуда: Санкт-Петербург
Зарегистрирован: 01.06.2007
Сообщений: 394
Вебсайт

Русский Информ
Информ Discord

Re: Архитектура для парсерного движка

Всё уже давно отлажено и сделано, см. также Информ :)
http://www.inform-fiction.org/manual/DM4.pdf

А про Васю -- в Информе у объекта "Вася" создаётся стандартный обработчик "orders", в котором можно указать действия при поступлении команды со стороны. И, например, выполнится действие <<Open wardrobe>>, только актёром будет Вася (по умолчанию актёр -- ГГ).

(Я поначалу подумал что Oreolek троллит :) )

Неактивен

0    0    #8
09.11.2010 21:58

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Архитектура для парсерного движка

uux написал:

Ну, ASBer, а еще говоришь, что с TADS'ом разбирался;).

Разбирался )) давно правда, успел забыть ))
Копировать TADS не надо, там далеко не всё идеально...

Отредактировано ASBer (09.11.2010 22:05)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru