课程设计说明书棒打猪头网页游戏.docx

上传人:b****1 文档编号:13202958 上传时间:2023-06-12 格式:DOCX 页数:30 大小:220.25KB
下载 相关 举报
课程设计说明书棒打猪头网页游戏.docx_第1页
第1页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第2页
第2页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第3页
第3页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第4页
第4页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第5页
第5页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第6页
第6页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第7页
第7页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第8页
第8页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第9页
第9页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第10页
第10页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第11页
第11页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第12页
第12页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第13页
第13页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第14页
第14页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第15页
第15页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第16页
第16页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第17页
第17页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第18页
第18页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第19页
第19页 / 共30页
课程设计说明书棒打猪头网页游戏.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课程设计说明书棒打猪头网页游戏.docx

《课程设计说明书棒打猪头网页游戏.docx》由会员分享,可在线阅读,更多相关《课程设计说明书棒打猪头网页游戏.docx(30页珍藏版)》请在冰点文库上搜索。

课程设计说明书棒打猪头网页游戏.docx

课程设计说明书棒打猪头网页游戏

 

XXXX

 

课程设计说明书

题目

棒打猪头网页游戏

系(部)

计算机科学与技术

专业(班级)

姓名

学号

指导教师

起止日期

 

课程设计任务书

课程名称:

综合实训Ⅱ

设计题目:

网页游戏或手机游戏设计与开发

已知技术参数和设计要求:

1.问题描述(功能要求):

Ⅰ、棒打猪头网页游戏

游戏的设计采用客户机/服务器模式的游戏,游戏在客户端采用Java小应用程序(即JavaApplet)技术进行开发,并将其嵌套在HTML中进行部署,用户只需访问WEB页面就可以进入游戏。

在服务器端开发采用Java应用程序开发一个小的监视窗口,对客户端实时监控。

开发中采用面向对象技术,通过类的编写来简化开发的难度。

开发的游戏是一个两人同时在线进行在线的竞技游戏----棒打猪头,通过对游戏的开发了解网络游戏框架的开发模型。

游戏的主要功能如下;

1.玩家访问web页面,同时下载java字节码文件。

程序进入下载相关图片,当图片下载完成时,游戏程序进入就绪状态,并向服务器程序登记。

2.玩家可选择开始时,游戏开始。

游戏程序进入开始状态,玩家即开始棒打猪头游戏。

3.游戏中的棒由玩家的鼠标控制,即玩家的鼠标进入web页面的游戏区时鼠标光标变成玩家的棒。

4.游戏中的猪头的出现频率有一个随机数控制,当被玩家的棒击中时猪头消失,玩家得分,并将此信息传递给服务器程序,由服务器程序将其转发给另一玩家。

5.同时,程序启动网络侦听程序,接受服务器上传来的另一玩家的实时信息,并将其打印在本地玩家的web页面的规定位置。

6.服务器监听程序,主要登记玩家的网络标示,并实时转发玩家的信息给对手。

7.当其中一玩家退出游戏时将其信息传递给服务器监听程序,则由服务器监听程序分析后,将结束游戏的信息转发给另一方,游戏结束。

Ⅱ、基于OpenGLES实现3D场景渲染,要求如下:

3D场景渲染一:

1.渲染一座房子和一个太阳,房子包括三个图元:

屋身、屋顶、烟囱,以及房子所在的地平面(灰度图地形),并实现天空盒与天空穹。

2.光源要求:

设计一个方向光源表示太阳;

3.纹理要求:

为屋身、屋顶分别贴上砖、瓦的纹理,房子前面的地贴上绿草地的纹理,并设置缩放时用到的过滤器;

4.材质要求:

为屋身、屋顶、烟囱设置合适的材质;

5.动画要求:

实现二种动画,包括:

●太阳静止,而房子绕Y轴缓慢旋转;

●房子静止,太阳模拟从早到晚的状态,东边升起,西边降落;

3D场景渲染二:

1.渲染一个室内场景,包括:

四面墙、地面及屋顶,一个吊灯,更复杂的情况可以加一扇窗户。

光源要求:

吊灯为点光源,设置光源颜色参数,开始时光源的漫反射、镜面反射、环境

