forked from moyin/fzu-product
update
many, many chore
This commit is contained in:
@@ -7,12 +7,12 @@
|
||||
让我们举一个简单的例子。为了越过守卫进入山洞,玩家必须杀死或贿赂守卫(或两者兼而有之,这很有价值)。换句话说:
|
||||
|
||||
- 当警卫死亡时(HP=0),入口开放
|
||||
- 当警卫拿着银币(贿赂警卫)时,入口开放
|
||||
- 当警卫拿着银币 (贿赂警卫) 时,入口开放
|
||||
- 两者都不是,入口关闭
|
||||
|
||||
打开一个封闭的通道(在这里是进入洞穴)涉及到改变一些属性值:
|
||||
|
||||
- 目的地从 NULL(空地点)变为洞穴
|
||||
- 目的地从 NULL(空地点) 变为洞穴
|
||||
- <strong>textGo</strong>从 "警卫阻止你...... "改为 "你走进山洞"
|
||||
- 在一些特殊情况下,描述和细节不需要改变。但对于一个门洞或栅栏,其中之一(或两者)通常会包含一些从 "开放 "到 "关闭 "的文字。
|
||||
|
||||
@@ -36,7 +36,8 @@ bool intoCaveIsClosed(void)
|
||||
}
|
||||
```
|
||||
|
||||
思考题:你能仿照上面例子自己写一些条件函数吗?
|
||||
::: warning 🤔 思考题:你能仿照上面例子自己写一些条件函数吗?
|
||||
:::
|
||||
|
||||
新的属性条件是一个指向这样一个函数的指针。
|
||||
|
||||
@@ -46,9 +47,9 @@ bool (*condition)(void);
|
||||
|
||||
接下来,我们可以立即开始为 object.txt 中的新属性分配函数。
|
||||
|
||||
# object.txt
|
||||
## object.txt
|
||||
|
||||
```
|
||||
```txt
|
||||
- intoCave
|
||||
condition intoCaveIsOpen
|
||||
description "a cave entrance to the east"
|
||||
@@ -68,11 +69,12 @@ bool (*condition)(void);
|
||||
textGo "The guard stops you from walking into the cave.\n"
|
||||
```
|
||||
|
||||
思考题:尝试自己实现上面的伪代码
|
||||
::: warning 🤔 思考题:尝试自己实现上面的伪代码
|
||||
:::
|
||||
|
||||
这两个 "条件 "函数是如此具体,每一个条件函数都只用这一次。现在,我们可以在我们需要的地方定义这些函数。许多编程语言都支持匿名函数,像这样:
|
||||
|
||||
```
|
||||
```txt
|
||||
- intoCave
|
||||
condition { return guard->health == 0 || silver->location == guard; }
|
||||
...
|
||||
@@ -84,9 +86,9 @@ bool (*condition)(void);
|
||||
|
||||
所以现在我们可以把额外的段落和条件添加到 object.txt 中,就像前面解释的那样。
|
||||
|
||||
# object.txt
|
||||
## new object.txt
|
||||
|
||||
```
|
||||
```txt
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include "object.h"
|
||||
@@ -193,11 +195,12 @@ extern OBJECT objs[];
|
||||
textGo "Solid rock is blocking the way."
|
||||
```
|
||||
|
||||
思考题:尝试自己实现这些功能,并看看与你之前设计的有何不同
|
||||
::: warning 🤔 思考题:尝试自己实现这些功能,并看看与你之前设计的有何不同
|
||||
:::
|
||||
|
||||
为了使这些条件发挥作用,我们需要调整函数 isHolding 和 getDistance。
|
||||
|
||||
# misc.c
|
||||
## misc.c
|
||||
|
||||
```c
|
||||
#include <stdbool.h>
|
||||
@@ -273,7 +276,8 @@ int listObjectsAtLocation(OBJECT *location)
|
||||
}
|
||||
```
|
||||
|
||||
思考题:想想我们调整了什么
|
||||
::: warning 🤔 思考题:想想我们调整了什么
|
||||
:::
|
||||
|
||||
注意:
|
||||
|
||||
@@ -282,7 +286,8 @@ int listObjectsAtLocation(OBJECT *location)
|
||||
3. 为了简单起见,条件函数没有参数。实际上,传递一个参数 OBJECT *obj 可能更好;这使得编写更多的通用条件函数成为可能,可以在多个对象中重复使用。
|
||||
4. 在理论上,任何对象都可以成为 "条件"。在下一章,你可以看到一个类似的技术被应用于此。
|
||||
|
||||
思考题:想一想上面第二点要怎么用 C 来实现?
|
||||
::: warning 🤔 思考题:想一想上面第二点要怎么用 C 来实现?
|
||||
:::
|
||||
|
||||
输出样例
|
||||
|
||||
|
||||
Reference in New Issue
Block a user