作业内容:智能巡逻兵
- 游戏设计要求:
- 创建一个地图和若干巡逻兵(使用动画);
- 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
- 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
- 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
- 失去玩家目标后,继续巡逻;
- 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
- 程序设计要求
- 必须使用订阅与发布模式传消息
- 工厂模式生产巡逻兵
- 友善提示1:生成 3~5个边的凸多边型
- 随机生成矩形
- 在矩形每个边上随机找点,可得到 3 - 4 的凸多边型
- 友善提示2:参考以前博客,给出自己新玩法
作业设计
MVC架构图
由于新增了订阅与发布模式,所以MVC架构图参考了以往博客的UML图。
具体设计
1.PatrolFactory
(1)工厂模式生成巡逻兵。一共有9个巡逻兵,活动范围固定,并且用列表记录。
(2)当游戏结束的时候,所有的巡逻兵都会停止动作。
(3)巡逻兵的状态有Idle、Walk、Exit这几个。
2.CameraFlow
相机跟随玩家移动。
3.发布与订阅模式
由FirstSceneController控制游戏的开始和结束。当Actor触发了某些游戏规则,就可以发布相应的信息,然后通过信息的参数,订阅者就会做出相应的动作。除了巡逻兵是订阅者,SceneController也是订阅者,因为需要处理加分的事项。
事件控制管理:当玩家避开追踪和碰撞到巡逻兵时分别触发加分和游戏结束事件。
4.玩家和巡逻兵
(1)巡逻兵的数据
包括巡逻兵的区域编号、是否跟随玩家、初始位置等等。
(2)巡逻兵追击玩家
当玩家进入巡逻兵的活动范围时,巡逻兵会主动追击玩家;如果玩家离开追击范围后,巡逻兵不再攻击。
(3)巡逻兵的动作管理
根据事件的触发,实现各个动作的切换。
5.游戏规则和界面
一共有9个巡逻兵,在屏幕显示分数和操作规则“按WSAD键或方向键控制移动”。玩家成功躲避一个巡逻兵加1分,累计10分即游戏胜利,失败则可重新开始游戏。
源代码和游戏视频
见我的Github
参考博客
https://blog.csdn.net/C486C/article/details/80153548