Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
13.04.2001 23:56

WildWizard
Участник
Откуда: Россия, Красноярск
Зарегистрирован: 01.03.2001
Сообщений: 450
Вебсайт

Nobody expects the Spa.. Oh, never&&mind.

ООП IF платформы vs линейное программирование

Объекты в IF языках программирования это хорошо - можно задать общие для объектов вещи и более не мучиться... Проблемы есть, но их не много и они довольно просто решаются/избегаются. Это, например, приписывание не тех свойств объектам = простая невнимательность. Но, возможно, кто-нибудь скажет, что ООП (объектно-ориентированное программирование) сложнее, чем линейное программирование.
Короче не знаю.
Просто ищу оправдание внезапно наплывшему желанию написать простую платформу на Python для IF. Команды там будут обрабатываться совершенно линейно, как в "Васе". Т.е. те команды, кот. программист не задал пониматься просто не будут. Хотя будут некоторые вспомогательные механизмы - такие, как маски команд. Скажем, игрок набирает "отдать топор гоблину", находясь в комнате room1. Тогда последовательно будут вызываться следующие команды: room1_отдать_топор_гоблин, room1_отдать_топор_*, room1_отдать_*_гоблин, room1_отдать_*_*, room1, отдать_топор_гоблин, отдать_топор_*, отдать_*_гоблин, отдать_*_*, *. Вот примерно так. Надеюсь, что идея понятна. Следует ли пытаться сделать такую систему, или она по сути слишком примитивна и не стоит затраченного времени? А?

Неактивен

0    0    #2
14.04.2001 08:14

Genx
Участник
Зарегистрирован: 14.03.2001
Сообщений: 22

Re: ООП IF платформы vs линейное программирование

К сожалению, я уже написал IQ - там всё по подобному принципу

Неактивен

0    0    #3
15.04.2009 20:08

MixeratoR
Участник
Зарегистрирован: 13.06.2008
Сообщений: 8

Re: ООП IF платформы vs линейное программирование

Можете посоветовать какую-нибудь менюшную ООП платформу?
желательно с простым языком типа QSP, Паскаля

(в принципе не важно русская она или нет,
только бы русская кодировка отображалась правильно)

Неактивен

0    0    #4
15.04.2009 20:24

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

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

Re: ООП IF платформы vs линейное программирование

ТОМ под Миленой.
Простой С++ подобный язык.
А парсер можно не использовать.
smile

Неактивен

0    0    #5
16.04.2009 11:12

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: ООП IF платформы vs линейное программирование

Убрано в спойлер.

 спойлер…

Отредактировано Eten (18.04.2009 07:37)

Неактивен

0    0    #6
16.04.2009 12:18

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

---

Re: ООП IF платформы vs линейное программирование

Eten, платформы-то у тебя нет, признай это. Только "замыслы" и "наработки".

Неактивен

0    0    #7
16.04.2009 17:12

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

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

Re: ООП IF платформы vs линейное программирование

В приложении микро-мини-демка для Милены.
Тестировалось на Милене 2.0 с подключенным модулем ТОМ.
Пример позволяет представить себе как бы выглядела менюшная игра на ТОМе.

--------------------------------------------------------------------------------
Прикрепленные файлы:
Milena_demo.tom, Размер: 2,031 байт, Скачано: 46

UPD: обновленный пример входит в набор примеров к платформе ТОМ, его можно скачать со станички ТОМа в иф-википедии.

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

Неактивен

0    0    #8
16.04.2009 18:06

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: ООП IF платформы vs линейное программирование

Убрано в спойлер.

 спойлер…

Отредактировано Eten (18.04.2009 07:38)

Неактивен

0    0    #9
17.04.2009 06:18

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

Re: ООП IF платформы vs линейное программирование

Eten, см. личку.

Неактивен

0    0    #10
17.04.2009 14:41

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

noname

Re: ООП IF платформы vs линейное программирование

просто хочу напомнить всем известную мысль, что в стиле ООП можно программировать и на существующих менюшных платформах

 спойлер…

Неактивен

0    0    #11
17.04.2009 16:41

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

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

Re: ООП IF платформы vs линейное программирование

noname, а наследование у тебя будет? а перегрузка методов? wink

Неактивен

0    0    #12
17.04.2009 17:54

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

noname

Re: ООП IF платформы vs линейное программирование

ASBer, видишь ли, у меня есть своё видение того, как должен быть устроен парсер

