如何读取Inform 7中的输入行?

时间:2012-10-12 16:32:01

标签: inform7

我只想提示用户在操作过程中输入一行文字。效果应该是这样的:

> north

The robot steps in front of you as you approach the gate.
"PAASSWAAAAWRD!!" it bellows.

Enter the password: _

此时游戏应暂停并让玩家尝试猜测密码。例如,假设我猜“fribble”,这不是密码:

Enter the password: fribble

"WRONG PASSWAAARD!" roars the robot. "CHECK CAPS LAAAWWWWK!"

>

我想要的行为类似于if the player consents,但我想要整行输入,而不仅仅是是或否。

3 个答案:

答案 0 :(得分:11)

Inform没有提供简单的方法,但你可以通过删除Inform 6来获得键盘原语。

然而,有可能达到预期的效果:

The Loading Zone is a room. "Concrete with yellow stripes. The Hold is north."
The robot is an animal in the Loading Zone. "However, a robot the size of an Arcturan megaladon guards the way."

North of the Loading Zone is the Hold.

Instead of going north from the Loading Zone:
    say "The robot steps in front of you as you approach the gate. 'PAASSWAAAAWRD!!' it bellows.";
    now the command prompt is "Enter password: ".

After reading a command when the command prompt is "Enter password: ":
    if the player's command matches "xyzzy":
        say "The robot folds itself up into a cube to let you pass.";
        move the player to the Hold;
    otherwise:
        say "'WRONG PASSWAAARD!' roars the robot. 'CHECK CAPS LAAAWWWWK!'";
    now the command prompt is ">";
    reject the player's command.

我认为这种事情被认为是糟糕的游戏玩法:它会迫使玩家猜测,这会损害玩家的控制和选择错觉。更传统的方式是要求玩家密码:

The Loading Zone is a room. "Concrete with yellow stripes. The Hold is north."
The robot is an animal in the Loading Zone. The robot is either awake or asleep. The robot is awake. "[if awake]However, a robot the size of an Arcturan megaladon guards the way.[otherwise]A cube of metal the size of an Arctural megaladon snores loudly.[end if]".
North of the Loading Zone is the Hold.

Instead of going north from the Loading Zone when the robot is awake:
    say "The robot steps in front of you as you approach the gate. 'PAASSWAAAAWRD!!' it bellows."

Instead of answering the robot that some text:
    if the topic understood matches "xyzzy":
        say "The robot folds itself up into a cube to let you pass.";
        now the robot is asleep;
    otherwise:
        say "'WRONG PASSWAAARD!' roars the robot. 'CHECK CAPS LAAAWWWWK!'"

命令说xyzzy 回答xyzzy 机器人,xyzzy 说xyzzy到机器人将全部工作

答案 1 :(得分:3)

Michael Callaghan的扩展问题将有助于此。请注意,您可能无法可靠地测试输入大小。

答案 2 :(得分:0)

像这样拖放到I6在Inform 7.9.3中起作用。这可能是个坏主意。

Section 1 - Line input

Include (- Global user_input = 100; -) after "Parser.i6t".

The user input is a snippet that varies. The user input variable translates into I6 as "user_input".

To get a line of input: (-
    KeyboardPrimitive(buffer, parse);
    user_input = 100 + WordCount();
-).

然后,您可以使用短语“获取输入行”来读取一行,而短语“用户的输入”给出他们输入的行。 (片段是一种 text 。)

示例如下:

Section 2 - Example

The Loading Zone is a room. "Concrete with yellow stripes. The Hold is north."

The robot is an animal in the Loading Zone. "However, a robot the size of an Arcturan megaladon guards the way."

North of the Loading Zone is the Hold.

Instead of going north from the Loading Zone:
    say "The robot steps in front of you as you approach the gate. 'PAASSWAAAAWRD!!' it bellows.[paragraph break]";
    say "Enter password: ";
    get a line of input;
    if the user input matches "xyzzy":
        say "The robot folds itself up into a cube to let you pass.";
        move the player to the Hold;
    otherwise:
        say "'WRONG PASSWAAARD!' roars the robot. 'CHECK CAPS LAAAWWWWK!'".

Test me with "n / password / n / xyzzy".