正在进行安全检测...

发布时间:2023-09-09 09:41:08   来源:文档文库   
字号:
龙源期刊网http://www.qikan.com.cn多人联机对战游戏的设计与实现
作者:吕艳阳
来源:《电脑知识与技术》2017年第34
摘要:在程序设计课程中,学生普遍认为多人联机对战游戏制作难度大,一般选择休闲小游戏作为综合实践项目。制作一款包含客户端、服务端的多人联机对战游戏,可以综合应用各种程序设计技术、网络编程技术以及设计模式,提高学生专业实践能力。关键词:多人联机;游戏;网络编程;设计模式;客户端;服务端中图分类号:TP311文献标识码:A文章编号:1009-3044201734-0081-03AbstractIntheprogramdesigncoursethestudentsaregenerallybelievedthatMultiplayerOnlineBattleGameisdifficulttodevelopusuallychooselittlerecreationalgameascomprehensivepracticalproject.MakeaMultiplayerOnlineBattleGameincludingclientandservercanpracticevarioustechnologysuchasprogrammingtechnologynetworktechnologyanddesignpatterns
toimprovestudents'professionalpracticalability.KeywordsMultiplayerOnlineGamenetworkprogrammingdesignpatternsclientserver1概述
腾讯运营的多人对战游戏,取得了巨大的市场成功。这款游戏是一个典型的C/S结构的网络游戏,包含客户端部分和服务端部分。在教学工作中,把这样的题目作为综合实践项目,多数学生都觉得制作难度大,一般会选择休闲小游戏。
即使学生学习了程序设计、socket网络编程、设计模式等课程,学生很难综合应用各门专业课程,制作一款多个用户联机、对战竞技、包含服务端、客户端的对战游戏。
该游戏的开发,综合使用了MVC架构、多线程、socket网络编程和消息处理、设计模式等技术,程序耦合较低,架构良好,实现了多人联机对战的主要流程和功能。2游戏结构
该游戏使用MVC架构、JAVA语言制作,不依赖第三方引擎,适合课程教学。游戏主要功能:
服务端:在一台计算机上运行服务端程序。服务端负责接收消息,转发消息,让各个客户端的事件同步,从而画面同步。

龙源期刊网http://www.qikan.com.cn客户端:开启8台电脑,运行客户端。每人控制一名英雄角色,点击鼠标移动,按QW键使用攻击技能、补血技能。
胜负规则:双方阵营各4人,每方有一个防御塔,摧毁对方塔则获胜。实际部署效果如图1、图2所示。
游戏作为一种软件,完全符合MVCModelViewControl)架构。M负责数据存储,图片资源素材;V负责视图显示、图片绘制;C负责程序控制,刷新各项数据。良好的程序架构,就是这三部分分工协作。3客户端功能和类结构3.1总体结构
游戏效果如图3所示:
客户端总体程序、事件关系如图4所示:程序主要包括以下类:
红方列表HeroArray类:存放红方英雄和塔。蓝方列表EnemyArray类:存放蓝方英雄和塔。
技能类SkillArray类,定义两个对象,存放双方阵营发出的技能,包括攻击技能和补血技能。
程序的底层组件,包括图片类、移动类、动画类、技能类。将单个组件封装,能存放、管理多个对象的类,包括图片数组类,技能数组类,动画数组类。3.2可移动的图片
可移动的图片(ItemPathBase类),由两个类组合而成,图片类ItemBase和移动类Path类图如图5所示。
图片类ItemBase:包含一个玩家单位的基本数据和素材图片(javaImage类)。移动类Path:包含一次移动的基本数据,例如起始/结束坐标、方向向量等。由父类Path保存公共的数据,Path的子类实现不同的移动方式:A点到B点,A点朝B点方向移动。一个英雄角色,一个发出的子弹,一个塔,都是使用ItemPathBase类。

龙源期刊网http://www.qikan.com.cn3.3动画
动画由多幅图片组成,依次绘制到屏幕上。单个动画的类AniBm
属性:Imgae对象,对应一个图片文件;动画状态,准备/播放/结束。方法:绘制图片,当前帧加1,设置输出坐标。一次补血技能的动画,就是使用AniBm类。
用列表存放多个动画,并实现动画的添加、删除、刷新,就是多个动画的类AniBmArray
动画的类图如图6所示:3.4多个英雄角色
把多个游戏单位以及碰撞检测,封装成一个类ItemArrayBase类。多个英雄、塔,都使用这个类。
属性:列表ArrayList,存放多个游戏单位。
方法:绘制人物图片的函数,绘制生命条,碰撞检测,如果碰到敌方技能,该英雄减少血量。一方塔被摧毁,则对方获胜。
用户控制的单位是列表中的某一个元素。不同客户端,操纵不同英雄角色,实现了多人对战。
3.5移动功能
当点击鼠标,设置玩家控制单位的目的地坐标,开始移动。通过游戏循环,不断地刷新坐标,实现移动功能。
移动类Path类,用一个整数表示当前状态,状态集合包括停、走两种状态:publicstaticintREADY=1publicstaticintMOVE=2状态改变过程:

龙源期刊网http://www.qikan.com.cn1设置目的地坐标后,状态设置为MOVE,表示开始走;2如果状态是MOVE,刷新坐标数据;
3如果到达目的地,状态设置为READY,表示一次移动结束。3.5攻击技能、补血技能
基本的父类包含公共数据、技能状态,子类实现不同技能。1技能的父类SkillBase类:属性:技能状态,准备/发出/结束;
方法:绘制,启动技能,刷新数据,是否进行碰撞检测。2子类,攻击技能SkillBullet类:属性:一个可移动的子弹图片
方法:绘制子弹;刷新子弹坐标;需要碰撞检测。3子类,补血技能SkillAddHp类:属性:图片数组,存放一段动画素材;
方法:绘制动画;刷新动画帧;不需要碰撞检测。类图如图7所示:4服务端功能和类结构4.1多种设计方案
某方案A:服务端实现业务逻辑功能,不断地发送各个画面。这样的数据量太大,对于对战游戏,会有延迟。
某方案B:实时地发送所有游戏角色的坐标、属性数据,客户端收到数据后,绘制一幅画面。这样发送的数据量大,发送次数多。
该游戏服务端的实现方案:使用socket网络编程,转发事件消息。

龙源期刊网http://www.qikan.com.cn具体过程:
当用户触发一个事件,例如玩家移动、发出技能Q或者W,以字符串形式,打包成一条消息。
服务端接收消息,转发给其他客户端。客户端解析消息,完成对应操作,实现事件同步,从而画面同步。
服务端界面,只有一个文本框,显示网络消息。如图8所示:4.2服务端监听客户端连接
服务端设置端口号,建立ServerSocket后,采用多线程技术,每成功连接一个客户端,开启一个新线程类ClientObserverThread类。4.3事件消息转发
使用设计模式的观察者模式。每个监听线程作为观察者,收到消息后,转发给其他观察者。类图如图9所示:主题类Subject类:
ArrayList存放多个监听线程。转发消息时,调用某个观察者的update函数。观察者ClientObserverThread类:主要方法:
1run函数:用循环不断地接收消息。
2update函数:调用send发送消息,作为观察者模式的观察者接口。5网络消息
客户端产生的消息采用逗号分隔的字符串。消息如表1所示:6结束语
充分利用设计模式,使程序架构良好,可以在程序较少改动的情况下,补充新功能。当设置好客户端的消息格式,服务端和客户端可以分别改进优化,互不影响,有利于学生团队分工协作。

龙源期刊网http://www.qikan.com.cn多人联机对战游戏的开发,使学生知道,综合利用所学课程,可以设计实现商业级游戏的流程和功能。通过实战锻炼,改善程序架构,提高专业技术能力。参考文献:
[1]杨卫红.坦克大战游戏设计实例[J].电脑知识与技术,20161216):215-216.[2]电脑编程技巧与维护杂志社.《电脑编程技巧与维护》合订本[J].电脑编程技巧与维护,20118.[3]相洁,呼克佑.Java语言程序设计[M].北京:人民邮电出版社,2013.[4]陈锐,夏敏捷,葛丽萍.java游戏编程原理与实践教程[M].北京:人民邮电出版社,2013.[5]李源.Java程序设计经典300[M].北京:电子工业出版社,2013.

本文来源:https://www.2haoxitong.net/k/doc/eb9e753bc57da26925c52cc58bd63186bceb928c.html

《正在进行安全检测....doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式