如何最好地将基于回合的棋盘游戏建模为Java中的状态机?

如何最好地将基于回合的棋盘游戏建模为Java中的状态机?,java,state-machine,Java,State Machine,我承认,我有一个家庭作业要做程序a(我们称之为MEDN)。我可以用一种简单而愚蠢的方式来做,只要有nextPlayerTurn,winner,等等,但我真的很喜欢尽可能好地编程。然而,我一直未能想出如何实现这样一个状态机,以便它易于使用来反映我的棋盘游戏逻辑 假设玩家可以掷骰子,如果掷6,可以再掷一次骰子,然后根据棋盘上的特定条件,使用4位数中的一个进行移动 到目前为止,我的问题是: 我可以很容易地为电路板建模,但它是机器的哪个元件?它是输入的一部分,还是状态?我是要将新的电路板作为输出输出,

我承认,我有一个家庭作业要做程序a(我们称之为MEDN)。我可以用一种简单而愚蠢的方式来做,只要有
nextPlayerTurn
winner
,等等,但我真的很喜欢尽可能好地编程。然而,我一直未能想出如何实现这样一个状态机,以便它易于使用来反映我的棋盘游戏逻辑

假设玩家可以掷骰子,如果掷6,可以再掷一次骰子,然后根据棋盘上的特定条件,使用4位数中的一个进行移动

到目前为止,我的问题是:

  • 我可以很容易地为电路板建模,但它是机器的哪个元件?它是输入的一部分,还是状态?我是要将新的电路板作为输出输出,还是要修改当前的电路板(这对我来说是不干净的)。我必须能够确定一个球员可以做出的所有可能的动作,所以也许第一个解决方案更好
  • 每个玩家都会重复相同的过程(翻滚,可能重新翻滚,移动)。如果我在纸上制作一个状态机,我会制作3*4个状态,每一行代表一个玩家,每一列代表这个过程中的一个步骤。在Java中肯定有一些非常好的方法可以做到这一点,我很高兴看到。除此之外,还必须对获胜者进行编码

我没能想出一个好看的解决办法。

首先,我要说的是,不要试图代表游戏可能处于的每一个状态。给定一个起始状态,您可以根据玩家的移动计算下一个状态。没有必要把每一种可能性都想出来。(创建AI玩棋盘游戏时,通常让AI计算接下来几个可能的棋盘状态,并根据这些状态选择移动,而不是计算每个可能的棋盘状态,因为这通常是不切实际的)。通常,状态机中的状态将代表董事会的状态。玩家的移动将改变机器的状态,终止状态将是一个获胜的配置

尽管如此,我不认为状态机是解决这个问题的最好方法。“愚蠢的简单方式”实际上是用非常简单的逻辑编写游戏的最优雅、最干净的方式。这并不奇怪,但试图想出一个聪明的解决方案可能会使一个简单的问题过于复杂