




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XXXX课程设计说明书题目棒打猪头网页游戏系(部)计算机科学与技术专业(班级)姓名学号指导教师起止日期课程设计任务书课程名称:综合实训设计题目:网页游戏或手机游戏设计与开发已知技术参数和设计要求:1. 问题描述(功能要求):、棒打猪头网页游戏游戏的设计采用客户机/服务器模式的游戏,游戏在客户端采用Java小应用程序(即Java Applet)技术进行开发,并将其嵌套在HTML中进行部署,用户只需访问WEB页面就可以进入游戏。在服务器端开发采用Java应用程序开发一个小的监视窗口,对客户端实时监控。开发中采用面向对象技术,通过类的编写来简化开发的难度。 开发的游戏是一个两人同时在线进行在线的竞技游戏-棒打猪头,通过对游戏的开发了解网络游戏框架的开发模型。游戏的主要功能如下;1玩家访问web页面,同时下载java字节码文件。程序进入下载相关图片,当图片下载完成时,游戏程序进入就绪状态,并向服务器程序登记。2玩家可选择开始时,游戏开始。游戏程序进入开始状态,玩家即开始棒打猪头游戏。3游戏中的棒由玩家的鼠标控制,即玩家的鼠标进入web页面的游戏区时鼠标光标变成玩家的棒。4游戏中的猪头的出现频率有一个随机数控制,当被玩家的棒击中时猪头消失,玩家得分,并将此信息传递给服务器程序,由服务器程序将其转发给另一玩家。5同时,程序启动网络侦听程序,接受服务器上传来的另一玩家的实时信息,并将其打印在本地玩家的web页面的规定位置。6服务器监听程序,主要登记玩家的网络标示,并实时转发玩家的信息给对手。7当其中一玩家退出游戏时将其信息传递给服务器监听程序,则由服务器监听程序分析后,将结束游戏的信息转发给另一方,游戏结束。、基于OpenGL ES实现3D场景渲染,要求如下:3D场景渲染一:1. 渲染一座房子和一个太阳,房子包括三个图元:屋身、屋顶、烟囱,以及房子所在的地平面(灰度图地形),并实现天空盒与天空穹。2. 光源要求:设计一个方向光源表示太阳;3. 纹理要求:为屋身、屋顶分别贴上砖、瓦的纹理,房子前面的地贴上绿草地的纹理,并设置缩放时用到的过滤器;4. 材质要求:为屋身、屋顶、烟囱设置合适的材质;5. 动画要求:实现二种动画,包括:l 太阳静止,而房子绕Y轴缓慢旋转;l 房子静止,太阳模拟从早到晚的状态,东边升起,西边降落;3D场景渲染二:1. 渲染一个室内场景,包括:四面墙、地面及屋顶,一个吊灯,更复杂的情况可以加一扇窗户。2. 光源要求:吊灯为点光源,设置光源颜色参数,开始时光源的漫反射、镜面反射、环境3. 光均为白色,强度自由设置。要求有一个塑料或其它材质的灯罩;4. 纹理要求:为墙、地面及屋顶设置适合的纹理,设置过滤器;5. 材质要求:为墙、地面及屋顶设置适合的材质,特别是吊灯的灯罩,设置不同的材质使用户感觉灯罩是用不同的材料制作的;6. 动画要求:首先将摄像机定位于房子的内部,摄像机绕Y轴缓慢旋转形成动画;、小鸟爆破手机游戏:学习cocos2d-x游戏引擎,参照一个现成流行的手机游戏来开发一个android手机游戏,通过完成Android手游的设计与实现,帮助学生更好地理论联系实际,巩固已经学到的知识,培养学生的动手编程能力、独立的思考能力和创新能力。1.精灵封装。精灵类封装,继承CCSprite,精灵的属性id等,精灵的行为即精灵Action,精灵的人工智能碰撞检测,自动寻路等。2.层CCLayer。将精灵添加到层中,层添加先后的控制,label的添加添加到label上的精灵执行各自动画的同时可以执行另外一相同动画。3.场景CCScene。最终的实现界面,将层添加到场景。4.资源的加载与释放,应该在loading的时候加载下一个场景的资源,加载完毕后,绘制层,初始化场景。场景切换可对资源进行释放。可以写在析构函数中。场景切换,replaceScene(CC scene),pushScene(CCScene),popScene()只有使用push出来的场景才能进行pop切出. 5.多线程的运行与控制。cocos2d-x中采用时间调度函数this-schedule(schedule_selector(类:方法),间隔时间);。 6.多动画的控制,执行A动画后执行B动画,或者执行A动画去做C事件。7.游戏音乐控制与基本数据存储。应将游戏音乐是否播放保存在游戏生成的xml文件中。8,算法与数据结构,保证游戏运行尽可能顺畅。2. 运行环境要求:(1)客户端:Windows操作系统IE浏览器(2)服务器:windows server 版操作系统Tomcat web 服务器3. 技术要求:1) 需求分析规格说明书与用例规约;2) 系统设计,时序图,类图;3) 系统完整编码;设计工作量:四周工作计划:(1) XXXX级软件工程XX班40课时:知识学习36课时:上机编码4课时:答辩。计算机系机房。(具体时间地点老师先申请,机动安排)指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:XXXX课程设计鉴定表姓名学号专业软件工程班级设计题目棒打猪头网页游戏指导教师指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要 本软件是要运用java语言开发一款网页版的棒打猪头游戏,该游戏可以实现多个玩家联机玩。实现网页版游戏首先需要实现单机版游戏,在单机版的基础上添加基于连接的Socket通信。单机版的实现主要需要四个类的实现,主类、锤子精灵类,猪头精灵类和锤子、猪头的父类。在锤子精灵和猪头精灵类中分别实现了对各自对象的绘制和一些基本的操作。猪头精灵类还涉及随机出现、碰撞检测的算法。主类实现了鼠标接口、鼠标移动接口和线程接口,对这些接口的每个抽象方法进行具体实现。在鼠标按下方法中实现锤子状态、猪头状态的变化和碰撞检测。在鼠标抬起方法中实现锤子状态的变化。鼠标移动中实现因鼠标的位置而设置锤子的位置。在线程的run()方法中控制猪头的随机出现。经过以上步骤单机版基本完成,下面是网页版实现的步骤。网页版的实现第一步需要实现客户端和服务器端的连接,在服务器端生成ServerSocket对象在特定的端口实现监听服务,等待客户端的请求,客户端在特定端口创建Socket对象向服务器端创建连接,服务器端接收客户端的请求用返回的Socket建立连接。第二步把鼠标按下、鼠标抬起、鼠标移到的信息进行封装发送给服务器端,服务器端经过接收到客户端发来的信息,再进行解码把信息发回给另一个客户端。另一个客户端接收到信息后进行解码,做相应的操作来驱动另一个锤子的运动。经过以上步骤最终实现的功能有:自己这一方可以把信息发送给服务器端,服务器端可以把信息返回给对方,对方可以接收服务器端的发来的信息但是不能驱动锤子运动。关键词:Socket,鼠标接口、鼠标移动接口、线程接、ServerSocket、解码目录1 设计内容与要求12 游戏设计的需求分析22.1 功能需求22.2 数据需求32.3 性能需求43 游戏系统概要设计53.1 游戏数据设计53.2 游戏结构设计53.3 游戏功能模块设计63.4 游戏流程图94游戏系统详细设计114.1 设计说明114.2 类图124.3 时序图134.4 编码实现135 结论15参考文献171 设计内容与要求用java语言实现网页版棒打猪头游戏。客户端采用java Applet技术,服务器端要有服务器监听窗口和服务器端Socket窗口,服务器端和客户端相互通信。控制鼠标来控制玩家的锤子状态,最少出现九个猪头,猪头随机出现,各方玩家的猪头、锤子都要实现同步出现,有计分功能,点击按钮断开客户端与服务器端的连接,服务器不能在接收到客户端的信息。2 游戏设计的需求分析2.1 功能需求我们设计的游戏是采用客户机/服务器模式的游戏,游戏在客户端采用就阿Java小应用程序(即: Java Applet)技术进行开发,并将其嵌套在HTML中进行部署,用户只需访问我们的WEB页面就可以进入游戏。在服务器端我们开发采用Java应用程序开发一个小的监视窗口,对客户端采用实时监控。我们在开发中采用面向对象技术,通过类的编写来简化开发的难度。 开发的游戏是一个两人同时在线进行在线的竞技游戏-棒打猪头,通过对游戏的开发了解网络游戏框架的开发模型。游戏的主要功能如下;1玩家访问web页面,同时下载java字节码文件。程序进入下载相关图片,当图片下载完成时,游戏程序进入就绪状态,并向服务器程序登记。2玩家可选择开始时,游戏开始。游戏程序进入开始状态,玩家即开始棒打猪头游戏。3游戏中的棒由玩家的鼠标控制,即玩家的鼠标进入web页面的游戏区时鼠标光标变成玩家的棒。4游戏中的猪头的出现频率有一个随机数控制,当被玩家的棒击中时猪头消失,玩家得分,并将此信息传递给服务器程序,由服务器程序将其转发给另一玩家。5同时,程序启动网络侦听程序,接受服务器上传来的另一玩家的实时信息,并将其打印在本地玩家的web页面的规定位置。6服务器监听程序,主要登记玩家的网络标示,并实时转发玩家的信息给对手。7当其中一玩家退出游戏时将其信息传递给服务器监听程序,则由服务器监听程序分析后,将结束游戏的信息转发给另一方,游戏结束。流程图如下:图2.1 流程图2.2 数据需求在网络游戏中,数据非常重要,它直接影响游戏的生命,关乎设计的成败,特别是在竞技的网络游戏中就更为突出了,它直接关系到游戏的实时性和交互能力,在网络游戏中,数据的传输依赖于网络环境,在Internet环境下,其影响的因素很多,如网络带宽、网络延时、传输中的数据安全等等,也存在很多的不确定因素,比如有的玩家网络环境好一些,有些就差点。这些情况对于游戏设计者来说没有办法去改变,它已经成为了一种短时期内无法解决瓶颈问题挡在了我们的面前,我们能够改变和决定的只有我们在游戏来传输的数据,因此在网络游戏中,设计高效率的数据格式和结构就尤为重要了。为了高效的利用有限的网络带宽,我们一般只在网络上传输简单的二进制代码用以减轻网络负载,提高传输效率和质量。我们在设计游戏时就采用了自己编写通信协议的方法来解决网络瓶颈。数据流图如下;图2.2 游戏框架的数据流图2.3 性能需求棒打猪头符合一般网络休闲游戏的共性,其目的是将各成员开发的各部分有机的组合起来构成一个整体。因此游戏应具有以下几点需求: 1界面友好、美观。 2具有多线程处理能力,能够同时进行数据的侦听和传递。 3框架响应时间应在人的感觉和视觉反应时间内。 4框架适应性强,在操作方式、运行环境发生变化时,具有较强的适应能力。3 游戏系统概要设计3.1 游戏数据设计网络参数数据:获取客户机(玩家)的计算机IP地址,端口号是程序设定的封装在代码中的在游戏中我们采用的端口号是8000。鼠标事件分为左键按下事件、左键抬起事件、鼠标移动事件。左键按下事件:指客户机(玩家)在按下鼠标左键时发生的事件,客户机程序把事件按照“左键按下 X坐标 Y坐标”的顺序封装成消息传送给服务器,在服务器上进行分析和碰撞检测再把结果封装成消息返回给客户机。左键抬起事件:它和左键按下事件是成对使用的,不同的是左键抬起事件是在客户机上使用的,当事件发生时,程序将从服务器收到的左键按下事件的处理消息解析并呈现在客户机上。鼠标移动事件:鼠标的移动事件处理过程是两个过程同步处理的,鼠标的移动需要在本机呈现还需要把它发送给对手并呈现出来。即在事件发生的同时采用“鼠标移动 X坐标 Y坐标”的消息体封装模式传给服务器,再通过服务器转发给对手。3.2 游戏结构设计 软件结构设计的任务是定义系统的主要结构元素之间的组成关系。从数据流图出发,对数据流图进行分析,从而得出如图3-1所示的系统结构分层示意图 图3.1游戏框架程序结构图3.3 游戏功能模块设计图3.2 游戏功能模块设计图Applet重载函数所有的Java Applet程序中都必须都必须有一个系统类Applet的子类,因为系统类Applet中已经定义了很多的成员域和成员方法,他们规定了Applet如何与执行它的解释器WWW浏览器配合工作,所以当用户程序使用Applet的子类时,因为继承的功能,这个子类将自动拥有父类的有关成员,从而使WWW浏览器顺利地执行并实现用户程序定义的功能。在该部分要对初始化函数init()、开始函数start()、停止函数stop()、绘制函数paint()以及屏幕更新函数update()等6个函数进行重载。1.在init()方法用来完成主类的实例的初始化工作。Applet的字节码文件从WWW服务器端下载后,浏览器将创建一个Applet类的实例并调用它从Applet类那里继承来的init()方法。用户程序重载这个方法,定义一些必要的初始化操作,如创建和初始化程序运行所需要的对象实例,把图形或字体加载入内存,设置各种参数,加载图形和声音并播放。 2.在start()方法用来启动浏览器运行Applet的主线程。浏览器调用init()方法初始化Applet类的实例之后,接着将自动调用start()方法启动运行该实例的主流程。用户程序重载Applet类的start()方法,加入当前实例被激活时欲实现的相关功能,如启动一个动画,完成参数传递等。 3.在stop()方法类似于start()方法的逆操作。当用户浏览器其他WWW页,或者切换到其他系统应用时,浏览器将暂停执行Applet的主线程。在暂停之前,浏览器将首先自动调用Applet的stop()方法。4.在paint()函数中要完成对屏幕的绘制,在Java机制中屏幕的左上角为坐标原点。在绘制的过程中都是从左到右,从上到下进行绘制正屏绘制。如果采用直接绘制就会让我们再视觉上造成抖动,不利于游戏和观赏。因此,在实际开发的过程中我们采用“离屏渲染”技术来改变这一现象。所谓,离屏渲染就是我们在绘制到屏幕上之前,在内存中开辟一块和屏幕大小相等的内存空间,先将要绘制的图像绘制在内存上,当绘制完成之后采用替换屏幕的方式将其替换在屏幕上,完成后将开辟的内存空间释放。5.在update()函数中我们调用paint()函数对屏幕进行更新绘制。6.destroy()方法,当用户退出浏览器时,浏览器中运行的Applet实例也相应被消灭,即被内存删除。在消灭Applet之前,浏览器会自动调用Applet实例的destroy()方法来完成一些释放资源、关闭连接之类的操作。例如终止所有当前Applet实例所建立并启动的子线程等。至于Applet实例本身,由于它是由浏览器创建的,最后也由浏览器删除,不需要在destroy()方法中特别定义。 上述Applet由浏览器自动调用的主要方法init(),start(),stop()和destroy()分别对应了Applet从初始化、启动、暂停到消亡的生命周期的各个阶段。鼠标事件函数图形用户界面之所以能为广大用户所喜爱并最终成为事实上的标准,很重要的一点就在于它可以更灵活、简便的方式来接收用户命令。用户在图形用户界面中输入命令是通过移动鼠标对特定图形界面元素单击、双击鼠标键来实现的,为了能够接收用户的命令,图形用户界面的系统首先应该能够识别这些鼠标和键盘的操作并作出相应得响应。通常每一个键盘或鼠标操作会引发一个系统预先定义好的事件,用户程序只需要编制代码定义每个特定事件发生时程序应做出何种响应即可。这些代码会在他们对应的事件发生时由系统自动调用,这就是图形用户界面中事件和事件响应得基本原理。在本游戏框架中使用鼠标事件机制进行交互,总共用到鼠标的7个事件来处理数据:1.mouseExited: 鼠标进入,设置铁锤的初始位置。2.mouseClicked:判断鼠标是否右击,如果是则弹出网络连接设置对话框。3.mouseEntered:对第一个鼠标设置新坐标。4.mousePressed:当鼠标按下时,首先绘制铁锤按下的图像,接着通过铁锤的坐标依次判断9个猪头是否被击中,若击中的话,由猪头对象绘制自身,并加分;将第一个铁锤的新坐标发给服务器,通知当前本程序的变化。5.mouseReleased:发送鼠标左键抬起的消息给服务器。6.mouseMoved:将鼠标拖动的消息给服务器。7.mouseDragged:重新定位铁锤的坐标,并不把鼠标拖动的情况发给服务器。线程重载函数Java中编程实现多线程应用有两种途径:一种是创建用户自己的线程子类,一种是在用户自己的类中实现Runnable接口。无论哪种方法,都需要使用到Java基本类库中的Thread类及其方法。在本游戏框架中采用的是继承Runnable接口,因为框架类中已经继承了Applet类,在Java中只能够单端继承,即只能继承一个类,但是可以继承多个接口。Runnable接口只有一个方法run(),所有实现Runnable接口的用户类都必须具体实现这个run()方法,为它书写方法体并定义具体操作。Runnable接口中的鹅这个run()方法是一个比较特殊的方法,它可以被运行系统自动识别和执行。具体地说,当线程被调度并转入运行状态时,它所执行的就是run()方法中规定的操作。所以,一个实现了Runnable接口的类实际上定义了一个主线程之外的新线程的操作,而定义新线程的操作和执行流程,是实现多线程的应用的最主要和最基本的工作之一。在本游戏框架中的run()方法中主要要主线程休眠一段时间然后对各个“猪头”的状态进行绘制更新。3.4 游戏流程图 游戏开始 显示随鼠标出现的锤子和随机出现的猪头 按下鼠标锤子是否打到猪头 计分 是 游戏结束图3.4.1 单机版游戏总流程图客户端与服务器端建立连接客户端发送消息给服务器端服务器端把消息发回给客户端(另一玩家)玩家之间的锤子、猪头保持同步 图3.4.2 服务器端与客户端通信的流程图检查按键是否有效 有效检查点击是否有效 有效 计分图3.4.3 敲打猪头流程图锤子抬起按下鼠标显示锤子打下猪头状态不变化检查猪头是否被打中 否 是猪头消失 图3.4.4 图片状态变化的流程图4游戏系统详细设计4.1 设计说明该网页版的棒打猪头游戏是在单机版游戏的基础上添加了网络通信。该程序主要有六个类,主类(HitPigHead)用来处理图片的导入、锤子的状态变化、猪头的出现、碰撞检测、客户端发送信息给服务器端等操作,客户端把锤子的按下、移动、抬起的状态信息发送给服务器端。锤子类(HammerStyle)中的painsprit(Graphics g)用来绘制锤子,updatesrit()用来改变锤子状态。猪头类(PigSprit)中的painsprit(Graphics g)用来绘制猪头、updatesrit()用来控制猪头的随机出现,hit()为碰撞检测。锤子类和猪头类的父类(SurperSprit)中定义了锤子和猪头共有的一些属性和方法。Listen类是个线程类主要用来接收服务器端发送回来的消息,以此来驱动另一玩家的锤子运动,保持两个玩家锤子的同步。Server类是服务器端,功能是接收玩家发来的消息再把信息发送给另一玩家。服务器端有两个窗口:监听服务窗口,用来监听客户端是否发出建立连接的请求。服务器端socket窗口,接收客户端的消息。4.2 类图图4.1类图Surprit类是PigSprit和HammerStyle的父类,Listen、Server、HitPigHead之间是相互依赖关系,HitPigHead是主类,客户端的主要实现都在这个类中实现。4.3 时序图玩家进入游戏界面操作鼠标,客户端把鼠标信息发给服务器,服务器接收到信息后把信息发给另一玩家,另一玩家接收到服务器的信息驱动自家锤子运动,不需玩时点击按钮断开客户端、服务器端的连接,退出游戏。4.4 编码实现 1.客户端、服务器端建立连接socket=new Socket(InetAddress.getLocalHost(),8000);/使用端口号8000实例化本地套接字 InetAddress clientAddress =connectedClient.getInetAddress(); ServerSocket m_sLitener; m_sLitener =new ServerSocket(Port,Count); Socket connected = m_sLitener.accept();建立连接首先要在服务器端生成一个ServerSocket对象来监听客户端的请求,再在客户端的特定端口号生成socket套接字向服务器端发出请求,服务器端用Socket connected = m_sLitener.accept();来返回客户端的socket,用InetAddress clientAddress =connectedClient.getInetAddress();得到客户端的地址,客户端与服务器端建立好连接。2. 客户端向服务器端发送消息 out=new PrintWriter(socket.getOutputStream();/将out指向socket的输出流 /若连接将鼠标移动的消息发送给服务器 if(socket!=null)String str=鼠标移动 +e.getX()+ +e.getY();out.println(str);out.flush(); /若连接将mouse左击的消息发送给服务器 if(socket!=null)String str=左键按下 +e.getX()+ +e.getY();out.println(str);out.flush(); /若连接将mouse松开的消息发送给服务器if(socket!=null)String str=左键抬起;out.println(str);out.flush(); 发送消息首先需生成一个输出流out将消息发送给服务器端。当客户端与服务器端连接时再把鼠标按下、鼠标抬起、鼠标移动的消息封装成一个字符串用out.println(str);out.flush();把消息发送给服务器端。3. 服务器端接收信息、向客户端发送信息 BufferedReader sIn =new BufferedReader(new InputStreamReader(connectedClient.getInputStream(); PrintWriter sOut =new PrintWriter(connectedClient.getOutputStream();String line=sIn.readLine();StringTokenizer st=new StringTokenizer(line, );/用StringTokenizer类实现读取分段字符String keyword=st.nextToken();/读取信息头来识别是何种信息while(!keyword.equals(QUIT)serverMeg.append(Client端输入的信息为:n+line+n);line =sIn.readLine();/读入下一条从客户端发来的信息sOut.println(line);sOut.flush(); 接收信息先要生成一个输入流对象sIn,再生成一个对象line用readLine()方法读取信息。生成一个StringTokenizer类实现读取分段字符,把客户端发送来的信息进行解码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 碳捕集利用工程工艺流程优化方案
- 离异后共同子女保险费用及医疗责任协议范本
- 扩大普惠养老服务供给实施方案
- 高端精装房泥工施工劳务分包合同模板
- 乐理听力考试试题及答案
- 园林工程项目管理流程优化
- 城市夜景照明提升方案
- xx市燃气改造项目建筑工程方案
- 欧式建筑-调色方案设计
- 房屋建筑方案设计内容
- GB 4287-1992纺织染整工业水污染物排放标准
- 10室外配电线路工程定额套用及项目设置
- 腰椎间盘突出症课件
- 桂阳县中小幼教师资格定期注册工作指南专家讲座
- 童装原型部分(课堂)课件
- 软件测试用例实例非常详细
- 广联达算量模型与revit土建三维设计建模交互
- 急救中心急救站点建设标准
- 2022年江苏省苏豪控股集团有限公司招聘笔试题库及答案解析
- 跨国公司经营与管理(第四版)第01章跨国公司概述
- 消防安全知识宣传-主题班会课件(共24张PPT)
评论
0/150
提交评论