如何设计这种特殊的有限状态机?

时间:2010-02-18 14:25:08

标签: conditional-statements state-machine fsm

我试图了解如何设计以下系统,我认为可以将其定义为有限状态机:

假设我们有一堆16个积木(塔,墙,门)在一起形成一座城堡。玩家可以将积木拖到平面图上的16个位置,如果完成,他们将看到整个城堡。所有塔(其中有四个)都是相同的,所以它们可以在四个角中的任何一个上进行。一些墙壁也是如此。

总而言之,在平面图上有16个点可以放置一个积木,每个点都可以有17个“状态”:空+ + 16个构建块中的任何一个。做一些数学运算会导致17 ^ 16 =很多组合。

程序以空的平面图和一堆积木开始。然后应该显示一条消息,例如“建造自己的城堡,从塔楼开始”。当用户正确放置塔时,它应该说“做得好,现在建造所有四个塔”。你明白了。

问题是:玩家可以做很多事情。将一个街区放在错误的地方,拆除一个街区,正确地将墙壁或塔楼放在平面图上,忽略给他们的指示等等。

如果我可以避免必须使用数以千计的if-then语句来决定是否应该采取下一步,显示错误消息或根据玩家正在做的事情返回上一步,那将是非常棒的。 / p>

您如何描述建筑序列的每一步的NEXT,PREVIOUS和ERROR条件?这有什么设计方法吗?非常感谢您的投入。

1 个答案:

答案 0 :(得分:0)

尝试以声明方式执行此操作。定义描述块类型的枚举(或可能是类)。定义并构造一个4x4 2D数组,描述每个位置中允许的块类型集(将集合实现为列表,位域,最适合您的方式)。每当玩家尝试将一个块放置在一个位置时,检查它是否允许对抗2D阵列。如果您想要正确填写位置的特定消息,请将它们放在同一个数组中。

我不知道FSM是否真的如此:您想要验证哪种排序限制?是否先建造塔是否重要?从您的其他描述中,听起来上述目标状态描述会更合适。