RTADS меня пока не устраивает проблемами со склонениями: я хочу, что бы мой парсер принимал команды на правильном русском языке, и выдавал ответную реакцию на правильном русском языке. в RTADS я могу добиться некорректных реакций от своего кода. и исправить это для меня так же сложно, как свой парсер написать

Delphi меня не устраивает большой подготовительной работой. хотелось бы сосредоточиться именно на написании движка и игры

URQ не устраивает, пожалуй, только отсутствием такого хорошего редактора, как QGen. а именно: для парсерного движка удобно разбиение текста на куски, м/ду которыми легко переключаться

QSP, так же, как и URQ, привлекает полным отсутствием поддержки парсера. собственно, все парсерные возможности в них сводятся к работе со строками. НО это- как раз то, что мне надо. делать свой движок на _другом_ движке было бы мучительно

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

насчёт ТОМа... попробовать что-ли сделать очередной заход? что-то с трудом даётся его освоение. это- главное, единственное, и большое препятствие для меня. хотя, язык- соблазнительный. что мне не нравится в существующих парсерных движках- разделение на типы объектов. почему бы не сделать 'контейнер', 'поверхность', 'переносимость', 'общительность' свойствами, которые можно комбинировать в любом порядке для любых объектов?

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

допустим, создаём новый объект 'яблоко'. для начала все его свойства=0, т е задана дефолтная обработка // как правило, просто выдаёт 'стандартное' сообщение, и ничего не делает
если автор хочет, что бы его можно было съесть- делаем свойство 'съесть' объекта 'яблоко' равным 1 // т е - стандартное поедание объекта
задав ещё несколько свойств (взять, и т п - исходя из того, что с ним нужно будет делать) - автор уже добавил новый объект в игру! // ну, правда, просклонять его ещё надо
если нужно добавить ядовитый объект- без проблем: добавляем функцию съесть_2, вызываемую, если свойство 'съесть' какого-то объекта равно 2 // т е - объект ядовит
добавить новый глагол- без проблем! - для этих всех добавлений можно даже прогу написать, типа Adrift, через которую можно добавлять в квест любые объекты и реакции

вот это было бы простой и понятной парсерной платформой

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

// давайте, разгромите мои бредни в пух и прах - буду рад конструктиву

Неактивен

0    0    #13
17.04.2009 19:21

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

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

Re: ООП IF платформы vs линейное программирование

мне не нравится в существующих парсерных движках- разделение на типы объектов. почему бы не сделать 'контейнер', 'поверхность', 'переносимость', 'общительность' свойствами, которые можно комбинировать в любом порядке для любых объектов?

Для этого есть много причин. smile
Попробую перечислить главные:
1. Практически невозможно сделать универсальный класс на все случаи жизни. Даже перечисленные тобой свойства дают 16 типов различных объектов. Помнож их на количество возможных действий и оцени объем разработки и тестирования всех возможных реакций. Страшно? Мне страшно.
Например поверхность+переносимость. Что будет если мы возьмем такой объект? Предметы с поверхность должны упасть на пол, или останутся на ней как приклееные?
Еще пример: контейнер+общительность. Если мы положим туда предмет, контейнер должен говорить "спасибо"? smile
Поэтому стандарные библиотеки и содержат узкоспециализированные классы. Только это дает возможность написать библиотеку в сколь бы то нибыло приемлемый срок.
2. Производительность. Сейчас возможно это не так актуально, но узкоспециализированные классы просчитываются быстрее нежели универсальные.
Если у тебя в локации только один НПС унаследованный от 'общительного' класса, парсер не будет на твой "Привет" перебирать все табуретки в локации в надежде, что какая нибудь из них ответит.
3. Стандартные классы вполне подходят для быстрого создания антуража игры. Если же мы конечно хотим написать игру, а не реалити-симулятор.
Игра должна вести игрока чтобы у него не возникало желания говорить с табуретками или двигать недвижимое...
А если к этому еще дописать несколько нестандартных объектов на главные роли - вообще Супер!

Неактивен

0    0    #14
17.04.2009 19:43

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

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

Re: ООП IF платформы vs линейное программирование

пойдём дальше:
почему бы каждому объекту не задать список свойств, связанных с каждым глаголом?

Я библиотеку к ТОМу именно так и буду делать. У объектов будут свойства .МожноВзять .МожноНадеть .МожноСъесть и т.п.

насчёт ТОМа... попробовать что-ли сделать очередной заход?

Велком smile
Надеюсь в ближайшее время выложить обновленную версию ТОМа, и стандартную библиотеку начну выкладывать кусками.

