Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
14.04.2008 11:59

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Неактивен

0    0    #2
14.04.2008 12:14

fireton
некто с бородой (+353, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

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

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

Неактивен

0    0    #3
14.04.2008 13:00

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

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

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

fireton написал:

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

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

Неактивен

0    0    #4
14.04.2008 13:27

Mioirel
Участник (+2)
Зарегистрирован: 15.07.2007
Сообщений: 22

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

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

Неактивен

0    0    #5
14.04.2008 13:37

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

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

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

Mioirel написал:

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

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

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

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

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

Неактивен

0    0    #6
14.04.2008 14:26

Korwin
Гоблин, зеленый от недосыпа (+186, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 790
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

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

ASBer, послушай доброго совета опытных людей (fireton и Mioirel - опытные люди по части квестов) - не делай больше сущностей, чем необходимо! Парсер должен быть парсером - с минимальными ограничениями, все остальное реализуется стандартной библиотекой. Все, что зашито в парсер жестко - будет кому-то мешать.

Неактивен

0    0    #7
14.04.2008 15:20

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

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

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

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

Неактивен

0    0    #8
14.04.2008 16:28

noname
Участник (+36, -9)
Зарегистрирован: 04.04.2008
Сообщений: 729

noname

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

вопрос интересен вот в каком плане:

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

например:

взять <что-то> ; соотв свойство объекта: св_взять ;
возможные значения свойства св_взять: можно, нельзя;

кроме того автор может задавать свои значения: будет_можно_при_опр_обстоятельствах, нельзя2(другое сообщение ошибки), можно_особое_действие, и т п- что в голову взбредёт

если всзять <что-то> обнаруживает незнакомое свойство- обрабатывает, как дефолтное

а вообще хорошо бы проверяльщик сделать:
прописана ли для каждого действия работа с каждым значением соотв свойства?
для каких объектов прописаны свойства(с заданн значением) не для каждого действия?
и т п
ну, суть ясна: результат действия зависит от значения соотв св-ва объекта; так же при каждом действии соотв образом изменяем свойства затронутых действием объектов, соответственно обстоятельствам.

типа вот такая логика программирования

Отредактировано noname (14.04.2008 16:31)

Неактивен

0    0    #9
14.04.2008 17:27

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

noname написал:

все поскипано

Собственно, обыкновенное ООП (хы, ОООП), как в ТАДС, например.

Неактивен

0    0    #10
14.04.2008 20:46

aash29
Участник (+3)
Зарегистрирован: 28.08.2007
Сообщений: 46

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

Есть интересная статья Нельсона, там есть на тему объектов и отношений:

http://www.inform-fiction.org/I7Downloa … ePaper.pdf

правда боюсь только на английском

Отредактировано aash29 (15.04.2008 17:29)

Неактивен

0    0    #11
15.04.2008 10:33

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

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

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

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

Неактивен

0    0    #12
15.04.2008 14:16

elmortem
Участник
Откуда: Терра
Зарегистрирован: 29.06.2007
Сообщений: 111
Вебсайт

Тихо, идёт запись!

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

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

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

Неактивен

0    0    #13
15.04.2008 14:53

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

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

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

elmortem написал:

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

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

Неактивен

0    0    #14
15.04.2008 15:07

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

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

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

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

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

Неактивен

0    0    #15
17.04.2008 22:09

elmortem
Участник
Откуда: Терра
Зарегистрирован: 29.06.2007
Сообщений: 111
Вебсайт

Тихо, идёт запись!

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

ASBer написал:

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

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

Неактивен

0    0    #16
18.04.2008 10:22

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

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

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

elmortem написал:

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

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

Неактивен

0    0    #17
18.04.2008 13:39

goraph
Участник (+646, -223)
Зарегистрирован: 16.04.2007
Сообщений: 531

Основная добродетель гражданина есть недоверие.

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

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

Неактивен

0    0    #18
18.04.2008 15:01

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

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

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

goraph написал:

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

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

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

Неактивен

0    0    #19
18.04.2008 15:35

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

ASBer написал:

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

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

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

Неактивен

0    0    #20
18.04.2008 16:13

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

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

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

Gesperid написал:

ASBer написал:

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

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

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

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

Неактивен

0    0    #21
18.04.2008 16:24

ASBer
Модератор (+160, -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    #22
18.04.2008 16:43

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

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

ASBer написал:

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

Первые 5 пунктов не разделяю, и нетривиальности в них не вижу:) А 6-ой справедлив только при отсутствии в языке средств огранизации циклов и какого-нибудь подобия списков. Если в языке это есть, то решение - банальный поиск на графе.
Автору же, в большинстве случаев, нет необходимости вникать в реализацию алгоритмов стандартной библиотеки, достаточно иметь представление об её интерфейсе.

Неактивен

0    0    #23
18.04.2008 16:51

fireton
некто с бородой (+353, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

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

1. построить путь от персонажа к объекту на объектном дереве локации.
2. проверить свойства объектов-контейнеров на пути от персонажа к объекту.
3. не забыть учесть все возможные варианты (например объект внутри персонажа)

Ты про рекурсию слышал? wink

Неактивен

0    0    #24
18.04.2008 16:55

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

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

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

Gesperid написал:

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

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

Неактивен

Powered by PunBB
© copyright 2001–2022 iFiction.Ru