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

@@ -4,11 +4,11 @@
在黑暗中的效果因游戏而异。通常情况下,它使命令 "look "没有效果。在一些游戏中(如 Zork黑暗是致命的。在其他游戏中只要你画出了黑暗区域的详细地图在没有光源的情况下你仍然可以取得进展。
我们的游戏将保持在这两者之间;在黑暗中不会让你被杀,但你也不能进入任何通道(具有光亮的通道将是一个例外)。对我们来说,让玩家跑进一个黑暗的区域,而没有不让他机会回到他来的地方,似乎是不公平的。
我们的游戏将保持在这两者之间;在黑暗中不会让你被杀,但你也不能进入任何通道 (具有光亮的通道将是一个例外)。对我们来说,让玩家跑进一个黑暗的区域,而没有不让他机会回到他来的地方,似乎是不公平的。
好吧,所以首先,我们来设计在黑暗中玩家无法看到周围环境。
# location.c
## location.c
```c
#include <stdbool.h>
@@ -90,7 +90,7 @@ bool executeGo(void)
其次,在黑暗中玩家无法看到或使用附近的物体。
# noun.c
## noun.c
```c
#include <stdbool.h>
@@ -193,7 +193,7 @@ OBJECT *getPossession(OBJECT *from, const char *verb, const char *noun)
在这两种情况下,我们都使用了一个函数 isLit。它在 misc.c 中被定义(并且使用量增多了)。
# misc.h
## misc.h
```c
typedef enum {
@@ -216,7 +216,7 @@ extern OBJECT *actorHere(void);
extern int listObjectsAtLocation(OBJECT *location);
```
# misc.c
## misc.c
```c
#include <stdbool.h>
@@ -318,6 +318,7 @@ int listObjectsAtLocation(OBJECT *location)
}
}
return count;
}
```
注意:
@@ -326,13 +327,14 @@ int listObjectsAtLocation(OBJECT *location)
- isNoticeable 函数相比 isLit 更进一步。它对每个物体都有效,而不仅仅是地点和灯。它还考虑到玩家库存中的物体总是可以被使用,即使是在黑暗中。
- 第 60 行:附近的物体仍然隐藏在黑暗中,被视为'不在这里'。这自然可以防止游戏泄露玩家不应该知道的物体的信息。
思考题:你还能想到那哪些可以改进的地方吗?
::: warning 🤔 思考题:你还能想到那哪些可以改进的地方吗?
:::
我们为实现 isLit 函数的功能从而使用了一个新的属性 light。
# object.awk
## object.awk
```
```awk
BEGIN {
count = 0;
obj = "";
@@ -428,11 +430,11 @@ function outputRecord(separator)
}
```
默认情况下,亮度为零意味着一个物体不发光。在大白天的每一个地点(通常是除了地下的所有地点)都会被赋予一个正(大于 0)的光线值。其实是什么值并不重要,只要它不是零就可以了。我们还将添加一盏灯,玩家可以携带它来穿越黑暗区域。
默认情况下,亮度为零意味着一个物体不发光。在大白天的每一个地点(通常是除了地下的所有地点)都会被赋予一个正 (大于 0) 的光线值。其实是什么值并不重要,只要它不是零就可以了。我们还将添加一盏灯,玩家可以携带它来穿越黑暗区域。
# object.txt
## object.txt
```
```txt
#include <stdbool.h>
#include <stdio.h>
#include "object.h"
@@ -658,7 +660,7 @@ extern OBJECT objs[];
我们将添加一些命令,我们可以用来打开和关闭灯。
# parsexec.c
## parsexec.c
```c
#include <ctype.h>
@@ -733,14 +735,14 @@ bool parseAndExecute(const char *input)
下面是这些命令的实现。
# onoff.h
## onoff.h
```c
extern bool executeTurnOn(void);
extern bool executeTurnOff(void);
```
# onoff.c
## onoff.c
```c
#include <stdbool.h>
@@ -789,7 +791,7 @@ bool executeTurnOff(void)
为了打开和关闭灯,我们将使用我们用来打开和关闭门和盒子的相同技巧(见第 13 章)。
# toggle.h
## toggle.h
```c
extern void cannotBeOpened(void);
@@ -813,7 +815,7 @@ extern void toggleBoxLock(void);
extern void toggleLamp(void);
```
# toggle.c
## toggle.c
```c
#include <stdbool.h>
@@ -895,9 +897,9 @@ void toggleLamp(void)
最后,我们将在我们生成的地图上标记出黑暗的位置。
# map.awk
## map.awk
```c
```awk
BEGIN { print "digraph map {\n\tnode [style=filled]"; }
/^- / { outputEdges(); obj = $2; delete a; }
/^[ \t]/ { a[$1] = $2; }
@@ -929,9 +931,10 @@ function outputNodes()
}
```
思考题:尝试将上面的伪代码用 C 语言实现其功能
::: warning 🤔 思考题:尝试将上面的伪代码用 C 语言实现其功能
:::
玩家们,请注意不要把灯关掉,也不要把它丢掉。如果这样做,那么在黑暗中你将永远无法找回它。换言之,你会被困在黑暗之中! 幸运的是,下一章将提供一个撤销笨拙行动的方法。
玩家们,请注意不要把灯关掉,也不要把它丢掉。如果这样做,那么在黑暗中你将永远无法找回它。换言之,你会被困在黑暗之中幸运的是,下一章将提供一个撤销笨拙行动的方法。
输出样例Welcome to Little Cave Adventure.
You are in an open field.