2.光均为白色,强度自由设置。

要求有一个塑料或其它材质的灯罩;

3.纹理要求:

为墙、地面及屋顶设置适合的纹理,设置过滤器;

4.材质要求:

为墙、地面及屋顶设置适合的材质,特别是吊灯的灯罩,设置不同的材质使用户感觉灯罩是用不同的材料制作的;

5.动画要求:

首先将摄像机定位于房子的内部,摄像机绕Y轴缓慢旋转形成动画;

Ⅲ、小鸟爆破手机游戏:

学习cocos2d-x游戏引擎,参照一个现成流行的手机游戏来开发一个android手机游戏,通过完成Android手游的设计与实现,帮助学生更好地理论联系实际,巩固已经学到的知识,培养学生的动手编程能力、独立的思考能力和创新能力。

1.精灵封装。

精灵类封装,继承CCSprite,精灵的属性[id等],精灵的行为[即精灵Action],精灵的人工智能[碰撞检测,自动寻路等]。

2.层[CCLayer]。

将精灵添加到层中,层添加先后的控制,label的添加[添加到label上的精灵执行各自动画的同时可以执行另外一相同动画]。

3.场景[CCScene]。

最终的实现界面,将层添加到场景。

4.资源的加载与释放,应该在loading的时候加载下一个场景的资源,加载完毕后,绘制层,初始化场景。

场景切换可对资源进行释放。

可以写在析构函数中。

场景切换,replaceScene(CCscene),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)服务器:

windowsserver版操作系统

Tomcatweb服务器

3.技术要求:

1)需求分析规格说明书与用例规约;

2)系统设计,时序图,类图;

3)系统完整编码;

设计工作量:

四周

工作计划:

(1)XXXX级软件工程XX班

40课时:

知识学习

36课时:

上机编码

4课时:

答辩。

计算机系机房。

(具体时间地点老师先申请,机动安排)

 

指导教师签名:

         日期:

        

教研室主任签名:

       日期:

        

系主任签名:

         日期:

        

 

XXXX课程设计鉴定表

姓名

学号

专业

软件工程

班级

设计题目

棒打猪头网页游戏

指导教师

指导教师意见:

 

评定等级:

教师签名:

日期:

答辩小组意见:

 

评定等级:

     答辩小组长签名:

     日期:

    

教研室意见:

 

教研室主任签名:

日期:

 

系(部)意见:

 

系主任签名:

        日期:

     

说明

课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

摘要

本软件是要运用java语言开发一款网页版的棒打猪头游戏,该游戏可以实现多个玩家联机玩。

实现网页版游戏首先需要实现单机版游戏,在单机版的基础上添加基于连接的Socket通信。

单机版的实现主要需要四个类的实现,主类、锤子精灵类,猪头精灵类和锤子、猪头的父类。

在锤子精灵和猪头精灵类中分别实现了对各自对象的绘制和一些基本的操作。

猪头精灵类还涉及随机出现、碰撞检测的算法。

主类实现了鼠标接口、鼠标移动接口和线程接口,对这些接口的每个抽象方法进行具体实现。

在鼠标按下方法中实现锤子状态、猪头状态的变化和碰撞检测。

在鼠标抬起方法中实现锤子状态的变化。

鼠标移动中实现因鼠标的位置而设置锤子的位置。

在线程的run()方法中控制猪头的随机出现。

经过以上步骤单机版基本完成,下面是网页版实现的步骤。

网页版的实现第一步需要实现客户端和服务器端的连接,在服务器端生成ServerSocket对象在特定的端口实现监听服务,等待客户端的请求,客户端在特定端口创建Socket对象向服务器端创建连接,服务器端接收客户端的请求用返回的Socket建立连接。

第二步把鼠标按下、鼠标抬起、鼠标移到的信息进行封装发送给服务器端,服务器端经过接收到客户端发来的信息,再进行解码把信息发回给另一个客户端。

另一个客户端接收到信息后进行解码,做相应的操作来驱动另一个锤子的运动。

经过以上步骤最终实现的功能有:

自己这一方可以把信息发送给服务器端,服务器端可以把信息返回给对方,对方可以接收服务器端的发来的信息但是不能驱动锤子运动。

