Нужна помощь в создании новых объектов в inform7 - PullRequest
9 голосов
/ 22 марта 2011

Очень плохо знаком с Inform7 и его стилем. Я просмотрел предоставленные документы, и некоторые просмотры в интернете ничего не дали мне ... это упрощенная версия того, что я ищу. Я хочу написать что-то вроде этого:

breakroom is a room. "A run of the mill breakroom."

soda pop is a kind of thing. "A refreshing soda pop."

soda machine is in the breakroom.  dispense button is on the soda machine.

instead of pushing dispense button:
    say "A soda can dispenses".
    create a soda pop (called pop) in the breakroom.

"создать газировку в зале отдыха". очевидно, это не действительная команда, но я надеюсь, что она передает то, что я хочу сделать. Я не знаю, как создавать экземпляры объектов во время выполнения. Можно ли это сделать разумно? Любая помощь будет оценена. Я знаю, что здесь нет большого числа поклонников Inform, но я думаю, я бы попробовал.

Ответы [ 2 ]

8 голосов
/ 25 марта 2011

Inform не очень хорошо обрабатывает динамические объекты, но в любом случае они часто не лучший подход.Раздел 10.3.Диспенсеры и расходные материалы для мелких предметов в руководстве может быть полезным.

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

Breakroom is a room. "A run of the mill breakroom."

A soda pop is a kind of thing.  The description is "A refreshing soda pop."

The soda machine is in the breakroom.  It is fixed in place and transparent.
The description is "Just an average soda machine, with a large dispense
button."

There are three soda pops in the soda machine.

The dispense button is a part of the soda machine.

Instead of pushing the dispense button:
        if a soda pop (called the can) is in the soda machine:
                move the can to the breakroom;
                say "A soda can dispenses.";
        otherwise:
                say "The machine is empty, so nothing happens.".

Test me with "look / x machine / push button / look / push button /
push button / push button / look".

(сделайте машину opaque вместо transparent, если хотите!).Выше я также подправил описание газировки - если вы просто скажете "Blah" вместо The description is "Blah" после определения объекта, вы задаете начальное описание (выводится как часть описания комнаты), а не«исследовать» описание, которое, я думаю, вам не нужно, - и я сделал кнопку «частью» машины, а не отдельным объектом.

Результат:

Welcome
An Interactive Fiction
Release 1 / Serial number 110324 / Inform 7 build 6G60 (I6/v6.32 lib 6/12N) SD

Breakroom
A run of the mill breakroom.

You can see a soda machine (in which are three soda pops) here.

>test me
(Testing.)

>[1] look
Breakroom
A run of the mill breakroom.

You can see a soda machine (in which are three soda pops) here.

>[2] x machine
Just an average soda machine, with a large dispense button.

In the soda machine are three soda pops.

>[3] push button
A soda can dispenses.

>[4] look
Breakroom
A run of the mill breakroom.

You can see a soda pop and a soda machine (in which are two soda pops) here.

>[5] push button
A soda can dispenses.

>[6] push button
A soda can dispenses.

>[7] push button
The machine is empty, so nothing happens.

>[8] look
Breakroom
A run of the mill breakroom.

You can see three soda pops and a soda machine (empty) here.

>
6 голосов
/ 15 апреля 2011

Я написал расширение для такого рода вещей: http://inform7.com/extensions/Jesse%20McGrew/Dynamic%20Objects/index.html

Чтобы использовать его, вам нужно создать объект-прототип (скажем, "оригинальная газировка"), а затем использоватьвыражение a new object cloned from the original soda pop для создания экземпляра нового объекта.Это более эффективно с точки зрения памяти, чем создание большого статического пула объектов, но оно не работает на Z-машине (только Glulx) и имеет некоторые оговорки, если ваши объекты сложные.

Кроме того, серьезно подумайтео том, действительно ли вам нужно создание динамического объекта.Для игроков может быть проще и менее запутанно, если вы просто придумаете разумную причину отказаться от действия, например: «Вы не можете заставить себя тратить деньги, даже если вы еще не закончили последнюю купленную соду».Наличие нескольких тысяч банок содовой, скорее всего, замедлит игру, но не принесет много пользы.

...