что-то с трудом даётся его освоение. это- главное, единственное, и большое препятствие для меня. хотя, язык- соблазнительный.

Кста, а может тебе с менюшных игр на ТОМе начать? это на порядок легче. Освоишься с языком и классами там и к парсеру мона перейти. smile

Отредактировано ASBer (17.04.2009 20:03)

Неактивен

0    0    #15
17.04.2009 21:25

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

Re: ООП IF платформы vs линейное программирование

Ох... Полный оффтоп пошел - прошу прощения у тех, кто писал в эту тему с совсем другими целями, нежели полемика по поводу ООП... Но не ответить noname просто не могу (настолько у него своеобразный -  при этом имеющий мало общего с реальностью - взгляд на объектно-ориентированное программирование). Модераторы, секите и гнобите меня - я этого заслуживаю!

noname написал:

ASBer, видишь ли, у меня есть своё видение того, как должен быть устроен парсер

RTADS меня пока не устраивает проблемами со склонениями: я хочу, что бы мой парсер принимал команды на правильном русском языке, и выдавал ответную реакцию на правильном русском языке. в RTADS я могу добиться некорректных реакций от своего кода. и исправить это для меня так же сложно, как свой парсер написать

Добиться некорректных реакций? Или у тебя проблемы с формулировками, или у меня - с пониманием (но никак не у ТАДСа со склонениями; вернее, они есть, но сильно преувеличены). Добиться некорректной реакции кто угодно c легкостью cможет от любого языка и для любой области применения - достаточно в первой же инструкции, например, выполнить деление на ноль - вот и некорректная реакция. В свете этого прошу пояснить, что же конкретно имелось в виду.

Так, комментировать про то, чем тебя привлекает/отталкивает та или иная платформа для написания собственного парсерного движка - не буду. Выбор твой, в конце концов.

noname написал:

что мне не нравится в существующих парсерных движках- разделение на типы объектов. почему бы не сделать 'контейнер', 'поверхность', 'переносимость', 'общительность' свойствами, которые можно комбинировать в любом порядке для любых объектов?

А что, в RTADS - не так? Все это выполняется путем множественного наследования, например при следующем определении

Shtukovina: container, surface, item

будет одновременно контейнером (класс container), поверхностью (surface) и переносимым объектом (item). Чем тебе не свободная комбинация свойств родительских классов? (В нюансы сейчас не углубляюсь, чтобы не раздувать и без того оффтопный пост).

noname написал:

пойдём дальше:
почему бы каждому объекту не задать список свойств, связанных с каждым глаголом?

И опять-таки: что, в RTADS - не так? Да ровно так и обстоит дело - у объекта имеется метод-обработчик, отвечающий за реакцию на конкретный глагол.

noname написал:

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

По-моему, достаточно сделать для глагола один обработчик, в котором проверяются некие условия и в зависимости от их (не)выполнения выводятся различные реакции/сообщения об ошибке, не находишь?

noname написал:

допустим, создаём новый объект 'яблоко'. для начала все его свойства=0, т е задана дефолтная обработка // как правило, просто выдаёт 'стандартное' сообщение, и ничего не делает
если автор хочет, что бы его можно было съесть- делаем свойство 'съесть' объекта 'яблоко' равным 1 // т е - стандартное поедание объекта
задав ещё несколько свойств (взять, и т п - исходя из того, что с ним нужно будет делать) - автор уже добавил новый объект в игру! // ну, правда, просклонять его ещё надо
если нужно добавить ядовитый объект- без проблем: добавляем функцию съесть_2, вызываемую, если свойство 'съесть' какого-то объекта равно 2 // т е - объект ядовит
добавить новый глагол- без проблем! - для этих всех добавлений можно даже прогу написать, типа Adrift, через которую можно добавлять в квест любые объекты и реакции

вот это было бы простой и понятной парсерной платформой

Все, что ты написал выше - ровно описание того, как это делается в RTADS;).

Если ты описываешь яблоко как


Yabloko: item
;


оно будет просто стандартным объектом с дефолтной обработкой команд. Если надо, чтобы его можно было съесть, задачу можно решить одним из следующих путей: определить яблоко как наследник класса foodItem


Yabloko: fooditem
;


(это в случае, если тебя устраивает стандартная для этого класса реакция - исчезновение яблока из инвентаря и вывод текста "Было очень вкусно!").

Если не устраивает, можно просто переписать обработчик для глагола "есть", например, так:


