0

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

假设我们有一堆 16 个积木(塔楼、墙壁、大门)一起形成了一座城堡。玩家可以将积木拖到平面图上的 16 个位置,如果操作正确,他们将看到整个城堡。所有的塔(有四个)都是相等的,所以它们可以在四个角落中的任何一个上。一些墙壁也是如此。

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

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

问题是:玩家可以做的事情太多了。在错误的地方放置一个块,移除一个块,正确地在平面图上放置墙壁或塔,忽略给他们的方向,等等。

如果我可以避免使用数千个 if-then 语句来决定我应该采取下一步、显示错误消息还是根据玩家正在做的事情返回上一步,那就太棒了。

您如何描述构建序列的每个步骤的 NEXT、PREVIOUS 和 ERROR 条件?有什么设计方法吗?非常感谢您的意见。

4

1 回答 1

0

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

我不知道 FSM 是否真的是您所追求的:您希望验证什么样的排序约束?先建塔有关系吗?从您的其余描述来看,听起来上述目标状态描述会更合适。

于 2010-02-18T14:38:11.397 回答