1) Каким образом можно "осмотреть себя"?
2) Как всучить глав.герою предмет в начале игры (т.е. чтобы игра начиналась уже с этим предметом в инвентаре)?
2.1) Как вообще что-либо вручать герою?
3) Как на RTADS'е написать что-то вроде
если (БатареяЗаряжена=ложь, то сказать "эй, заряди батарею!") иначе (сказать "батарея уже заряжена")
4) Как в одной локации осуществить следующее:
взять книгу со стола -стол слишком далеко подойти к столу -ты стоишь возле стола взять книгу -ты взял книгу
Или для этого нужно создавать несколько локаций?
5) Как избавиться от
ты стоишь в северной комнате ты видишь на столе книгу
хотя в
someroom:room ldesc="ты стоишь в северной комнате";
Заранее немерено благодарен.
Неактивен
Код:
взять книгу со стола -стол слишком далеко подойти к столу -ты стоишь возле стола взять книгу -ты взял книгу
Если это пример из жизни, то я бы рекомендовал таких вещей не делать. Это и усложняет жизнь игроку и автору, и не является загадкой. Для наполнения игрового процесса лучше придумать что-нибудь более увлекательное.
Неактивен
ASBer написал:
Для одежды есть специальный класс clothingItem.
Попробуй сделатьКод:
Uniform: clothingItem
При этом не надо переопределять метод doWear.
Неактивен
IO, ты неправильно используешь предоставленный инструментарий (к тому же, с ошибками). С компилятором RTADS идёт библиотека стандартных объектов advr.t, в которой воссоздана система часто используемых объектов и стандартные реакции на большинство действий с ними. Тебе не надо изобретать код для действий "взять", "открыть", "одеть", когда они применяются к стандартным предметам типа "контейнер" или "одежда". Код уже содержится в advr.t. Ты только порождаешь свои объекты от container и clothingItem и изменяешь те свойства, которые должны отличаться от стандартных: описания (ldesc), лексемы (noun, adjective) и какой-то специальный код, который нужен, если ты хочешь, чтобы объект вёл себя особенным образом.
Например, открыв сундук, ты хочешь, чтобы с него упала грязь и осталась на полу:
Chest: ... doOpen (actor) = { dirt.moveInto (self.location); // Переместить грязь в локацию, где находится сам сундук "С крышки сундука съехал слой грязи и остался на полу. "; pass doOpen; // Передать управление стандартному обработчику doOpen } ;
Изучай библиотеку advr.t (объектную модель). Начать лучше с мануала; потом, если ты хорошо разбираешься в программировании, можешь смотреть сам файл advr.t.
P.S. Несмотря на то, что пишет автор платформы, я считаю, что язык TADS рассчитан на людей с опытом программирования C++/Pascal. Не имея опыта программирования вообще, разобраться в нём будет сложновато. В таком случае лучше взять более простую платформу (но и более ограниченную в возможностях).
Отредактировано Gremour (10.01.2009 15:24)
Неактивен
В этом куске кода (объект Chest) очень суровая ошибка.
if(Uniform.location:=Me){"Ты видишь здесь свою униформу.";}
(оператор присвоения := вместо оператора сравнения = ). То же самое в объекте Uniform.
Этот оператор модифицирует положение сундука и униформы в момент их осмотра, не затрагивая списка объектов комнаты. Прямое присвоение свойства location не работает правильно, для перемещения предмета надо использовать метод moveInto(newloc). Впрочем, ты и не собирался перемещать предметы в персонажа.
P.S. У меня есть небольшой опыт программирования на С++ и с основами ООП я знаком.
Это большой плюс. Главное, не сворачивай с намеченного пути.
Также, советую аккуратно форматировать текст:
Chest: container location = startroom ldesc = { "Бла бла бла"; if (condition) { "бла бла... " } else { "не бла"; } } ;
Очень помогает ориентироваться в собственном коде.
Отредактировано Gremour (10.01.2009 19:40)
Неактивен