Yabloko: item
Nadkusano=0
verDoEat(actor)={}
doEat(actor)={self.Nadkusano:=self.Nadkusano+1;
                      "Ты надкусываешь яблоко. Кисловато, но есть можно.";
                    }
;


Про "добавить новый глагол": непонятно, что имеется в виду - то ли определение новых глаголов для игры, не прописанных в стандартной библиотеке, то ли добавление нового глагола динамически во время игры. В подробности вдаваться сейчас не хочу - слишком обширная тема, да и пересказывать мануал - занятие неблагодарное, но и та, и другая задача средствами RTADS решается.

noname написал:

// давайте, разгромите мои бредни в пух и прах - буду рад конструктиву

Ну, не знаю, есть ли в моем потоке возмущенного сознания конструктив. Вообще (извиняюсь за переход на личности) посты noname иногда напоминают пассаж из рассказа Тэффи "Взамен политики":

– А вы что же изволите изобретать?
– Да еще наверное не знаю. Что нибудь да изобрету. Господи, мало ли еще вещей не изобретено! Ну, например, скажем, изобрету такую какую нибудь машинку, чтобы каждое утро, в положенный час, аккуратно меня будила. Покрутил с вечера ручку, а уж она сама и разбудит. А?
– Папочка, – сказала дочь, – да ведь это просто будильник.
Капитан удивился и замолчал.

Отредактировано uux (17.04.2009 21:44)

Неактивен

0    0    #16
17.04.2009 22:57

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

noname

Re: ООП IF платформы vs линейное программирование

по теме:

Следует ли пытаться сделать такую систему, или она по сути слишком примитивна и не стоит затраченного времени?

да, блин, делай что хочешь. хоть очередной квест а-ля Билли Хаст. примитивно- ещё не значит плохо

Можете посоветовать какую-нибудь менюшную ООП платформу?

нету такой. хотя в стиле ООП можно писать и на URQ, и на QSP. пример щазз давать лениво- можешь заглянуть в тему 'Живой Игровой Мир' на форуме урки, там можно нарыть чё-то вроде примеров программирования в стиле ООП на URQ

теперь оффтоп:
спасибо за ответы. после их прочтения почему-то захотелось писать на Delphi. изучать ТОМ буду по-любому. но не торопясь, и без особой надежды на нём что-нибудь сотворить

'добиться некорректных реакций' имелось ввиду, что играя в написанный мной на RTADS кусок игры, я завсегда могу ввести чё-нибудь такое, что выдаст сообщение в невполне корректой форме. текст упомянутого куска квеста с сейфом(контейнер и поверхность), столом, ключом и роботом выложен где-то на форуме. если интересно- могу поискать. он слегка не доделан- сейф работает не правильно(для правильной работы надо ввести дополнительный объект 'ячейка сейфа', что связано с наличием двух различных хранилищ в нём- НА и ВНУТРИ сейфа). да, упомянутый некорректный вывод, скорее всего вообще не будет замечен игроками, кроме самых въедливых. пожалуй, щазз у меня просто 'период несварения RTADS'

насчёт будильника- буду рад, если именно так дела и обстоят. хотя я в этом не уверен

у объекта имеется метод-обработчик, отвечающий за реакцию на конкретный глагол

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

По-моему, достаточно сделать для глагола один обработчик, в котором проверяются некие условия и в зависимости от их (не)выполнения выводятся различные реакции/сообщения об ошибке, не находишь?

одно и то же. объясняю: команда 'съесть' в зависимости от значения (-n..0..m) соотв свойства вызывает соотв функцию-обработчик (съесть_err_1..съесть_err_n, съесть_0..съесть_m). типа того

и, конечно, если я смогу писать 'моим стилем' в RTADS, или ТОМ- я предпочту писать на них. потому что тогда будет к кому направлять вопросы и пожелания по работе платформы

так, например, как задумаюсь о реализации вложения контейнеров на URQ- волосы встают дыбом. а ведь задача, далеко не надуманная: да, в квестах 'на прохождение', типа Билли Хаста, это- излишество, но если мне интересна проработка именно мира, в котором игрок может просто жить, тогда недостаточно просто автоматически вытаскивать содержимое контейнера при его осмотре. должна быть возможность и положить что-то в него. а среди вещей вполне может оказаться горшочек мёда, в который можно положить и не только мёд. типа того. и тогда задумка с примитивнейшим сюжетом оказывается настоящим вызовом для самодельного парсера

