3D游戏编程与设计作业七

智能巡逻兵

  • 游戏设计要求:
    1. 创建一个地图和若干巡逻兵(使用动画);
    2. 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置为原点计算;
    3. 巡逻兵碰撞到障碍物,则会自动选下一个点为目标;
    4. 巡逻兵在设定范围内感知到玩家,会自动追击玩家;
      失去玩家目标后,继续巡逻;
    5. 计分:玩家每次甩掉一个巡逻兵计一分,与巡逻兵碰撞游戏结束;
  • 程序设计要求:
    1. 必须使用订阅与发布模式传消息
    2. 工厂模式生产巡逻兵

实践内容

  • 订阅与发布模式
    3D游戏编程与设计作业七
    在订阅与发布模式,消息的发送方,叫做发布者(publishers),消息不会直接发送给特定的接收者(订阅者)。发布者和订阅者之间多了一个发布通道;一方面从发布者接收事件,另一方面向订阅者发布事件;订阅者需要从事件通道订阅事件,以此避免发布者和订阅者之间产生依赖关系。
    在本次作业中,使用玩家作为消息发布方,将自己的相关信息(如:生存状态,位置,所在区域)发送给订阅者,订阅者根据自己的需求,从所有信息中得到自己想要的部分(如:场景控制器判断游戏是否结束,巡逻兵判断是否在自己所在区域,是否追击),并根据信息做下一步动作。
    游戏设计过程中,发布对象为玩家,发布信息有:存活状态,位置,所在区域。订阅者有巡逻兵:根据玩家所在区域判断是否追击、根据玩家状态判断是否追击、根据玩家位置判断追击方向;场景控制器:根据玩家状态判断游戏是否结束;记分员:根据玩家所在区域判断是否得分。
  • 工厂模式
    与上次作业鼠标打飞碟小游戏的飞碟工厂类似,这里就不再做过多解释了。
  • UML图 3D游戏编程与设计作业七
  • 游戏预制
    本次作业包括三种预制:玩家、巡逻兵以及地形,其中3D模型基本是直接借用或者间接组装的。
    Hero
    3D游戏编程与设计作业七
    Patrol
    3D游戏编程与设计作业七
    SceneModel
    3D游戏编程与设计作业七
  • 代码实现
    场景管理和动作管理的实现在前几次作业中已做过详细解释,所以在这里我将着重解释说明三个控制器代码的实现——玩家控制器HeroController、巡逻兵控制器PatrolController、摄像头控制器CameraFlow。
  1. 玩家控制器HeroController
    3D游戏编程与设计作业七
    需要注意,这里的scoreKeep是发布者,然后功能实现就是用wsad来控制玩家的上下左右。
  2. 巡逻兵控制器PatrolController
    3D游戏编程与设计作业七
    这里主要实现两个功能:一是巡逻兵碰到障碍物改变方向,感知玩家并追击玩家;二是追捕到玩家判定游戏结束。
  3. 摄像头控制器CameraFlow
    3D游戏编程与设计作业七
    这里主要是通过调整相机的距离和角度来增加玩家游戏的视觉感官体验。

演示视频
代码传送门