Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
14.04.2008 11:59

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

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

Типизация действий по видам чувств

При проверке возможности действия над предметом, парсер должен проверять доступность предметов, вложенных в другие объекты. При этом объекты могут быть доступны для одних типов действий и недоступны для других.

Идея проста:
Классифицировать на уровне парсера действия по видам чувств:
- зрение,
- слух,
- осязание,
- обоняние,
- вкус, (под вопросом…)
+ 6-е чувство (для экстрасенсорных воздействий)
+ чувство собственности (возможность манипулирования предметами)

Для объектов-контейнеров устанавливаем флаги:
- непрозрачность - нельзя видеть предмет,
- звукоизоляция – нельзя слышать предмет,
- невозможность потрогать предмет,
- герметичность для запахов – нельзя понюхать предмет
- невозможность попробовать на вкус (очевидно= невозможности потрогать предмет)
- экстрасенсорная непрозрачность (а надо ли? вероятно для этого типа действий преград нет)
- является собственником – владелец не дает брать и использовать предметы.

Так, для поверхности стола (предмет лежит на столе) допустимы все действия – можно осматривать, нюхать, трогать, брать или слушать предмет.

Для стеклянной витрины разрешаем осматривать предмет внутри витрины (возможно, нюхать и слушать).
При попытке потрогать или взять предмет, будет выдаваться сообщение: «предмет недоступен»

Для завязанного мешка оставляем возможность прощупать предмет внутри мешка.

Для предмета внутри металлического сейфа оставляем только экстрасенсорные воздействия. Для прочих действий будут выдаваться сообщения: «ты не видишь это здесь», «ничего не слышно», «ничем не пахнет», «предмет недоступен»

Для NPC устанавливаем флаг собственника. При попытке взять у владельца предмет выдается сообщение: «NPC_Name не даст тебе это».

При описании действий, автор явно указывает парсеру, к какому типу это действие относится.
Примеры:
Действие «Осмотреть» - зрение
Действие «Взять» - собственность + возможность потрогать
Действие «Украсть» - возможность потрогать
Действие «Кинуть в …» - зрение (можно кинуть в то, что видишь)

Вопрос к сообществу:
Будет ли достаточно описанных типов действий, или я что-либо упустил?
Типы действий планируется зашить в парсер и их состав будет фиксирован.

Отредактировано ASBer (14.04.2008 13:43)

Неактивен

0    0    #2
14.04.2008 13:00

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

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

Re: Типизация действий по видам чувств

fireton написал:

Такого рода логика должна реализовываться в стандартных библиотеках, а не зашиваться жестко в сам парсер.

Для библиотек останется еще немало логики, которую потребуется обрабатывать.
Так как видов действий я насчитал немного, а втречаются они на каждом шагу, не вижу ничего страшного , если этим займется сам парсер.

Неактивен

0    0    #3
14.04.2008 13:37

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

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

Re: Типизация действий по видам чувств

Mioirel написал:

А если автор решит сделать игру где ГГ это кракозябра, имеющая иную систему чувств?

Вариант 1:
Сопоставить каждому человеческому чувству некое чувство кракозябры и заменить системные сообщения парсера на свои - "я не вижу это" на "я не вмлямлю это".

Вариант 2:
Вообще не присваивать действиям и контейнерам никаких атрибутов (можно все для всего), и определять допустимость/недопустимость действия на последующих этапах.

p.s. подправил свой первый пост - все флаги контейнеров являются ограничительными, если флагов нет - возможны все типы действий.

Отредактировано ASBer (14.04.2008 13:44)

Неактивен

0    0    #4
14.04.2008 15:20

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

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

Re: Типизация действий по видам чувств

Ok, послушаюсь доброго совета smile
Посмотрим насколько легко это будет обрабатываться в библиотеках...

Неактивен

0    0    #5
15.04.2008 10:33

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

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

Re: Типизация действий по видам чувств

2aash29 Спасибо, статья вероятно очень полезная!
P.S. а перевода на русский случайно где-нибудь нет? smile

Неактивен

0    0    #6
15.04.2008 14:53

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

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

Re: Типизация действий по видам чувств

elmortem написал:

