动画基础与观察者模式的应用——智能巡逻兵游戏

文章目录

 

写在前面

游戏规则与要求

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

以上只是老师课程网站的基本要求,可是仅仅把躲避巡逻兵作为目标来获取高分未免太过单调了,所以我还添加了一点胜利的条件:

  1. 地图共分为9个单元(9宫格形式),玩家所在的初始格子为安全区,对角线上的格子为目标区。达到目标区为胜利。
  2. 目标区开始的时候封闭,只有触发条件才能开启缺口:
    条件就是需要获取场景内的3个红球,获取方式是触碰加鼠标点击。

游戏实现

订阅发布模式

首先是课上讲到的订阅发布模式(观察者模式)的应用:
在这里插入图片描述
首先是需要定义一个信息发布者,也就是类似于现在的公众号、报刊中心等等。
我的理解是它只是作为一个平台去发布消息,但是真正消息的拥有者或者说触发者是别的类。一旦消息被触发,他就会发出一个通知,所有订阅了消息的人都会收到通知,然后去执行相应的动作。
所以说这个发布者可以看作是一个被动的角色,所有需要发布消息的类都通过发布者来实现。举个例子,某粉丝关注了微博大V,相当于订阅了该事件,当大V发微博的时候就会通过这个微博平台发布,粉丝就可以获取信息。注意的是,微博平台并不会替大V编辑消息内容,它只负责传递,真正通信的其实是除了发布平台的双方。

在这里插入图片描述
处理逻辑方面,就是当平台发布了消息,那么订阅者就会采取相应的措施,比如这个游戏中,平台发布了游戏结束的信息,那么订阅者可能就会停止工作,等待下一轮游戏开始。

发布者代码:

public class GameEventManager : MonoBehaviour
{
    // 玩家逃脱事件
    public delegate void EscapeEvent(GameObject patrol);
    public static event EscapeEvent OnGoalLost;
    // 巡逻兵追击事件
    public delegate void FollowEvent(GameObject patrol);
    public static event FollowEvent OnFollowing;
    // 游戏失败事件
    public delegate void GameOverEvent();
    public static event GameOverEvent GameOver;
    // 游戏胜利事件
    public delegate void WinEvent();
    public static event WinEvent Win;

    // 玩家逃脱
    public void PlayerEscape(GameObject patrol) {
        if (OnGoalLost != null) {
            OnGoalLost(patrol);
        }
    }

    // 巡逻兵追击
    public void Fo
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值