да, и я винду недавно переустановил. надо будет качать RTADS заново. попробую разобраться ещё раз, и сформулировать конкретные вопросы. пожалуй, идеальным для меня был бы такой режим работы: делаю что-нибудь на RTADS, а потом спрашиваю у ASBer, как это проще/короче всего сделать в ТОМе

Неактивен

0    0    #17
18.04.2009 00:54

BreakMT
Участник (+2)
Зарегистрирован: 31.07.2007
Сообщений: 16
Вебсайт

Re: ООП IF платформы vs линейное программирование

Хорошо, что Билли Хаст промелькнул в качестве примера примитивной разработки текстового квеста. Это действительно так. По теме я бы хотел сказать, что использование того или иного метода программирования исходит от понимания, что будет "в конце". ООП создано, что бы облегчить программирование, не для того что бы "оно было". С его использованием код становится меньше, логичней и проще в использовании, но только в тех случаях, когда это действительно необходимо.
Вот,  опять же, взять исходники моего квеста (Билли Хаст, исходники здесь - http://breakmt.narod.ru/billy_src.zip). Многие сказали бы, что это очень плохие исходники. Я сам понимаю, что они могли бы быть гораздо лучше, используй я ООП, да и, вообще, подходя к этому делу серьезней. Другой вопрос был бы ли этот Билли Хаст вообще, если бы я надумал усложнить задачу, сделать редактор карт, диалогов, расчет времени суток, используя ООП ввести всякие контейнеры, поверхности и т.д. да и вообще необходимы ли они были бы в данной игре?
Что лучше - сделать игру за несколько дней и затем оттачивать ее, либо сделать демку, в которую невозможно будет играть, но в ней будет все вышеперечисленное? Многие начинающие (да и знающие) разработчики переоценивают свои силы и пытаются сделать универсальный движок для разработки продолжений. Я считаю, что это не правильно лично из своего опыта.
Короче, мой вывод: если ты размышляешь использовать ли ООП или нет, если ты новичок - пиши как ты привык, потому что только в этом случае ты получишь результат (причем может быть в короткие сроки) + обучишься чему то новому... иначе пиши используя ООП, потому что это удобно, когда понимаешь, что это такое.

Извиняюсь, если не в тему, потому что писал не для платформ (в которых я не секу), а для тех, кто делает квест с нуля используя язык программирования.

Неактивен

0    0    #18
18.04.2009 07:36

Eten
Участник (+9, -307)
Откуда: Балаково, Санкт-Петербург.
Зарегистрирован: 21.05.2007
Сообщений: 1416
Вебсайт

---

Re: ООП IF платформы vs линейное программирование

uux написал:

Eten, см. личку.

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

З.Ы.
Тот кто умеет признавать свои ошибки, хуже не становится! tongue


----------
Убрал свои посты в спойлер, на том и остановлюсь. wink

Отредактировано Eten (18.04.2009 07:39)

Неактивен

0    0    #19
18.04.2009 08:29

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

noname

Re: ООП IF платформы vs линейное программирование

BreakMT, абсолютно согласен, что такой простой подход к программированию парсера оправдан для игр определённого типа. пожалуй, любую задумку 'проходного квеста' (квеста на прохождение) можно реализовать таким способом. при таком подходе мир игры несколько 'огрублён', но в этом и плюс- гамер сосредотачивается на важном, не распыляясь на пустяки. НО у меня есть своя болезнь на эту тему, заключается в идее реализовать 'Живой Игровой Мир'. моё понимание ЖИМ постепенно меняется...

//

да, чуть не забыл: ТОМ = ООП платформа, с возможностью делать менюшные игры

RTADS- вроде бы тоже... в чём проще- не знаю

(хотя, вообще-то это парсерные платформы)

upd:

и ещё немного поддержки to BreakMT: дело, доведённое до конца заслуживает уважения

Отредактировано noname (18.04.2009 08:30)

Неактивен

0    0    #20
19.04.2009 11:04

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

Re: ООП IF платформы vs линейное программирование

noname написал:

теперь оффтоп:
спасибо за ответы. после их прочтения почему-то захотелось писать на Delphi. изучать ТОМ буду по-любому. но не торопясь, и без особой надежды на нём что-нибудь сотворить

'добиться некорректных реакций' имелось ввиду, что играя в написанный мной на RTADS кусок игры, я завсегда могу ввести чё-нибудь такое, что выдаст сообщение в невполне корректой форме. текст упомянутого куска квеста с сейфом(контейнер и поверхность), столом, ключом и роботом выложен где-то на форуме. если интересно- могу поискать. он слегка не доделан- сейф работает не правильно(для правильной работы надо ввести дополнительный объект 'ячейка сейфа', что связано с наличием двух различных хранилищ в нём- НА и ВНУТРИ сейфа). да, упомянутый некорректный вывод, скорее всего вообще не будет замечен игроками, кроме самых въедливых. пожалуй, щазз у меня просто 'период несварения RTADS'

Пример тот искать не надо, я его помню;). Да, согласен, это одна из слабостей стандартной библиотеки TADS - что автоматом подразумевается, что контейнером и поверхностью одновременно объект быть не может. Это лечится двумя способами - тебе дали вариант, более подходящий для новичков (создание служебного объекта, направленного на отработку одной из недостающих реакций). Другой способ - переписывание стандартного класса поверхности (или контейнера) так, чтобы коллизий не возникало.