Не проще ли тогда сделать "класс чувства" и на его основе уже реализовать в библиотеках все остальные чувства?

Вероятно можно реализовать и такой подход. smile
Сейчас я делаю самую простую версию - на уровне парсера будет определяться лишь наличие объекта в локации, а все остальные проверки будут программироваться автором или в библиотеках.
Если вдруг окажется что эти проверки слишком громоздки или непрозрачны, тогда имеет смысл придумывать различные механизмы для их упрощения. (совсем необязательно что описанный тут мной подход окажется оптимальным)

Неактивен

0    0    #7
15.04.2008 15:07

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

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

Re: Типизация действий по видам чувств

Основные трудности будут возникать в сложно-организованных локациях и при глубокой "матрешечной" вложенности объектов. Но учитывая что такие случаи для ИЛ скорее исключение, чем практика, ими вероятно можно пренебречь.

Отредактировано ASBer (15.04.2008 15:08)

Неактивен

0    0    #8
18.04.2008 10:22

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

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

Re: Типизация действий по видам чувств

elmortem написал:

Если контейнер - тоже объет, то проблем быть не должно.

Контейнер - тоже объект, но контейнеры могут быть вложены друг в друга.
Персонаж - так-же объект, и может быть вложен в ряд контейнеров. Для определения возможности выполнения действия потребуется проверить свойства всех контейнеров на пути от персонажа до объекта!
Задача нетривиальна даже для опытного программиста smile

Неактивен

0    0    #9
18.04.2008 15:01

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

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

Re: Типизация действий по видам чувств

goraph написал:

Разве это исключение? У персонажа есть в сумке пузырек, в котором таблетки, а сам персонаж в лодке. Вполне обычная ситуация.

Да да, именно такие ситуации я и имел ввиду вначале -
Унюхать запах медикаментов можно если просто принюхаться (пузырек и сумка негерметичны), увидеть таблетки можно если достать пузырек из сумки (пузырек прозрачен), потрогать и попробовать таблетки можно только достав их из пузырька.

Отредактировано ASBer (18.04.2008 15:12)

Неактивен

0    0    #10
18.04.2008 16:13

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

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

Re: Типизация действий по видам чувств

Gesperid написал:

ASBer написал:

Для определения возможности выполнения действия потребуется проверить свойства всех контейнеров на пути от персонажа до объекта!
Задача нетривиальна даже для опытного программиста smile

А что именно нетривиально?

1. построить путь от персонажа к объекту на объектном дереве локации.
2. проверить свойства объектов-контейнеров на пути от персонажа к объекту.
3. не забыть учесть все возможные варианты (например объект внутри персонажа)
4. все это повторить для каждого действия.
5. нигде не ошибиться.
6. все это на простейшем языке, изначально ориентированном на "непрограммистов".
помоему уже страшно... smile

Отредактировано ASBer (18.04.2008 16:16)

Неактивен

0    0    #11
18.04.2008 16:24

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

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

Re: Типизация действий по видам чувств

elmortem написал:

Сопоставить каждому человеческому чувству некое чувство кракозябры и заменить системные сообщения парсера на свои - "я не вижу это" на "я не вмлямлю это".

Не проще ли тогда сделать "класс чувства" и на его основе уже реализовать в библиотеках все остальные чувства? Хоть человеческие, хоть крокозябровые...
Т.е. при "создании" чувства ты просто указываешь набор действий и ограничений для контейнеров, и т.д.

Можно сделать безымянные флаги - 1, 2,  4 ... 128. и дать автору возможность их именования, например:
#define зрение = 2
#define слух = 4
...
#define обоняние = 64

для объектов и действий свойства задавать -
obj.flags = 2 + 4 + 64
или
obj.flags = зрение + слух + обоняние

Отредактировано ASBer (23.10.2009 10:58)

Неактивен

0    0    #12
18.04.2008 16:55

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

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

Re: Типизация действий по видам чувств

Gesperid написал:

6-ой справедлив только при отсутствии в языке средств огранизации циклов и какого-нибудь подобия списков.

Изначально хотелось обойтись языком без циклов, массивов, списков и прочих "радостей" убрав все подобные задачки внутрь .exe-шника...

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru