java技术在游戏开发的应用本科毕业论文.docx
《java技术在游戏开发的应用本科毕业论文.docx》由会员分享,可在线阅读,更多相关《java技术在游戏开发的应用本科毕业论文.docx(56页珍藏版)》请在冰豆网上搜索。
java技术在游戏开发的应用本科毕业论文
毕业论文声明
本人郑重声明:
1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。
除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。
对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。
本人完全意识到本声明的法律结果由本人承担。
2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。
本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。
3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。
4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。
论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。
论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。
学位论文作者(签名):
年月
关于毕业论文使用授权的声明
本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。
本人完全了解大学有关保存,使用毕业论文的规定。
同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。
本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。
如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。
本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。
本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:
按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入学校有关数据库和收录到《中国学位论文全文数据库》进行信息服务。
在不以赢利为目的的前提下,学校可以适当复制论文的部分或全部内容用于学术活动。
论文作者签名:
日期:
指导教师签名:
日期:
本科毕业论文
题目JAVA技术在游戏开发中的应用
华中师范大学汉口分校
学位论文原创性声明
本人郑重声明:
所呈交的学位论文是本人在导师指导下独立进行研究工作所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
本人完全意识到本声明的法律后果由本人承担。
学位论文作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保障、使用学位论文的规定,同意学校保留并向有关学位论文管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
本学位论文属于
1、保密□,在_____年解密后适用本授权书。
2、不保密□。
(请在以上相应方框内打“√”)
学位论文作者签名:
日期:
年月日
导师签名:
日期:
年月日
内容摘要:
J2ME是随着移动通信设备的飞速发展而诞生了一项新开发技术。
它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“WriteOnce,runanywhere”的Java特性而提高开发的效率。
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本文简单的介绍了Java技术在游戏开发中的应用,并以选取各个游戏中的实例对技术进行阐述。
文章主要介绍了广泛应用于游戏开发中的一下技术:
APPLET,JavaIO流,多线程,事件处理,绘图,GUI的设计等。
关键词:
JavaJ2ME游戏
Abstract:
J2MEisamobilenewtechnology,whichbirthwiththerapiddevelopmentcommunicationsequipment.Itspositioninconsumerelectronicsapplications,intelligentequipment,diversification,providesarevolutionarysolution,andbecauseofits"WriteOnce,runanywhere"natureofJavatoincreasetheefficiencyofdevelopment.Withtheincreasingpopularityofmobilephones,Javafunctionintherealizationofmobiledevices,Javaapplicationsmobilevalue-addedservicesgeneratedbythegradualmanifestationofitsinfluence,toenrichthecontentofpeople'slives,providingeasieraccesstoinformation.
ThisarticledescribesasimpleJavatechnologyinthegamedevelopmentapplication,andtoselectexamplesofthevariousgamesonthetechnologyon.Themainarticleonthewidelyusedingamedevelopmenttechnologyofclick:
APPLET,JavaIOstream,multi-threaded,eventhandling,graphics,GUIdesign,etc.
Keywords:
JavaJ2MEGameDevelopment
1绪论
1.1问题的提出及研究意义
J2ME(Java2MicroEditio)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。
它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“WriteOnce,runanywhere”的Java特性而提高开发的效率。
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
而Java游戏在手机软件中占有很大的比例。
Java游戏成为IT产业中增长最快的部分之一.纵观IT产业的历史,计算机游戏已经成为技术创新背后的动者,渴望更加强大的硬件计算能力,渴望不受不同的软件的限制。
游戏开发者和玩家常常是前沿计算机技术的最早的采用者。
随着技术对游戏经验的促进,游戏市场持续增长。
计算机游戏和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。
甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。
对Java游戏开发技术的研究,不仅可以促进Java移动开发的发展,而且可以创造出更多的游戏,为用户提供更多的娱乐和体验。
1.2Java技术在游戏开发中的应用分析
Java技术自1995年问世以来,在我国的应用和开发也得到了迅速普及,总体来看,这些应用主要集中于企业应用开发。
据有关单位调查显示,从开发领域的分布情况上看Web开发占了一半以上,为57.9%,JavaME移动或嵌入式应用占15%,C/S应用占11.7%,系统编程占15.4%。
近30%的开发者用Java从事C/S应用或系统级应用的开发。
在桌面应用上,尽管Java在桌面GUI方面尚有不尽如人意之处,但仍然有很多开发者用来开发运行在多种操作系统平台上的桌面应用
而Java在游戏开发上的应用有着很大的优势,凭借其“无平台相关性”,它可以实现“一处编写,多处运行“,占领了可移动设备游戏开发的重大比例;它的网络技术,为游戏开发中的网络连接也提供了技术保证;而随着Java2D、Java3D技术的流行,游戏中的图形开发,为游戏提供了完美的画面;AWT,SWING技术则广泛应用与GUI的开发,为用户提供友好的界面;多线程技术则为游戏流畅的画面作出了贡献。
Java的其他技术也深入的应用在游戏开发中,在此不一一列举了。
1.3课题的主要研究内容
Java技术面庞大复杂,应用广泛,深入各种领域。
基于Java的游戏开发技术很多,不管是个人计算机、网络、还是移动设备,都可以看到Java游戏的存在。
本论文着眼于Java技术在游戏开发中的应用,选取Java游戏开发最流行和重要的技术进行讨论,对广泛应用于Java游戏开发的绘图技术,IO技术,交互界面开发技术,多线程技术,Java2D技术,网络技术进行了介绍,并引用具体的实例进行分析。
其多线程技术、Java2D技术、网络技术为重点介绍的技术,其在Java游戏开发中占有很重要的地位,是游戏开发中不可或缺的一环。
而对于人工智能技术,由于水平有限、篇幅问题,在此只做简单的介绍。
2相关的理论、技术基础
2.1Java简介
Java是Sun公司推出的一种编程语言。
它是一种通过解释方式来执行的语言,语法规则和C++类似。
同时,Java也是一种跨平台的程序设计语言。
用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。
Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。
Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。
Java摈弃了C++中各种弊大于利的功能和许多很少用到的功能。
Java可以运行与任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。
Java的特点Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。
具体来说,它具有如下特性:
简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
2.2面向对象
面向对象其实是现实世界模型的自然延伸。
现实世界中任何实体都可以看作是对象。
对象之间通过消息相互作用。
另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。
如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。
用公式表示,过程式编程语言为:
程序=算法+数据;面向对象编程语言为:
程序=对象+消息。
所有面向对象编程语言都支持三个概念:
封装、多态性和继承,Java也不例外。
现实世界中的对象均有属性和行为,映射到计算机程序上,属性则表示对象的数据,行为表示对象的方法(其作用是处理数据或同外界交互)。
所谓封装,就是用一个自主式框架把对象的数据和方法联在一起形成一个整体。
可以说,对象是支持封装的手段,是封装的基本单位。
Java语言的封装性较强,因为Java无全程变量,无主函数,在Java中绝大部分成员是对象,只有简单的数字类型、字符类型和布尔类型除外。
而对于这些类型,Java也提供了相应的对象类型以便与其他对象交互操作。
多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。
举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。
不管存储的是何种数据,堆栈的算法实现是一样的。
针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
运算符重载(operatoroverload)一直被认为是一种优秀的多态机制体现,但由于考虑到它会使程序变得难以理解,所以Java最后还是把它取消了。
继承是指一个对象直接使用另一对象的属性和方法。
事实上,我们遇到的很多实体都有继承的含义。
例如,若把汽车看成一个实体,它可以分成多个子实体,如:
卡车、公共汽车等。
这些子实体都具有汽车的特性,因此,汽车是它们的"父亲",而这些子实体则是汽车的"孩子"。
Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。
与另外一些面向对象编程语言不同,Java只支持单一继承。
2.3平台无关性
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
平台无关有两种:
源代码级和目标代码级。
C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。
Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。
JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。
但JVM通常是在软件上而不是在硬件上实现。
(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。
另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。
)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。
Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码。
任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的(过程如图1所示)。
另外,Java采用的是基于IEEE标准的数据类型。
通过JVM保证数据类型的一致性,也确保了Java的平台无关性。
Java的平台无关性具有深远意义。
首先,它使得编程人员所梦寐以求的事情(开发一次软件在任意平台上运行)变成事实,这将大大加快和促进软件产品的开发。
其次Java的平台无关性正好迎合了"网络计算机"思想。
如果大量常用的应用软件(如字处理软件等)都用Java重新编写,并且放在某个Internet服务器上,那么具有NC的用户将不需要占用大量空间安装软件,他们只需要一个Java解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,运行结果也可以发回服务器。
目前,已有数家公司开始使用这种新型的计算模式构筑自己的企业信息系统。
2.4可靠性和安全性
Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。
Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。
首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界,最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务便于恢复。
由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。
如果没有安全保证,用户从网络下载程序执行就非常危险。
Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏。
当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。
最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统。
上述几种机制结合起来,使得Java成为安全的编程语言。
2.5多线程
线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。
C和C++采用单线程体系结构,而Java却提供了多线程支持。
Java在两方面支持多线程。
一方面,Java环境本身就是多线程的。
若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。
Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态。
Java的线程还包括一组同步原语。
这些原语负责对线程实行并发控制。
利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。
必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。
例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。
3Java技术在游戏开发中的应用
3.1Applet中的绘图技术
Applet程序中所采用的AWT的绘图机制主要涉及三个方法:
paint()方法、update()方法和repaint()方法,update()方法和paint()方法都有一个Graphics类参数。
Graphics是画图的关键,它可以支持两种绘图:
一种是基本的绘图,如:
画线、矩形、圆等;另一种是画图象,主要用于动画制作。
要进行绘图,首先要找到一个Graphics类的对象。
update()方法和paint()方法所传递的参数都是Graphics类的对象,因此主要是通过重载它们来进行绘图,这是在动画程序中经常使用的方法。
我们还可以通过getGraphics()方法得到一个Graphics类的对象,这个对象和update()方法和paint()方法中所传递的对象一样,都是该成员所对应的Graphics类的对象。
得到了Graphics类的对象,就可使用各种绘图方法。
Graphics中提供的图形绘制方法有:
paint()//进行绘图的具体操作,必须有程序员重写
update()//用于更新图形,先清除背景、前景,再调用paint()
repaint()/*用于重绘图形,在组件外形发生变化,即大小改变或位置移动时,repaint()方法立即被系统自动调用,而实际上repaint()方法是自动调用update()方法*/
下面的方法支持基本的绘图和画图像:
voiddrawLine()
voiddrawArc()
voiddrawPolygon()
voiddrawRect()
voiddrawRoundRect()
voidfill3DRect()
voidfillOval()
实例1:
Applet的AWT绘制:
classArcCanvasextendsCanvas{//类ArcCanvas
intstartAngle=0;
intendAngle=45;
booleanfilled=false;
Fontfont;
publicvoidpaint(Graphicsg){
//paint方法,该方法的作用是在Canvas上画图
Rectangler=getBounds();
inthlines=r.height/10;
intvlines=r.width/10;
g.setColor(Color.pink);
for(inti=1;i<=hlines;i++){
g.drawLine(0,i*10,r.width,i*10);
}
for(inti=1;i<=vlines;i++){
g.drawLine(i*10,0,i*10,r.height);
}
g.setColor(Color.red);
if(filled){
g.fillArc(0,0,r.width-1,r.height-1,startAngle,endAngle);}
else{g.drawArc(0,0,r.width-1,r.height-1,startAngle,endAngle);
}
g.setColor(Color.black);
g.setFont(font);
g.drawLine(0,r.height/2,r.width,r.height/2);
g.drawLine(r.width/2,0,r.width/2,r.height);
g.drawLine(0,,0,r.width,r.height);
g.drawLine(r.width,0,0,r.height);
intsx=10;
intsy=r.height-28;
g.drawString(“S=”+startAngle,sx,sy);
g.drawString(“E=”+ednAngle,sx,sy+14);
}
publicvoidredraw(booleanfilled,intstart,intend){//重画方法
this.filled=filled;
this.startAngle=start;
this.endAngle=end;}
3.2游戏开发中的交互
一个优秀的游戏必定是与玩家不断的沟通,给予玩家充分的操作时间,而游戏又必须快速地,正确的对玩家的动作作出反映,否则这样的游戏,不能称为一个好游戏。
所以说,游戏开发中的交互与其他技术有着相同的地位,是一个游戏必备的核心。
在Java游戏的开发中,往往使用事件处理器来进行设计。
1.事件:
用户对程序的某一种功能性操作。
Java中的事件[3]主要有两种:
1)组件类事件
componentEvent、ContainerEvent、WindowEvent、FocusEvent、PaintEvent、MouseEvent共六大类,
它们均是当组件的状态发生变化时产生。
2)动作类事件
ActionEvent、TextEvent、AdjustmentEvent、ItemEvent共四类。
它们均对应用户的某一种功能性操作动作。
Java中的事件类都包含在JDK的Java.awt.event包中。
2.事件编程:
用户编程定义每个特定事件发生时程序应做出何种响应,并且这些响应代码会在对应的事件发生时由系统自动调用。
事件委托授权处理模型
JDK1.1以上版本实现了事件委托授权处理模型的机制。
1)事件源:
产出事件的组件。
2)监听器:
对组件所产生的事件作出具体响应的代吗,即事件产出与处理分别由两个不同类(它们可以分别放在不同的程序中)加以编程实现。
3)事件处理机制:
AWT组件自身不编程处理相应的事件,面是交由事件监听器(它可以是组件所在的容器类或另外的Ja