前言
本周作业为制作游戏魔鬼与牧师动作分离版,需新增动作管理器类,独立管理游戏对象的动作,也就是把负责管理控制游戏对象动作的职责从场景控制器中分离出去。还需新增一个裁判类,当游戏结束时,通知场景控制器游戏结束。
设计思路
动作分离版的改进都是面向对象、基于职责的思想,让场景控制器专注于本身应该实现的职责,比如处理用户交互时间,加载游戏资源等,而把一些更具体的功能分离给更特定的对象,从而避免对象的臃肿,各个对象实现特定功能,然后通过消息协同完成更为复杂的工作。同时,程序更能适应需求变化,对象更容易被复用,程序更易于维护。
- 通过门面模式(控制器模式)输出组合好的几个动作,供原来程序调用
- CCActionManager, 动作组合成为动作模块内部的事物
- 通过组合模式实现动作组合,按组合模式设计方法
- 必须有一个抽象类表示该类动作的共性,如SSAction,表示任何动作,包括动作与组合后的动作
- 基本动作,用户设计的基本动作类,如CCMoveToAction
- 组合动作,由(基本或组合)动作组合的类,如CCSequenceAction
- 接口回调(函数回调)实现管理者与被管理者解耦
- 如组合对象实现一个事件抽象接口,作为监听器(listener)监听子动作的事件
- 被组合对象使用监听器传递消息给管理者
- 通过模板方法,让使用者减少对动作管理过程细节的要求
- SSActionManager作为CCActionManager的基类
游戏实现
1.编写脚本,实现游戏功能。
- Director.cs:Director导演类,控制场景的创建、切换、销毁、游戏暂停、游戏退出等。
- FirstController.cs:FirstController类,“场记”,管理所有游戏对象,控制游戏对象之间的通讯,响应外部输入事件,实现游戏的逻辑结构。
- GUI.cs:GUI类,编写UI界面,实现用户交互逻辑,根据游戏状态展示游戏结局。
- GUIClick.cs:GUIClick类,接收用户鼠标操作。
- Boat.cs:Boat类,用于实例化船对象,已经与boat相关的函数。
- Character.cs:Character类,实例化游戏角色对象以及相关函数。
- Land.cs:Land类,实例化河岸对象
- ISSActionCallback.cs:ISSActionCallback接口,动作事件接口,作为动作和动作管理者的接口,所有动作管理者实现这个接口以实现事件的调度,当动作完成时,对象会调用这个接口,通知管理器对象动作已经完成,以便管理器对下一个动作进行处理。
- SceneController.cs:SceneController接口,获取资源。
- UserAction.cs:UserAction接口,处理用户与游戏UI界面的交互。
- SSAction.cs:SSAction类,动作基类。
- SSMoveToAction.cs:SSMoveToAction类,具体动作类,移动游戏对象以特定速度到指定地点。
- SequenceAction.cs:SequenceAction类,动作组合序列类,动作组合实际上就是按顺序完成每个动作。
- SSActionManager.cs:SSActionManager类,动作管理器基类,实现对动作、动作组合对象的管理,为动作类传递游戏对象、决定动作执行的顺序、切换动作等。
- MySceneActionManager.cs:MySceneActionManager类, 本游戏的动作管理器类。(本游戏的游戏动作对象只有移动这一个动作,实际上就是对SSMoveToAction对象的管理。)负责创建动作并执行动作。
- Judge.cs:Judge类,根据游戏规则,判断游戏进行的状态并实时更新。
2.预制游戏对象