ZMonster's Blog 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟

使用Inform7创作互动式小说:世界的雏形

如果对Inform7是什么还有疑问,请看我的前一篇文章: 使用Inform创作交互式小说

概念说明

在Inform7中,关于"世界",也就是故事所发生的"地方",存在两个比较重要的相关的对象。一个是区域(reqion),另一个是场地(room).

对于"场地",Inform7为何用'room'这样一个词表示,我是不知道啦,一开始还比较疑惑呢,以为它就是表示一个"房间",后来随着逐渐的学习,才发现它要表示的应该是"场地"才对——之前考虑过使用"场景"这个词,后来发现在Inform7中,还有专门表示"场景"的对象,除了地点外,一个场景还包含了某个开始和结束时刻,所以这里用"场景"来表示'room'是不合适的。

以下是相关的一些概念:

  • 场地(room)

    表示 具体 的某个可见的地点,是 主角 移动时的最小单位。

  • 描述(description)

    对场地、区域以及物品的描述,用英文双引号("")括起来,作为对这些对象的描述,会在游戏进行时作为展示给玩家的信息。

  • 场地连接(connection)

    通过类似"A的东方是B"这样的语句可以创建A和B之间的连接,产生一条联通A和B的路径。通过这些连接,可以将众多的"场地"连接起来,构成一个完整的"世界"。孤立的、无法到达的场地是毫无意义的。

  • 区域(region)

    区域通常是 若干个场地的集合 ,通过将一些场地聚合在一起,可以在之上定义普适于这些场景的一些规则。

下面就通过实际的例子来讲解这些概念的实际使用吧。

开始前的设定

首先,就以我的学校华中科技大学作为参考来进行世界的设定吧。简单起见,就使用沁苑、西十二教学楼以及其中一个教室N206这三个地点作为具体的场地吧。

创建场地

首先,创建"沁苑"这个场地吧:

Qinyuan is a room. "Qinyuan is a quiet place. Students of the Faculty of Computer Science and Technology live here. There is a east-west direction road called Bauhinia Road. Go along this road and you'll arrive at The West Twelfth Teaching Building."

后面用双引号括起的就是场地的描述。

需要注意的是,在Inform7中,一个完整的语句最好都以表结束的标点结束,如句号(.)、问号(?)或感叹号(!),像这样定义场地或其他事物时,是以句号结尾的。

创建场地除了明确地用'is a room'声明,还可以通过下面这样的方式隐性地创建:

The West Twelfth Teaching Building is west of Qinyuan. "There is a statue of Lao tze in front of The West Twelfth Teaching Building. A arrow on the ground says 'Go N206'."

在创建场景时,可以用的表示方向的词有: north, south, west, east, northeast, northwest, southeast, southwest, above, below, inside, outside.

比如说,教室N206是在西十二教学楼内部,就需要使用inside:

Classroom N206 is a room. "Classroom N206 is a normal classroom, it can hold 100 students."

Inside from The West Twelfth Teaching Building is Classroom N206.

在这里,'from'这个词很重要,它表示这个语句是将两个场地连接起来,而不是在一个场地内创建一个物品。

双向连接与单向连接

在刚才,我们创建了一个连接,在'Qinyuan'和'The West Twelfth Teaching Building'之间产生了一条路径。对于这条语句:

The West Twelfth Teaching Building is west of Qinyuan.

Inform7会确切地知道在'Qinyuan'这个场地中,向西可以到达'The West Twelfth Teaching Building',同时会推测,认为'The West Twelfth Teaching Building'向东可以到达'Qinyuan'。

如果要创建一条单向连接,如让'The West Twelfth Teaching Building'不能到达'Qinyuan',可以这样设置:

East of The West Twelfth Teaching Building is nowhere.

创建区域

区域的创建和场地的创建差不多:

The Huazhong University of Science and Technology is a region. Qinyuan, the West Twelfth Teaching building, Classroom N206 are in a region called the Huazhong University of Science and Technology.

区域允许嵌套,但前提是被包含的区域必须被完全包含,即它不能有包含它的区域所没有的"场地"。

名字缩写

像这两个名字都太长了,不方便输入:

The West Twelfth Teaching Building

The Huazhong University of Science and Technology

虽然在IF中可以简单地使用表示方向的词来进行移动,但使用'go'命令并跟随具体的场地名也是一种移动方式,应该考虑到这个,而在Inform7中,像'go'这样带参数的命令,只会解析其参数中的前9个字符,像上面这两个名字显然有点太长。

通过'understand'命令可以指定缩写:

Understand "HUST" as  The Huazhong University of Science and Technology. Understand "C12" as the West Twelfth Teaching Building.

一图胜千言

上图:

源文本:

i7-eg-source.png

实际运行:

i7-eg-run.gif

讲的比较简单,实际上各个环节都还有大量的细节,我也还在学习中。