При проверке возможности действия над предметом, парсер должен проверять доступность предметов, вложенных в другие объекты. При этом объекты могут быть доступны для одних типов действий и недоступны для других.
Идея проста:
Классифицировать на уровне парсера действия по видам чувств:
- зрение,
- слух,
- осязание,
- обоняние,
- вкус, (под вопросом…)
+ 6-е чувство (для экстрасенсорных воздействий)
+ чувство собственности (возможность манипулирования предметами)
Для объектов-контейнеров устанавливаем флаги:
- непрозрачность - нельзя видеть предмет,
- звукоизоляция – нельзя слышать предмет,
- невозможность потрогать предмет,
- герметичность для запахов – нельзя понюхать предмет
- невозможность попробовать на вкус (очевидно= невозможности потрогать предмет)
- экстрасенсорная непрозрачность (а надо ли? вероятно для этого типа действий преград нет)
- является собственником – владелец не дает брать и использовать предметы.
Так, для поверхности стола (предмет лежит на столе) допустимы все действия – можно осматривать, нюхать, трогать, брать или слушать предмет.
Для стеклянной витрины разрешаем осматривать предмет внутри витрины (возможно, нюхать и слушать).
При попытке потрогать или взять предмет, будет выдаваться сообщение: «предмет недоступен»
Для завязанного мешка оставляем возможность прощупать предмет внутри мешка.
Для предмета внутри металлического сейфа оставляем только экстрасенсорные воздействия. Для прочих действий будут выдаваться сообщения: «ты не видишь это здесь», «ничего не слышно», «ничем не пахнет», «предмет недоступен»
Для NPC устанавливаем флаг собственника. При попытке взять у владельца предмет выдается сообщение: «NPC_Name не даст тебе это».
При описании действий, автор явно указывает парсеру, к какому типу это действие относится.
Примеры:
Действие «Осмотреть» - зрение
Действие «Взять» - собственность + возможность потрогать
Действие «Украсть» - возможность потрогать
Действие «Кинуть в …» - зрение (можно кинуть в то, что видишь)
Вопрос к сообществу:
Будет ли достаточно описанных типов действий, или я что-либо упустил?
Типы действий планируется зашить в парсер и их состав будет фиксирован.
Отредактировано ASBer (14.04.2008 13:43)
Неактивен
noname написал:
все поскипано
Собственно, обыкновенное ООП (хы, ОООП), как в ТАДС, например.
Неактивен
ASBer написал:
Для определения возможности выполнения действия потребуется проверить свойства всех контейнеров на пути от персонажа до объекта!
Задача нетривиальна даже для опытного программиста
А что именно нетривиально?
Отредактировано Gesperid (18.04.2008 15:35)
Неактивен
ASBer написал:
1. построить путь от персонажа к объекту на объектном дереве локации.
2. проверить свойства объектов-контейнеров на пути от персонажа к объекту.
3. не забыть учесть все возможные варианты (например объект внутри персонажа)
4. все это повторить для каждого действия.
5. нигде не ошибиться.
6. все это на простейшем языке, изначально ориентированном на "непрограммистов".
помоему уже страшно...
Первые 5 пунктов не разделяю, и нетривиальности в них не вижу:) А 6-ой справедлив только при отсутствии в языке средств огранизации циклов и какого-нибудь подобия списков. Если в языке это есть, то решение - банальный поиск на графе.
Автору же, в большинстве случаев, нет необходимости вникать в реализацию алгоритмов стандартной библиотеки, достаточно иметь представление об её интерфейсе.
Неактивен