在冒险游戏中避免不可能的状态


15

我正在考虑创建一种相当复杂的自选冒险风格的游戏,但是我正在寻找一种技术或方法来帮助游戏设计。

这将是一个多分支的故事,有时分支会重新折叠起来,您的主要动作会被记住,物品也会被收集。例如,如果玩家在去城堡之前去了沼泽和森林,那么他已经拾起了恐龙骨骼,杀死了独角兽并长出了多余的手臂。如果玩家通过洞穴和地穴到达城堡,他会捡起自行车,闻起来很奇怪。现在,当为城堡开发拼图时,我不想创建一种情况,其中需要两个可能性,例如-需要一个额外的手臂和气味来杀死一个食人魔。

除了非常仔细地记录事件和项目外,还有没有一种过程,可以在电子表格中使用的技术或可以帮助我的软件?

Answers:


11

听起来有点像有向图问题。

从头开始,为故事中的每个分支记录您当前拥有的项目,然后分支该图。从那里开始,跟随每个分支并执行相同的操作,一旦到达另一个分支,请记录当前项目并分支该图。最终将得到一个非常密集的图形,其中包含许多重复的节点(但是每个节点都是通过不同的图形序列到达的),但是您应该没有循环。

最后,您应该有一个图表,其中列出了故事中任何给定时间点可以拥有的所有物品,以及通过各种可能的方式到达该物品的图表。

现在,使用完成的图形:对于需要项目X + Y + Z的每个问题,找到所有存在该问题的节点,然后查看记录的项目是否可以满足该条件。如果发生故障,只需往回走图即可找到所有使您到达那里的决策,而没有解决该问题的适当方法。

运气好的话,至少从概念上来说,您的原始设计已经这样布局,因此代码应反映现实并易于验证。

如果您要构建大型游戏,则图形搜索的处理时间可能会有些繁重,因此,像构建一个实用程序那样构建它可能会花费一些时间,并将结果输出到报告中供您使用。


这意味着要开发工具。我让那是不得已的方法。
Ali1S232 2011年

6
该工具将是您自己的大脑,记录保存和内存容量,或者将是自动化的东西,不会累并且不会出现故障=)我想这取决于您的游戏规模以及您是否会曾经用同一台引擎制造另一台,以决定花费的时间是否值得。
Patrick Hughes

做到这一点的最佳方法可能是从上至下(向后)构建一个依赖关系树,如果树中的两个项目共享相同的依赖关系(并且依赖关系需要在它们之间进行选择),那么您就违反了。
deceleratedcaviar

0

这似乎是一个奇怪的答案,但是您可以使用编译器(例如c ++)轻松检查不可能的事件!让我解释一下:每个阶段只有一个头文件。游戏结束main.cpp。每当你可以去stage astage b,你只需要包含文件涉及到stage astage b。只要您在阶段中获得新商品,就只需为该商品定义一个值。每当您丢失或使用某件物品时,只需取消定义即可。在每个阶段的最后,您只需要为该阶段所需的项目使用所有定义的值。这是一个示例如何在代码中使用它:

#define itemA

h

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

尽管在实际使用之前可能需要进行一些更改,但是我想您可以创建一些这样的代码。您还可以在每个阶段使用继承和使用类,而不是我建议的方法。除了这些,我认为您必须自己开发工具。


2
这是对编译器的真正滥用!
Ali1S232 2011年

3
这很有趣,但是会很脆弱,并且只有在我的故事中每个对象/事件/部分都有一个类的情况下,它才有效。我想要更多的数据驱动方法,从xml或其他内容读取。谢谢您的建议。
DanDan 2011年

3
每次任务更改时都强制重新编译不是一个好主意,此外,这也不允许对最终用户(例如DLC)进行数据更新,或者不允许从服务器运行并应用修补程序而不强制下载。
Patrick Hughes

2
该代码示例与将要发布的代码无关,并且该代码实际上没有任何作用。只是检查您的故事情节和任务是否有效。(如果不是,那么您只会得到一个编译错误,否则您可以在游戏中实现该任务树!
Ali1S232 2011年

哦,我明白了,我误解了。我怀疑一个人可能花更多的时间来确保该代码反映实际数据,而不是节省调试任务逻辑错误所要保存的时间,这是游戏作者必须做出的判断。
Patrick Hughes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.