多人联机射击游戏中的设计模式应用(二)
(6) 观察者模式
联机射击游戏可以实时显示队友和敌人的存活信息,如果有队友或敌人阵亡,所有在线游戏玩家将收到相应的消息,可以提供一个统一的中央角色控制类(CenterController)来实现消息传递机制,在中央角色控制器中定义一个集合用于存储所有的玩家信息,如果某玩家角色(Player)阵亡,则调用CenterController的通知方法notifyPlayers(),该方法将遍历用户信息集合,调用每一个Player的display()方法显示阵亡信息,队友阵亡和敌人阵亡的提示信息有所不同,在使用notifyPlayers()方法通知其他用户的同时,阵亡的角色对象将从用户信息集合中被删除。可使用观察者模式来实现信息的一对多发送,类图如图6所示:
图6 观察者模式实例类图
在图6中,CenterController充当观察目标,Observer充当抽象观察者,Player充当具体观察者。在Player类中,name属性表示角色名,type属性表示角色类型,如“战队A”或“战队B”等。Player的die()方法执行时将调用CenterController的notifyPlayers()方法,在notifyPlayers()方法中调用其他Player对象的提示方法,如果是队友阵亡则调用displayTeam(),如果是敌人阵亡则调用displayEnemy();还将调用detach()方法删除阵亡的Player对象,其中CenterController类的notifyPlayers()方法代码片段如下所示:
for(Object player : players) {if(player.getName().equals(name)) {this.detach(player); //删除阵亡的角色}else {if(player.getType().equals(type)) {player.displayTeam(name); //队友显示提示信息}else {player.displayEnemy(name); //敌人显示提示信息}}
}
(7) 单例模式
为了节约系统资源,在联机射击游戏中可以使用单例模式来实现一些管理器(Manager),如场景管理器(SceneManager)、声音管理器(SoundManager)等,如图7所示的场景管理器SceneManager类:
图7 单例模式实例类图
SceneManager类的实现代码片段如下所示【注:以下代码未考虑多线程访问的问题】:
class SceneManager {private static SceneManager sManager = null;private SceneManager() {//初始化代码}public synchronized static SceneManager getInstance() {if(sManager==null) {sManager = new SceneManager();}return sManager;}public void manage() {//业务方法}
}
(8) 状态模式
在射击游戏中,游戏角色存在几种不同的状态,如正常状态、暂停状态、阵亡状态等,在不同状态下角色对象的行为不同,可使用状态模式来设计和实现角色状态的转换,类图如图8所示:
图8 状态模式实例类图
在图8中,游戏角色类Player充当环境类,State充当抽象状态类,其子类NormalState、PauseState和DeathState充当具体状态类,在具体状态类的pause()、start()、beAttacked()等方法中可实现状态转换,其中NormalState类的代码片段如下所示:
class NormalState extends State
{public void pause() //游戏暂停{//暂停代码省略player.setState(new PauseState(this)); //转为暂停状态}public void start() //游戏启动{//游戏程序正在运行中,该方法不可用}public void beAttacked() //被攻击{//其他代码省略if(lifeValue<=0){player.setState(new DeathState(this)); //转为阵亡状态}}public void shot() //射击{//代码省略}public void move() //移动{//代码省略}
}
(9) 适配器模式
为了增加游戏的灵活性,某些射击游戏还可以通过游戏手柄来进行操作,游戏手柄的操作程序和驱动程序由游戏手柄制造商提供,为了让当前的射击游戏可以与游戏手柄兼容,可使用适配器模式来进行设计,类图如图9所示:
图9 适配器模式实例类图
在图9中,GamepadsAdapter充当适配器,它将游戏手柄中按键(GamepadsKey)的方法适配到现有系统中,在其move()方法中可以调用MoveKey类的handle()方法,在其shot()方法中可以调用ShotKey的handle()方法,从而实现通过手柄来控制游戏运行。
【作者:刘伟 http://blog.csdn.net/lovelion】
多人联机射击游戏中的设计模式应用(二)相关推荐
- 【转】多人联机射击游戏中的设计模式应用(一)
为了方便大家更加系统地学习和掌握各种常用的设计模式,下面通过一个综合实例--"多人联机射击游戏"来学习如何在实际开发中综合使用设计模式. 反恐精英(Counter-Strike, ...
- 多人联机射击游戏中的设计模式应用
转:http://blog.csdn.net/lovelion/article/details/8262987 反恐精英(Counter-Strike, CS).三角洲部队.战地等多人联机射击游戏广受 ...
- 多人联机射击游戏中的设计模式应用(一)
为了方便大家更加系统地学习和掌握各种常用的设计模式,下面通过一个综合实例--"多人联机射击游戏"来学习如何在实际开发中综合使用设计模式. 反恐精英(Counter-Strike, ...
- Unity Networking开发多人联机射击游戏
UNet开发多人联机射击游戏 引言: Networking作为Unity官方的用于开发多人在线游戏的网络模块,开发者可以不用自己搭建网络模块的底层,通过使用Unity提供的一些相关组件,可以轻松实现简 ...
- 上班最强摸鱼游戏-多人联机小游戏 (一)
highlight: a11y-dark 多人在线射击游戏.最强摸鱼游戏 在想体验地址====> github地址: 开发不易,多谢大哥大姐们点个start吧,点个小爱心吧 技术栈 canvas ...
- 游戏开发入门(二)游戏中的设计模式
视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深 ...
- 手机射击游戏中弹幕的开发
射击游戏中弹幕的开发 http://blog.vckbase.com/knight/archive/2005/03/29/4174.html 作者:牛阿牛 2005-02-28 nhf_20 ...
- 在浏览器中创建一个多人海盗射击游戏:
制作多人游戏具有挑战性,原因有以下几个:托管成本昂贵,设计棘手且难以实施. 通过本教程,我希望解决最后一个障碍. 这是针对那些知道如何制作游戏并熟悉JavaScript但从未制作过在线多人游戏的开发人 ...
- 游戏中的设计模式(1)--观察者模式
作为本系列文章的第一篇,笔者在此想表达一下个人对于设计模式的一些理解.因此笔者自问自答几个问题.1,什么是设计模式?2,在软件快速迭代的今天,设计模式是否重要?3,四人帮提出了23个设计模式,是不是设 ...
最新文章
- 都是套路!要毁灭人类、喷马斯克、还获得公民身份的机器人Sophia,真相确是...
- Python时间序列模型推理预测实战:时序推理数据预处理(特征生成、lstm输入结构组织)、模型加载、模型预测结果保存、条件判断模型循环运行
- 日志系统新贵 Loki,真香!!
- php 两个二维数组怎么去重,php 二维数组怎么不去重合并
- DATA SHARING Help JetBrains improve its products by sending anonymous data about features and plugin
- matlab ssb,MatlabSSB信号的仿真分析.doc
- 计算机网络路由器方面的论文,简析计算机网络问题中路由器故障的论文
- 匹配objectuse rootsift= sqrt( sift / sum(sift) ) to improve object retrieval
- 浏览器兼容性-JS篇
- python flask 分页_python flask实现分页效果
- 《数据挖掘概念与技术》读书笔记
- Tomcat线程池原理
- 全国所有火车站站点信息
- 酞菁-氧化石墨烯(NiPc- NHCO-EGO)|齐岳生物提供酞菁定制材料
- sql服务器虚拟内存不足,SQL Server虚拟内存不足的解决方法
- php smarty框架案例,PHP框架_Smarty
- 传统零售加速向新零售演进升级,零售数字化势在必行
- 使用xshell登陆腾讯云主机
- python强制终止_python强制终止
- 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录