关键词:

Socket,鼠标接口、鼠标移动接口、线程接、ServerSocket、解码

 

目录

1设计内容与要求1

2游戏设计的需求分析2

2.1功能需求2

2.2数据需求3

2.3性能需求4

3游戏系统概要设计5

3.1游戏数据设计5

3.2游戏结构设计5

3.3游戏功能模块设计6

3.4游戏流程图9

4游戏系统详细设计11

4.1设计说明11

4.2类图12

4.3时序图13

4.4编码实现13

5结论15

参考文献17

 

1设计内容与要求

用java语言实现网页版棒打猪头游戏。

客户端采用javaApplet技术,服务器端要有服务器监听窗口和服务器端Socket窗口,服务器端和客户端相互通信。

控制鼠标来控制玩家的锤子状态,最少出现九个猪头,猪头随机出现,各方玩家的猪头、锤子都要实现同步出现,有计分功能,点击按钮断开客户端与服务器端的连接,服务器不能在接收到客户端的信息。

 

2游戏设计的需求分析

2.1功能需求

我们设计的游戏是采用客户机/服务器模式的游戏,游戏在客户端采用就阿Java小应用程序(即:

JavaApplet)技术进行开发,并将其嵌套在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重载函数

所有的JavaApplet程序中都必须都必须有一个系统类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(Graphicsg)用来绘制锤子,updatesrit()用来改变锤子状态。

猪头类(PigSprit)中的painsprit(Graphicsg)用来绘制猪头、updatesrit()用来控制猪头的随机出现,hit()为碰撞检测。

锤子类和猪头类的父类(SurperSprit)中定义了锤子和猪头共有的一些属性和方法。

Listen类是个线程类主要用来接收服务器端发送回来的消息,以此来驱动另一玩家的锤子运动,保持两个玩家锤子的同步。

Server类是服务器端,功能是接收玩家发来的消息再把信息发送给另一玩家。

服务器端有两个窗口:

监听服务窗口,用来监听客户端是否发出建立连接的请求。

服务器端socket窗口,接收客户端的消息。

 

4.2类图

图4.1类图

Surprit类是PigSprit和HammerStyle的父类,Listen、Server、HitPigHead之间是相互依赖关系,HitPigHead是主类,客户端的主要实现都在这个类中实现。

 

4.3时序图

玩家进入游戏界面操作鼠标,客户端把鼠标信息发给服务器,服务器接收到信息后把信息发给另一玩家,另一玩家接收到服务器的信息驱动自家锤子运动,不需玩时点击按钮断开客户端、服务器端的连接,退出游戏。

 

4.4编码实现

1.客户端、服务器端建立连接

socket=newSocket(InetAddress.getLocalHost(),8000);//使用端口号8000实例化本地套接字

InetAddressclientAddress=connectedClient.getInetAddress();

ServerSocketm_sLitener;

m_sLitener=newServerSocket(Port,Count);

Socketconnected=m_sLitener.accept();

建立连接首先要在服务器端生成一个ServerSocket对象来监听客户端的请求,再在客户端的特定端口号生成socket套接字向服务器端发出请求,服务器端用Socketconnected=m_sLitener.accept();来返回客户端的socket,用InetAddressclientAddress=connectedClient.getInetAddress();得到客户端的地址,客户端与服务器端建立好连接。

2.客户端向服务器端发送消息

out=newPrintWriter(socket.getOutputStream());//将out指向socket的输出流

//若连接将鼠标移动的消息发送给服务器

if(socket!

=null){

Stringstr="鼠标移动"+e.getX()+""+e.getY();

out.println(str);

out.flush();

}

//若连接将mouse左击的消息发送给服务器

if(socket!

=null){

Stringstr="左键按下"+e.getX()+""+e.getY();

out.println(str);

out.flush();

}

//若连接将mouse松开的消息发送给服务器

if(socket!

=null){

Stringstr="左键抬起";

out.println(str);

out.flush();

}

发送消息首先需生成一个输出流out将消息发送给服务器端。

当客户端与服务器端连接时再把鼠标按下、鼠标抬起、鼠标移动的消息封装成一个字符串用out.println(str);out.flush();把消息发送给服务

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2