Unity3D | 智能牧师与魔鬼
P&D 过河游戏智能帮助实现,程序具体要求:
- 实现状态图的自动生成
- 讲解图数据在程序中的表示方法
- 利用算法实现下一步的计算
游戏状态
游戏过程实际上是游戏状态之间的转换,状态记录的内容包括:
public class IState {public int leftPriests;public int leftDevils;public int rightPriests;public int rightDevils;public bool boat;//船在左岸true或右案falsepublic IState parent;//上一个状态
}
-
初始状态
public static IState state = new IState(0, 0, 3, 3, false, null); -
结束状态
public static IState endState = new IState(3, 3, 0, 0, true, null);
状态转换
游戏中我们可以通过点击移动人物和船来改变状态,一个状态向下一个状态的所有动作行为包括:
- 船在左岸
- 单人过河
- 牧师过河
- 魔鬼过河
- 双人过河
- 牧师 + 牧师过河
- 牧师 + 魔鬼过河
- 魔鬼 + 魔鬼过河
- 单人过河
- 船在右岸
- 单人过河
- 牧师过河
- 魔鬼过河
- 双人过河
- 牧师 + 牧师过河
- 牧师 + 魔鬼过河
- 魔鬼 + 魔鬼过河
- 单人过河
思路就是根据当前的状态和当前状态可能的下一个状态,找到能达到终点状态的一条路径。可以用BFS来实现:
-
当前状态进入队列。
-
队列不为空:
-
队头出队。
-
访问状态节点。
- 结束:回溯至开始状态输出
- 没有结束:计算下一个合法状态并压入队列。
-
public static IState bfs(IState start, IState e
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
