项目概述:
- 三个牧师与三个魔鬼要过河,河有两岸,河里有一条船
- 船可以坐两个单位,且至少需要一个单位才能运行
- 如果河的任意一边的牧师的人数比魔鬼少,那么牧师将被吃掉,game over
- 当船靠岸时,它被看成岸的一部分,船上的单位也被看成岸上的单位
我们采用有限状态机(Finite State Machine)来解决这个问题。我们用方块代表牧师,圆球代表魔鬼,两块大平板代表两岸,一块小平板代表船。
有限
状态机
是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件
对于可以被移动的物体(牧师、魔鬼),我们给他创立如下状态: Aside, AsideToBoat, BoatToAside, Bside, BsideToBoat, BoatToBside. 对于船,给他创立如下状态:Aside, Bside, AsideToBside, BsideToAside.
各状态转移图如下。
![](https://i-blog.csdnimg.cn/blog_migrate/c48a2c3fbe77605e98b2675280e4e45a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cc236de9be222b9c1bb3a19b663de16.png)
我们可以看到,带有To的状态是需要运动的状态,其他的状态都是静止的状态,我们可以列出动作表格
命令
|
行为 |
物体上船 | 物体从岸上转移移到船上 |
物体下船 | 物体从船上转移到岸上 |
船开 | 船带着物体开往另外一边 |
基于以上思想我们可以来实现我们的项目