Forum.iFiction.Ru

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

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

Вы не зашли.

0    0    #1
07.01.2009 21:03

IO
Участник
Зарегистрирован: 07.01.2009
Сообщений: 15

Новичок. Несколько вопросв.

1) Каким образом можно "осмотреть себя"?
2) Как всучить глав.герою предмет в начале игры (т.е. чтобы игра начиналась уже с этим предметом в инвентаре)?
2.1) Как вообще что-либо вручать герою?
3) Как на RTADS'е написать что-то вроде

Код:

если (БатареяЗаряжена=ложь, то сказать "эй, заряди батарею!")
иначе
(сказать "батарея уже заряжена")

4) Как в одной локации осуществить следующее:

Код:

взять книгу со стола
-стол слишком далеко
подойти к столу
-ты стоишь возле стола
взять книгу
-ты взял книгу

Или для этого нужно создавать несколько локаций?
5) Как избавиться от

Код:

ты стоишь в северной комнате
ты видишь на столе книгу

хотя в

Код:

someroom:room
ldesc="ты стоишь в северной комнате";

Заранее немерено благодарен.

Неактивен

0    0    #2
08.01.2009 16:28

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новичок. Несколько вопросв.

Код:

взять книгу со стола
-стол слишком далеко
подойти к столу
-ты стоишь возле стола
взять книгу
-ты взял книгу

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

Неактивен

0    0    #3
10.01.2009 14:35

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новичок. Несколько вопросв.

ASBer написал:

Для одежды есть специальный класс clothingItem.
Попробуй сделать

Код:

Uniform: clothingItem

При этом не надо переопределять метод doWear.

Неактивен

0    0    #4
10.01.2009 14:47

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новичок. Несколько вопросв.

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)

Неактивен

0    0    #5
10.01.2009 19:34

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новичок. Несколько вопросв.

В этом куске кода (объект Chest) очень суровая ошибка.

Код:

if(Uniform.location:=Me){"Ты видишь здесь свою униформу.";}

(оператор присвоения := вместо оператора сравнения = ). То же самое в объекте Uniform.

Этот оператор модифицирует положение сундука и униформы в момент их осмотра, не затрагивая списка объектов комнаты. Прямое присвоение свойства location не работает правильно, для перемещения предмета надо использовать метод moveInto(newloc). Впрочем, ты и не собирался перемещать предметы в персонажа. smile

P.S. У меня есть небольшой опыт программирования на С++ и с основами ООП я знаком.

Это большой плюс. Главное, не сворачивай с намеченного пути. smile
Также, советую аккуратно форматировать текст:

Код:

Chest: container
    location = startroom
    ldesc = 
    {
        "Бла бла бла";
        if (condition)
        {
            "бла бла... "
        }
        else
        {
            "не бла";
        }
    }
;

Очень помогает ориентироваться в собственном коде.

Отредактировано Gremour (10.01.2009 19:40)

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru