这里有一个代码片段,显示了我当前源代码中的内容:
A morph is a kind of thing.
A morph has some text called animal name.
A serum is a kind of thing.
Revelation relates one serum to one morph. The verb to reveal (he reveals, he revealed, it
is revealed, he is revealing) implies the revelation relation.
在我的游戏中,我想喝一种血清,让玩家变成一种特定的动物。该动物的名称存储为一个名为"动物名称"的文本属性。我想在血清本身的情况下引用这个名字,所以我添加了变形和血清对象之间的关系。
然后我添加这个规则:
Instead of drinking a serum:
say "You can now become a [animal name of
morph revealed by noun].";
now the morph revealed by the noun is held by the player;
我在这里所做的是打印这条消息,然后将相关变形移动到玩家的库存中。我这样做是出于其他原因,但我需要这样做。
例如,给定以下断言:
Felis morph is a morph. Cat serum is a serum.
Cat serum reveals felis morph.
The animal name of felis morph is "cat".
我希望喝下猫血清后能印上"你现在可以变成一只猫了",并将猫的形态放入玩家的库存中。
不过我有两个错误,我不知道该怎么解决。
1) 在"说"你现在可以成为一个[由名词揭示的变形的动物名称]。"这句话中,看起来好像你打算让"由名词揭示变形的动物名字"成为一种财产,但"变形"对主人是谁或什么还不够具体。
2) 你写道"现在名词所显示的变形由玩家持有":但这还不够明确,应该列出特定事物之间的明确关系,比如"现在猫在袋子里",而不是"现在猫由女人抱着"这样更难以捉摸的东西(哪个女人?这就是问题所在。)
我添加的规则似乎不起作用。它围绕着[由名词揭示的变形的动物名称]部分和"由名词展示的变形"部分。不过,这些听起来完全合理。名词所揭示的变形动物名称应该是一个可说的陈述。名词所揭示的形态应该是完全特定的——毕竟,我指定了揭示将一种血清与一种形态联系起来。
出了什么问题?或者更确切地说,我如何获得显示的变形的动物名称作为文本替换,以及我如何改变血清显示的变形状态
这里的问题是,当您编写像the morph revealed by noun
这样的短语时,通过关系访问对象,Inform假设多个对象可以具有此属性,即使这实际上是不可能的(例如,在这种情况下,揭示关系是一对一的)。
这里的解决方案是使用确定器a random
从列表中实际选择一个项目。这个确定器将从它作用的列表中选择一个随机对象,但由于这里的两个列表都只能包含一个对象,所以每次都会得到相同的对象。下面是一个工作示例:
Instead of drinking a serum:
say "You can now become a [animal name of a random morph revealed by noun].";
now a random morph revealed by the noun is held by the player;
您也可以使用确定器every
,但由于它还为您提供了一个列表,因此它不适用于所有应用程序(上例中的第二条语句有效,但第一条语句无效)。