noname написал:

у объекта имеется метод-обработчик, отвечающий за реакцию на конкретный глагол

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

По-моему, достаточно сделать для глагола один обработчик, в котором проверяются некие условия и в зависимости от их (не)выполнения выводятся различные реакции/сообщения об ошибке, не находишь?

одно и то же. объясняю: команда 'съесть' в зависимости от значения (-n..0..m) соотв свойства вызывает соотв функцию-обработчик (съесть_err_1..съесть_err_n, съесть_0..съесть_m). типа того

Кажется, начинаю понимать, хотя и не совсем. Т. е. ты имеешь в виду, что вся обработка прописана в глаголе, а у объектов имеются только флаги (не методы). Обработчик, целиком локализованный в объекте-глаголе, только проверяет эти флаги. Мда, в (R)TADS это реализуется, но будет выглядеть кривовато. Вообще я думаю, что тебе тогда и вправду лучше писать что-то свое, если по-другому писать не получается... Хотя за ТОМ я, конечно, зря говорю.

Неактивен

0    0    #21
19.04.2009 11:10

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

Re: ООП IF платформы vs линейное программирование

Возвращаясь к вопросу MixeratoR'а - наверное, действительно единственная менюшная платформа с ООП - это ТОМ. Любимый мною (R)TADS, конечно, позволяет писать менюшные игры, но это все-таки извращение. Рекомендую поймать ASBer'а на слове и выжать из него техподдержку в плане написания игры по максимуму;).

Отредактировано uux (19.04.2009 13:35)

Неактивен

0    0    #22
19.04.2009 13:15

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

---

Re: ООП IF платформы vs линейное программирование

Какая же ТОМ "менюшная" платформа?

Неактивен

0    0    #23
19.04.2009 13:20

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

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

Re: ООП IF платформы vs линейное программирование

Рекомендую поймать ASBer'а на слове и выжать из него техподдержку в плане написания игры по максимуму

Всегда пожалуйста, я готов smile

Какая же ТОМ "менюшная" платформа?

В ТОМе есть поддержка меню.

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

Неактивен

0    0    #24
19.04.2009 15:20

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

---

Re: ООП IF платформы vs линейное программирование

Платформа с "поддержкой меню" != менюшная платформа

Неактивен

0    0    #25
19.04.2009 17:57

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

noname

Re: ООП IF платформы vs линейное программирование

uux, недостаток RTADS для меня скорее в том, что я могу добиться вывода на 'ломанном руском'. хотя, да- проблемма скорее надуманная, чем реальная. поверхности тут ни при чём- их действительно можно сделать, и это сделать довольно просто, и это недостатком я не считаю

---

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

это- совершенно естественная идея, и- хороший способ избежать 'комбинаторного взрыва'

---

RTADS опять скачал... буду поразбираться ишщё

Платформа с "поддержкой меню" != менюшная платформа

а в томе специально предусмотрена автором возможность создавать меню. и автор постарался, чтоб это сделать было удобно... но да, парсерная платформа- уже не менюшная. я так вижу, по сообщениям of ASBer, что он скорее позиционирует её, как 'универсальную'. т е ООП-платформу с Си-подобным языком, предназначенную для создания как парсерных, так и менюшных квестов

to ASBer: будешь писать библиотку - не молчи, дай знать. для начала хотелось бы команд 'идти' и 'смотреть', затем- 'открыть' и 'закрыть' - двери, окна, сейфы, шкатулки и т п, потом - 'взять' и 'выложить' - хочу потестить по 'горячим следам'

Отредактировано noname (19.04.2009 18:05)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru