正在进行安全检测...
发布时间:2023-09-09 09:41:08 来源:文档文库
小
中
大
字号:
龙源期刊网http://www.qikan.com.cn多人联机对战游戏的设计与实现
作者:吕艳阳
来源:《电脑知识与技术》2017年第34期
摘要:在程序设计课程中,学生普遍认为多人联机对战游戏制作难度大,一般选择休闲小游戏作为综合实践项目。制作一款包含客户端、服务端的多人联机对战游戏,可以综合应用各种程序设计技术、网络编程技术以及设计模式,提高学生专业实践能力。关键词:多人联机;游戏;网络编程;设计模式;客户端;服务端中图分类号:TP311文献标识码:A文章编号:1009-3044(2017)34-0081-03Abstract:Intheprogramdesigncourse,thestudentsaregenerallybelievedthatMultiplayerOnlineBattleGameisdifficulttodevelop,usuallychooselittlerecreationalgameascomprehensivepracticalproject.MakeaMultiplayerOnlineBattleGameincludingclientandserver,canpracticevarioustechnology,suchasprogrammingtechnology,networktechnologyanddesignpatterns,
toimprovestudents'professionalpracticalability.Keywords:MultiplayerOnline;Game;networkprogramming;designpatterns;client;server1概述
腾讯运营的多人对战游戏,取得了巨大的市场成功。这款游戏是一个典型的C/S结构的网络游戏,包含客户端部分和服务端部分。在教学工作中,把这样的题目作为综合实践项目,多数学生都觉得制作难度大,一般会选择休闲小游戏。
即使学生学习了程序设计、socket网络编程、设计模式等课程,学生很难综合应用各门专业课程,制作一款多个用户联机、对战竞技、包含服务端、客户端的对战游戏。
该游戏的开发,综合使用了MVC架构、多线程、socket网络编程和消息处理、设计模式等技术,程序耦合较低,架构良好,实现了多人联机对战的主要流程和功能。2游戏结构
该游戏使用MVC架构、JAVA语言制作,不依赖第三方引擎,适合课程教学。游戏主要功能:
服务端:在一台计算机上运行服务端程序。服务端负责接收消息,转发消息,让各个客户端的事件同步,从而画面同步。
龙源期刊网http://www.qikan.com.cn客户端:开启8台电脑,运行客户端。每人控制一名英雄角色,点击鼠标移动,按Q、W键使用攻击技能、补血技能。
胜负规则:双方阵营各4人,每方有一个防御塔,摧毁对方塔则获胜。实际部署效果如图1、图2所示。
游戏作为一种软件,完全符合MVC(ModelViewControl)架构。M负责数据存储,图片资源素材;V负责视图显示、图片绘制;C负责程序控制,刷新各项数据。良好的程序架构,就是这三部分分工协作。3客户端功能和类结构3.1总体结构
游戏效果如图3所示:
客户端总体程序、事件关系如图4所示:程序主要包括以下类:
红方列表HeroArray类:存放红方英雄和塔。蓝方列表EnemyArray类:存放蓝方英雄和塔。
技能类SkillArray类,定义两个对象,存放双方阵营发出的技能,包括攻击技能和补血技能。
程序的底层组件,包括图片类、移动类、动画类、技能类。将单个组件封装,能存放、管理多个对象的类,包括图片数组类,技能数组类,动画数组类。3.2可移动的图片
可移动的图片(ItemPathBase类),由两个类组合而成,图片类ItemBase和移动类Path,类图如图5所示。
图片类ItemBase:包含一个玩家单位的基本数据和素材图片(java的Image类)。移动类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=1;publicstaticintMOVE=2;状态改变过程:
龙源期刊网http://www.qikan.com.cn1)