学位论文-泡泡堂网络游戏的设计与实现_第1页
学位论文-泡泡堂网络游戏的设计与实现_第2页
学位论文-泡泡堂网络游戏的设计与实现_第3页
学位论文-泡泡堂网络游戏的设计与实现_第4页
学位论文-泡泡堂网络游戏的设计与实现_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE第21页共21页学位论文泡泡堂网络游戏的设计与实现论文作者姓名:申请学位专业:申请学位类别:论文提交日期:泡泡堂网络游戏的设计与实现摘要网络游戏开发是一项很大的工程,需要很多综合性的知识。这对于刚刚入门的开发者来说很难理解。本论文从研究开发一个模仿泡泡堂网络游戏的例子出发,讲述网络游戏开发中用到的一些最基本的知识和设计思想,使大家清晰的理解游戏开发的过程。整个设计中利用java中的swing编程,结合游戏的操作流程,对整个游戏进行精心的设计和大量的测试,实现游戏软件服务器端和客户端的开发,为玩家提供一个友好美观的操作界面,并添加聊天等功能以增加玩家之间的互动性,此外实现了可编辑场景地图的功能,使得游戏内容的更加丰富,玩家交互性更好,确保了游戏更具有趣味性、灵活性,以满足玩家对这款网络游戏的要求。关键词:消息传输;java-swing;网络游戏;线程;场景TheDesignandImplementationof“PaoPaoTang”NetworkGameAbstractNetworkgamedevelopmentisabigprojectthatrequiresalotofintegrationofknowledge.Itisdifficulttounderstandforbeginnerinthisfield.ThisthesisbaseontheresearchanddevelopmentofaGamenamed“PaoPaoTang”,asanexample,itdescriptthedevelopmentoffundamentalknowledgeandtheorywhendesignanetworkgame,sothatwecanmoreclearlyunderstandthegamedevelopmentprocess.Thewholedesignusesthejava-swingprogramming,combineswiththeoperationofthegame,designstheentiregameanddoesnumeroustests,realizethegamesoftwarerunningatserverandclient,provideafriendlyandaestheticallypleasinginterfaceforplayers,andaddchatfunctionstoincreasethecommunionbetweentheplayerseachother.Inadditiontodesignsthescenemapeditingfunctionstomakethegameforrichercontentandbetterinteractivewithplayers.Finallytoensurethatthegameismorefunandflexibilityitcansatisfythenetworkgamerequirementsforplayers.Keywords:messagetransfers;java-swing;networkgame;thread;scene目录论文总页数:21页1 引言 11.1 课题背景 11.2 泡泡堂游戏简介 11.3 本课题研究的意义 12 开发的环境及相关技术的介绍 22.1 开发环境 22.2 Java语言的特点 23 需求分析 23.1 游戏的操作流程 23.2 应该解决的问题 44 系统设计 44.1 处理流程 44.2 数据流 54.3 部署方案 65 系统实现 65.1 代码结构 65.2 公共类的介绍 75.3 服务器端的开发 85.4 客户端 95.4.1 模块设计 95.4.2 游戏入口程序 105.4.3 登陆 105.4.4 游戏大厅 115.4.5 对战场地 136 测试 18结论 19参考文献 19致谢 20声明 21引言课题背景最近几年游戏产业特别是网络游戏得到飞速发展。而随着人们工作节奏的加快,小型的、竞技性的网络游戏因为游戏所需时间短,竞技性和娱乐性强等特点,越来越受到工作人士的喜爱。盛大公司推出的“泡泡堂”是一款比较好也是比较成功的网络小游戏。本课题就是想对该游戏进行分析研究,借助于它的游戏规则,用java语言模拟开发一个类似的,功能相对简单的网络小游戏。从而使自己更清楚的认识小游戏开发需要的知识和开发的环节和涉及到的领域。泡泡堂游戏简介在2004年全世界最火爆、在线人数最多的网络游戏,不是《传奇》、《奇迹》等深受欢迎的传统MMO,也不是《梦幻西游》、《剑网》、《巨商》等一大批后起之秀,而是盛大旗下的一款休闲游戏—《泡泡堂》。《泡泡堂》是韩国第一人气网络游戏,拥有多达2500万的注册用户。它以简单趣味征服玩家。有专家将玩家区分为临时玩家、中间玩家和忠实玩家三类。而《泡泡堂》的服务对象大部分都是临时玩家。对于这一概念的定义为:年龄层从10岁到20岁甚至35岁左右,每天平均游戏时间约为2小时,希望选择可以即刻得到结果、界面简洁的游戏。临时玩家是互联网娱乐初级阶段的玩家层,对数字娱乐有一定渴望,对上手较难的游戏有畏惧感。他们比忠实玩家要更广泛,而且还是最有开发价值的目标人群。有资料统计,在美国临时玩家和忠实玩家之间的比例大约是50:1,在中国这种差距可能会更高。而休闲游戏恰恰抓住了这些临时玩家对互动娱乐的需求。休闲游戏简单轻松,趣味十足,临时玩家们在短时间内就可获得游戏所带来的互动趣味和成就感。这些其实是休闲游戏成功的最大法宝。开发商非常清楚的认识到了这一点,他们以红白机的《炸弹人》作为原形,针对市场开发出了《泡泡堂》。使游戏操作简单,极易上手,富有乐趣,充分吸收了《炸弹人》的诸多优点。在保留精髓的同时,《泡泡堂》还开发了一些有创意的玩点,加入一些很有影响力的娱乐元素(Avatar),使产品线更丰富,满足了临时玩家多方面的互联网娱乐需求。本课题研究的意义本课题以开发该游戏为平台,综合运用网络编程,数据之间的通讯,程序中算法的实现,线程的分配,程序运行中的内存使用情况的控制等。通过这些技术的综合运用,更深入的了解计算机程序方面的相关知识,熟悉游戏开发的理念和流程,了解整个游戏项目开发的关注点。该课题属于研究性的一个课题,不考虑商业上的应用。只是对技术研究的并不是游戏本身的娱乐性。开发的环境及相关技术的介绍开发环境操作系统:MicrosoftWindowsXP开发语言:java2开发包:Java(TM)2StandardEdition(5.0),JFCSwing.IDE:Eclipse3.2测试环境:局域网,PC机Java语言的特点1.平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。2.安全性Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3.面向对象Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4.分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5.健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。需求分析本设计主要是实现一个类似于“泡泡堂”功能的网络游戏。其操作流程及其主要功能如下介绍游戏的操作流程游戏的操作类似于网络游戏QQ堂。其操作流程如图1所示。图1游戏操作流程1.首先要先运行服务器端,来处理各个客户端发来的请求。2.玩家运行客户端,首先展现一个版权声明的界面,因为游戏中的图片来源于腾迅公司的QQ堂游戏,图片的版权归腾迅公司所有。3.几秒后自动跳到登录界面。在这里输入用户名称,密码。因系统中没有对数据库进行操作,并没有保存用户的相关信息,所以没有注册的功能,也没有对密码的正确与否进行验证。输入密码后点击登录进入游戏大厅,退出则关闭程序。4.进入大厅后,用户可以选择自己的角色,蓝队或者红队,并可以进行聊天对话。点击准备时将进入准备状态。当所有用户都进入准备状态,游戏自动进入对战场地进行对战游戏。5.在对战时,玩家可以用方向键盘控制人物的移动,人物只能在空地中移动,当遇到“箱子”时,可以使用“空格键”放置“泡泡”,利用“泡泡”的爆炸的威力去破坏周围的障碍物(“仙人掌”不能被破坏掉)。同时可以一连串放置多个“泡泡”,放置“泡泡”后,“泡泡”将持续几秒钟才会爆炸,在这段时间玩家可以放置更多的“泡泡”来攻击对手,在运动过程中还要及时躲开“泡泡”的爆炸区域。当玩家被“泡泡”炸中,则该玩家的生命将结束,不能继续进行游戏6.当有一个队中的所有玩家都死掉,则该队挑战失败,对方获胜。应该解决的问题本程序需要解决的主要问题:1. 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2. 网络计算机之间的数据通讯:用socket进行编程,同时由于对人同时游戏,要尽量减少网络数据的传输量,提高传输效率,防止堵塞。3. 算法的设计:算法是游戏的核心,要设计很好的算法,提高游戏运行的效率,运行速度要高,并且资源占用的要少。4. 线程的控制:由于涉及到对个玩家,并且要即时的将数据进行网络传输,因此可以用多个线程来并发执行这些操作。线程之间的同步和调度上要很好的控制。5. 双缓存:在图片之间相互调用转换时,图像的画面要流畅,不能有停顿和闪烁6. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,这里使用了QQ堂游戏里的一些截图来美化界面,同时对解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。以上相关技术细节和整体流程将分别在以下小节阐述。系统设计本游戏开发采用C/S结构,分为服务器端和客户端两部分。处理流程服务器端主要处理各个客户端发过来的消息(Message),并根据消息的类型,对消息进行不同的处理,然后将处理后的消息转发或者直接转发消息到所有玩家。客户端则监听用户的输入动作,包括键盘和鼠标动作,对于不同的动作做不同的处理,并根据玩家动作的类型,把所有信息封装为一个消息的实体(Message),然后发到服务器端。同时要监听服务器端的回复过来的消息当收到一个新的消息,将对消息进行解析,根据消息的类型作不同的处理,从而改变游戏场景或者状态等。处理流程如图2所示。图2处理流程数据流在整个系统中,客户端和服务器端所有的信息都是通过一个封装的Message来传输的,它们的传输数据流如图3所示(这里以一次通讯为例)图3数据流当一个客户端把玩家的动作封装为一个的消息,之后发送到服务器端。服务器端接收到该消息,并对该消息进行解析处理。然后将处理过的消息转发给当前的所有客户端,包括消息的发出者。客户端收到该消息,根据消息的类型来解析,然后处理并改变当前的场景。部署方案因为游戏为一个网络游戏,要多个玩家同时参加互动。所有程序有服务器端和客户端两部分。它们部署图如图4所示:图4部署图服务器端部署服务器端程序,负责保存当前玩家的信息,对客户端发过来的消息进行处理并转发等。客户端只需要部署客户端程序,负责发送消息并处理游戏主要逻辑。系统实现代码结构图5代码结构程序是用eclipse平台开发,在该平台下代码组织如图5所示。代码结构的详细介绍参考表1。表1代码结构介绍文件夹包名称类描述Src游戏源代码net.jeson.game.util(存放系统中经常用到的类,系统级)GameKey.java系统级参数Util.java系统级的类net.jeson.game.server(存放服务器端相关的类)Server.java服务器端的主程序net.jeson.game(存放启动游戏所有到的类)Game.java启动游戏的入口类(存放处理一些业务逻辑的类)Bomb.java管理放置的“泡泡”的类Message.java用来封装客户端和服务器端直接通讯的消息的类MessageManager.java管理消息的接收和发送ponent(存放一些可以被重用的swing组件,主要是用来UI的设计)CenterShowDialog.java把窗口显示的位置在屏幕上居中GameImage.java管理图片加载创建的类ImageButton.java定义一个图片按钮ImageLabel.java定义一个图片的label.ImagePanel.java定义一个图片的panelnet.jeson.game.ui(游戏主要显示的界面)Login.java登陆游戏的界面GameHall.java游戏大厅的界面QQFrame.java启动对战场景的窗口QQPad.java对战场景中的画布Images(存放游戏所用到的图片)Map(存放游戏对战场景中的地图。)公共类的介绍系统中定义了一些公共的类,可以被客户端和服务器端多次使用,这些类里的方法多是静态的。GameKey.java这里定义了一些系统级的一些参数,都是静态的。Util.java主要定义了4个方法,用户测试时候打印信息的,全屏的,和关闭显示窗口的方法。MessageManager.java声明了发送消息和接收消息的两个方法。控制着客户端和服务器端之间的数据交换。服务器端的开发服务器端开发是使用JAVA语言中的套接字,采用TCP协议进行通讯的。通讯的数据全部封装在一个Message类里面。这些数据在网络之间传输并在客户端和服务器端进行解析,得到后作出相应的动作。处理流程参考图6.图6服务器端处理流程服务器端主要用到了java中的网络编程和线程。在构造函数中,利用默认端口创建一个套接字ServerSocket(Port);然后进入一个无限循环来监听网络连接,每当有一个新的客户端连接到服务器,建立一个新的线程来处理该客户请求。之后服务器端继续监听,等待新的客户端连接。try{ serversocket=newServerSocket(port); System.out.println("GameServerstartedat:" +serversocket.getInetAddress().getLocalHost()+":" +serversocket.getLocalPort()); while(true){ //设置玩家的编号:1-8 if(number<8){ number++; }else{ number=0; continue; } clientsocket=serversocket.accept(); System.out.println("Connectionfrom:"+clientsocket); out=newObjectOutputStream(clientsocket.getOutputStream()); ht_out.put(clientsocket,out); ServerThreadserverThread=newServerThread(clientsocket, ht_out,number,out,allMessage); Threadthread=newThread(serverThread); thread.start(); }ServerThread被启动后,也执行一个无限循环,对连接通道进行监听,如果有该通道发过来的信息,就对相关的信息进行处理,之后把处理后的消息转发给所有玩家。客户端首先在程序中定义了几个通用的组件和方法:CenterShowDialog,GameImage.java,ImageButton.java,ImageLabel.java和ImagePanel.javaCenterShowDialog:这个类的功能是使显示的图形界面居中。ImagePanel:定义一个背景为一个image的画板(panel)GameImage:这里定义了一些对图片操作的类,如创建一个图片等。ImageButton:定义一个图片按钮(JButton)ImageLabel:定义一个图片的标签这些通用的组件和方法供各个模块所公用。一些场景的设置是在它们的基础上进行搭建的。模块设计如图7所示,游戏客户端总体分为4个大的模块:游戏入口,登陆,游戏大厅,和对战场地。客户端客户端游戏入口登陆游戏大厅对战场地提示一些版权信息输入玩家名称,密码角色选择,聊天,状态改变利用泡泡攻击对方图7客户端模块划分图以下对具体模块的设计进行详细介绍。游戏入口模块主要类:Game.java 描述:显示一个无标题栏的窗口,提示一些版权信息,如图8所示。图8游戏声明首先在它的构造方法中初始化该JFrame的相关属性。在main方法中,先声明一个Game类,创建声明窗口。之后调用Util方法中的showWindow()方法,显示该窗口的动态展开,产生一个动画的效果。窗口将停顿5秒,以便玩家有足够的时间来阅读相关内容。最后调用Util方法中的closeWindow()方法来动态地收缩关闭该窗口。随后创建一个Login类,并将其显示,进入登录模块,同时隐藏该声明信息窗口。登陆模块主要类:Login.java描述:显示登陆界面(效果请参考图9),并处理相关的鼠标动作,输入玩家名称,密码等,登陆后和服务器建立连接,并发送信息到服务器。(因为不设计到数据库,这里并没有对玩家输入的相关信息进行验证,也没有注册玩家信息的功能)图9登陆界面因设计到对一些组件的监听,并对鼠标事件进行监听,该类实现了相关方法:publicclassLoginextendsJFrameimplementsActionListener,mouseMotionListener构造方法调用init()方法对类进行初始化,这里主要是创建了两个ImageButton:login_bt和exit_bt,两个文本框:user和password,设置它们被显示的位置和样式,同时为两个ImageButton增加鼠标监听事件。当鼠标点击login_bt时,将触发一个事件,捕捉该事件,并进行处理。处理过程:从user和password两个文本框得到玩家输入的信息,把这些信息作为属性值赋值给一个新的Message实体。创建一个和服务器的新的连接,把这个message发送到服务器段。之后创建一个GameHall:newGameHall(msg,in,out);游戏大厅模块主要类:GameHall.java描述:游戏大厅的主界面,同时负责处理玩家一些鼠标事件,并和服务器进行通讯,发送/接受消息。当鼠标触发一些事件时候,对事件的内容进行解析,然后根据不同的事件,创建不同类型的消息,把相关的必要的信息进行封装,最后发给服务器。由服务器进行处理后,服务器发送消息给所有客户端,客户端接收到消息,并对接收到的消息进行处理,来改变大厅场景。该类中设计到对整个大厅中鼠标和键盘事件的监听,并创建一个主的线程来监听从服务器端发来的消息。因此该类实现了MouseListener,MouseMotionListener,Runnable,KeyListener等接口。构造方法中调用了init()方法。初始化大厅用到的一些组件。整个大厅是一个ImagePanel,一个画布。所有的组件都是在这个画布上增加。并为这些组件增加一个监听器来监听它们的动作。之后程序启动主线程,对服务器发来的消息进行监听,并在解析后作出相应的动作。thread=newThread(this);thread.start();当受到一个消息时,根据消息的类型,作出不同的动作。最后调用paint()方法来刷新主画布从而改变场景。调用paint()方法时,首先把所要玩家都移除,然后重新画整个场景:removeAllPlayer()for(Enumeratione=htPlayer.elements();e.hasMoreElements();){Messagemsg=(Message)e.nextElement();showPlayer(msg);}其中的showPlayer()方发中是根据玩家不同的编号(number)和小组(team)来把玩家的图片画到画布的不同位置。并判断该玩家现在的准备情况,如果准备好了就显示准备状态。游戏大厅中主要实现了小组的选择,聊天功能,准备和取消准备等功能。小组的选择:游戏中的小组分为“蓝队”和“红队”,它们的选择图标都是一个ImageButton。当有鼠标点击它们的动作时,将触发一个鼠标点击事件,这时鼠标监听器将捕捉到该动作。然后创建一个新的消息,把玩家的一些信息赋值给该消息,同时设置消息的类别为“更换小组”,最后发送消息.这里以选择蓝队为例:Messagetest=newMessage();test.team=GameKey.TEAM_BLUE;test.type=GameKey.MESSAGE_TYPE_CHANGE_TEAM;test.number=meMessage.number;test.UserName=meMessage.UserName;Util.printMessage("SelectTeam",test);当客户端收到Type为GameKey.MESSAGE_TYPE_CHANGE_TEAM(数值为5)的消息时,从保存的所有玩家的信息中得到状态改变的该玩家,并更换它的TEAM,之后还放到HashTable中。 for(Enumeratione=htPlayer.elements();e.hasMoreElements();){ Messagetest=(Message)e.nextElement(); if(test.number==msg.number){ test.team=msg.team; htPlayer.put(Integer.toString(test.number),test); } }最后要调用paint()方法来重新刷新该画布,改变场景,使该玩家的颜色显示和选择小组颜色一致。 聊天功能:原理和小组选择相似,首先玩家在文本框中输入要发送的消息内容,当点击“发送”的图片按钮时,触发一个鼠标动作。监视器拦截该动作,并得到输入文本框中的信息,把它封装到一个消息里面Message。最后发往服务器。服务器端只是把消息进行转发给所有玩家。玩家的客户端收到消息后,判断该消息的类型,如果是聊天消息,将聊天的内容提取,然后显示在聊天信息板里面。准备/取消准备功能:点击准备图片按钮,触发一个事件,然后封装生成一个消息发送到服务器,服务器转发。客户端收到消息后把该玩家的状态改为“准备”。之后判断是否所有玩家都已经准备好,如果都准备好,把全局变量Ready的数值设置为“OK”,然后在主线程里判断这个值从而得到是否所有玩家都已经准备好。都准备好的话就创建一个新的窗口进入对战区。对战场地模块主要类:QQPad.java描述:这个类为游戏大厅的画布,同时处理对战时的主要逻辑,是整个游戏的核心。负责处理了玩家移动,泡泡的放置及引爆,障碍物的清除和胜负判断等多个功能。当玩家进入大厅时,程序首先要初始化场景,包括对地图和玩家位置的初始化,并为场景增加监听器监听玩家键盘和鼠标的动作,之后启动一个主线程。该线程负责处理玩家的鼠标和键盘动作,并对从服务器端接收到的消息进行处理,从而改变当前的场景。当有一个小组的全部玩家都被消灭后,就判断胜负并显示结果,这次对战就结束,返回到游戏大厅。整体流程如图10所示。图10对战处理流程以下将对几个主要的流程作详细的介绍。地图的生成地图是每个游戏必需的一个元素,地图主要是生成游戏的场景,然后在画布上显示该场景。在开发很多类型的游戏中,地图系统都需要良好的设计,直观的说,我们需要的地图系统仅仅是一个2D数组,然后用最快的方式将数组影射到屏幕上。地图的设计方式有很多,大多数2D游戏是通过开发的地图编辑器来实现的。而该游戏的设计是首先定义一个地图文件,这个地图文件是用一些0,1等数字表示一种物体。然后在用流对该文件进行读取,把内容读取到一个数组里面。不同的数字就会在场景中显示出不同的物体。程序中首先在map文件夹下定义好一个“map1.txt”文件,该文件是由0,1,2三种数字组成:111110010011111111000210100111110012201010011100010010101001101121101010100002011010101011022010101010220110101010110200001010101121101100101010010001110010102210011111001012000111111110010011111其中,0在场景中显示的是一个空地,1显示的是一个箱子,2显示为一个植物。之后通过流将数据读取到一个数组里面:while(true){ Stringline=reader.readLine(); if(line==null){ reader.close(); break; } //过滤掉#开头的行 if(!line.startsWith("#")){ line=line.trim(); lines.add(line); width=Math.max(width,line.length()); } }height=lines.size(); //对数组赋值 for(inti=0;i<height;i++){ Stringline=(String)lines.get(i); for(intj=0;j<line.length();j++){ intc=(int)line.charAt(j); c=c-48; //把ASC码转化成数字 map[j][i]=c; } }根据初始化好的数组,对数组中每一个元素的值,将显示不同的物体,从而实现地图的初始化。上例中地图数组最终显示到画布中的场景如图11所示:图11对战场地初始化场景:初始化场景主要是初始化场景中使用到的图片,玩家的位置,为场景中的相关组件增加监听器等。对于玩家的位置的初始化,这里先判断玩家的编号,每个编号对应一个不同的位置。而显示玩家时,是通过地图中的数据来显示的。每一个地图代码代表不同的玩家状态。地图中的一个格子是一个数据,拿map[m][n]=1322为例,这个数据“1322”它们组成为:小组编号+当前朝向+X轴方向的格子数+Y轴方向的格子数。其中小组和朝向的代码制定如下:玩家的小组:1->蓝队;2->红队朝向:1->朝北;2->朝东;3->朝南;4->朝西最后根据该数值,来最终决定该玩家的当前的状态,根据状态中的位置朝向等信息,在场景中显示相应的图片来创造当前状态下玩家的实体。玩家移动对战过程处理流程的原理和大厅相似,不过很多是对键盘的监听。当按下键盘的方向键的时候,监听器将捕获该动作,然后将该动作的信息封装为一个消息,在服务器端再对消息进行转发给所有玩家。玩家收到消息,对消息进行解析,得用户的操作,然后改变玩家对应单元格的代码,之后刷新整个画布,玩家的位置将做出变化。其中在移动玩家的时候,要先判断前方是否有障碍物或者是否已经到达了边界,是的话将不能进行移动。泡泡处理泡泡的显示也是用一个数组坐标来表示,不过这个是另外建了一个新的数组map2[][],它的大小和场景坐标一样,但是状态只有两种:放置的泡泡和爆炸中的泡泡。当玩家按下空格建,将会把玩家当前位置出放置一个泡泡,即把map2中的对应状态改为“8”。放置泡泡的时候,其实建立了一个泡泡的线程,为这个泡泡设置位置,然后就启动该线程,当停顿4妙后,将把这个泡泡给引爆。pad.setBomb(m,n); sleep(sleepTime);//sleepTime=4s pad.Bombing(m,n,power); sleep(500); pad.cleanBomb(); sleep(1000); pad.cleanPlayer();引爆时调用了Bombing方法。该方法主要是根据泡泡的威力,把在爆炸范围内的箱子或者玩家给清除。也就是改变坐标的代码。首先要显示一个爆炸时候的图片,之后清楚相关的物体。for(inti=m;i<=m+power;i++){//向右 if(i>=15){ break; } if(map[i][n]==2){ break; } if(map[i][n]==0){ map[i][n]=88; } if(map[i][n]==1){ map[i][n]=88; break; } ……}泡泡的爆炸场景显示持续半秒后,将把爆炸范围内的物体(植物除外)的值设置为0,这样在下次刷新场景时将清理被炸掉的物体。结束判断:在每次泡泡爆炸后,都要进行一次判断,首先要判断是否有玩家被炸到,如果有就将该玩家的状态设置为’DEAD’,然后判断整个小组是否所有成员都已经dead掉,如果是,则认定该组失败,而对方获胜。游戏结束。if(myLive==0&&blue_team_alive==true&&red_team_alive==true){ g.drawImage(deathImg,84,140,this); } if(myTeam==1){ if(!blue_team_alive){ g.drawImage(lossImg,84,140,this); } if(!red_team_alive){ g.drawImage(winImg,84,140,this); } } if(myTeam==-1){ if(!red_team_alive){ g.drawImage(lossImg,84,140,this); } if(!blue_team_alive){ g.drawImage(winImg,84,140,this); } }测试因为完全开发一个完整的网络游戏需要巨大的时间和精力上的投入,该程序的主要目的是研究泡泡堂游戏的主体开发原理和流程。在开发过程中还有一些BUG要完善。测试过程中主要精力分析数据在传输过程中数据丢失和对战中玩家坐标的调整上。为了最大可能的增加系统的稳定性,曾大范围的改变了游戏的设计思想,争取做到最优。通过测试,整个游戏能够很好的完成整个操作流程。并可以实现多人登陆,在游戏大厅进行信息交换,和在对战场地进行对战等功

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论