编写多路径"故事"流的正确方法是什么?

Bas*_*sic 1 .net workflow design-patterns design-decisions

我想知道你是否可以帮助我.

我正在写一个游戏(2d),允许玩家采取多条路线,其中一些分支/合并 - 甚至可能是循环.游戏的每个部分将决定下一个加载的部分.

我将每个部分称为IStoryElement - 我想知道如何最好地以易于更改/配置的方式链接这些元素,同时,可以使用

我将有一个引擎/工厂程序集,它将StoryElement根据各种配置选项加载适当的程序.

我最初计划给每个人StoryElement一个NextElement() As IStoryElement财产和一个Completed()事件.当通风口触发时,引擎读取NextElement属性以查找下一个StoryElement.

这样做的缺点是,如果我想要通过游戏绘制所有路线图,我将无法 - 我无法确定每个路线的所有可能目标StoryElement.

我考虑了其他一些解决方案,但他们都觉得有点笨重 - 例如,我是否需要额外的抽象层?即StoryElementPlayers或类似的 - 每个人都负责将多个StoryElement系列和一个ChoicePlayer 串联在一起,每个人负责绘制自己的图形StoryElement- 但这只会将问题向上移动一层.

简而言之,我需要某种方式来模拟一个简单但动态的工作流程(但我不想实际使用WWF).有这样简单的模式吗?我设法找到的所有内容都涉及更高级的控制流程(并行处理等)

ted*_*4rd 5

StoryElement对象视为有向图中的节点可能会有所帮助.图形的边缘可以由StoryElementTransition对象(或一些类似的名称)表示.A StoryElementTransition可以包含对要转换的状态的引用,要转换到的状态,以及触发转换的事件.

通过将您的故事设置为图形,您可以开启运行有向图遍历算法的可能性,以确定游戏中的所有可能路线.例如,您可以在事件图上运行深度优先搜索算法,在堆栈上推送每个状态和转换,并在达到最终状态时打印整个堆栈.