many, many chore
This commit is contained in:
FallenYing
2023-07-28 09:30:17 +08:00
parent b043fd1d05
commit f501a6b993
33 changed files with 453 additions and 453 deletions

View File

@@ -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 来实现?
:::
输出样例