赛车游戏文档.docx
- 文档编号:7579645
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:15
- 大小:146.23KB
赛车游戏文档.docx
《赛车游戏文档.docx》由会员分享,可在线阅读,更多相关《赛车游戏文档.docx(15页珍藏版)》请在冰豆网上搜索。
赛车游戏文档
目录
第一章绪论3
1.1手机游戏的文化和业务3
1.1.1手机游戏的文化3
1.1.2手机游戏的业务4
1.2移动平台简介4
1.3关于本课题5
第二章开发环境与主要技术6
2.1开发平台6
2.1.1Eclipse6
2.1.2WirelessToolkit7
2.2主要技术7
2.2.1J2ME技术概述7
2.2.2MIDlet内部结构8
2.2.3基于MIDP的图像绘制技术9
第三章系统需求分析11
3.1运行平台11
3.2界面要求11
3.3速度要求11
3.4游戏具体需求11
第四章系统设计与实现13
4.1整体框架13
4.1.1游戏流程图13
4.1.2游戏程序类设计13
4.1.3文件结构14
4.2代码实现14
4.2.1游戏的启动管理14
4.2.2游戏的资源加载15
4.2.3设定对手汽车的随机位置16
4.2.4道路滚动17
4.2.5碰撞检测17
4.2.6游戏结束界面显示18
第五章游戏测试20
5.1打包20
5.2下载测试20
第六章总结23
6.1项目设计总结23
6.2团队总结23
致 谢25
参考文献26
第一章绪论
本章主要对发展中的赛车游戏进行介绍,并对当前流行的移动平台进行简单的介绍。
1.1手机游戏的文化和业务
手机游戏的发展远远落后于相应的PC机上的游戏,主要的困难在于移动设备的处理能力。
但是由于掌上电脑和手机的最新发展正在快速改变这种现象,它们具备真正的计算能力但却小得可以放到随身口袋中。
当前的移动游戏已经形成自己独有的文化和业务。
1.1.1手机游戏的文化
短消息已经从全球范围内把我们联系起来,它的直接性超出了我们的想象;同样,手机游戏也搭建了一个舞台对视频游戏的全部概念进行转换,其效果会令人震惊。
这种游戏随着3G时代的到来已经悄然的在我们的身边出现。
现在全球范围的多玩家网络游戏的思想并非新东西,人们在他们的桌面电脑上干这种事情已经很多年了。
但那需要网络连接到其他的计算机,而这些计算机都很大无法自由移动。
即使最轻巧的笔记本电脑也需要放置到平缓的表面上,还需要接入某种无线网络。
手机则能够装入的口袋中,并且默认地处于无线连接状态。
它们使得轻松地加入和退出多玩家网络游戏成为可能。
通过创建一个让游戏玩家来去更加自由的环境,随着游戏和相关技术的成熟,手机游戏的公共性方面可能成为最大的吸引力之一。
手机通信已经使得世界变得很小,而手机游戏则充当允许人们一起玩游戏而不关心其实际位置,从而使这种情况达到一种新的水平。
手机游戏不但能够克服地理位置的障碍,而且能够突破语言和文化的障碍。
人们不需要说相同的语言,也能够一起玩贪吃蛇。
人们会设计出更多更富创意的游戏,从而游戏玩家之间的文化差异变得最小化。
1.1.2手机游戏的业务
纵观IT产业的历史,计算机游戏已经成为技术创新背后的动力之一。
1998年诺基亚公司年发布了全球第一款手机游戏—“变色龙6110”,内置贪食蛇、记忆力和逻辑猜图游戏,受到了全世界的欢迎,其他厂商纷纷跟进。
游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制——无论是将图形强制在人工智能(AI)上还是网络安全性,因此,手机游戏将有更加广阔的前景。
1.2移动平台简介
主流的移动平台,Java2MicroEdition(J2ME);所有这种平台都得到了当前手机的支持,并且它们都以免费文档和工具的方式提供对开发者的支持。
J2ME是Sun微系统公司流行Java编程语言的紧凑版本。
J2ME包括一组开发工具和丰富的应用程序接口(API)以供开发手机应用程序,人们称为MIDlet。
1.3关于本课题
本课题将在手机上实现一个单机版的赛车游戏,实现玩家赛车与对手赛车的对战。
本游戏使用J2ME技术构建了一个基本的游戏,并利用人工智能技术实现了智能策略。
第二章开发环境与主要技术
本章主要对以Eclipse为核心的J2ME开发环境进行介绍,并对该课题开发过程中需要的J2ME技术、游戏人工智能技术和游戏基础进行详细介绍。
2.1开发平台
本游戏的开发平台为:
操作系统:
MicrosoftWindowsXP
程序语言:
Java
开发包:
Java开发工具包(jdk-6u24-windows-i586)
模拟器:
sun_java_wireless_toolkit-2_5_2-windows
开发工具:
Eclipse
关于本游戏的开发环境安装配置过程比较简单,在此不再赘述。
总体来说,JDK提供了虚拟机来运行应用程序,而WTK提供了模拟器,Eclipse及其它插件提供了开发测试程序代码的IDE集成开发环境
2.1.1Eclipse
尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。
Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
2.1.2WirelessToolkit
WTK(WirelessToolKit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。
它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。
虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。
2.2主要技术
2.2.1J2ME技术概述
1999年6月,Sun正式向Java团体推出了J2me,并重新划分了Java2的体系结构,目前主要包括面向桌面应用开发的Java2平台标准版(Java2PlatformStandardEdition,J2SE)、面向企业应用开发的Java2平台企业版(Java2PlatformEnterpriseEdition,J2EE)、面向消费产品和嵌入式设备应用开发的Java2平台微型版(Java2PlatformMicroEdition,J2ME)和Java卡平台。
Java技术的体系
J2EE、J2SE和J2ME构成了Java的完整构架。
至此,Java已经由单纯的编程语言发展到一种平台的高度。
这三者的结合,可以将从服务器到台式机到移动设备的应用开发集中到一种技术之下。
目前,J2ME平台主要包括两个配置:
CLDC和CDC。
ØCLDC是两个配置中较小的一个,为具有间断性联网能力、较慢的处理器和有限内存的设备设计的。
这些设备包括移动电话、双工呼叫器和入门级的PDA,它们通常具有16位或32位的CPU、128KB~512KB可用于Java平台实现和相关应用程序的内存。
ØCDC是为处理器能力较强、内存空间更大、联网能力更出色的设备设计的。
这些设备包括电视机顶盒、车载娱乐系统和高端PDA等。
CDC包括一个具有完备特性的Java虚拟机,比CLDC更大的J2SE平台的子集。
CDC的目标设备通常具有32位或者64位的处理器,2MB以上的可用于Java平台实现和相关应用程序的内存。
移动信息设备简表(MIDP)是为移动电话和入门级PDA设计的。
它为移动应用程序提供了所需的全部核心功能,包括应用程序模型、用户界面、持久性数据储存、联网能力(在CLDC中定义,在MIDP中实现)及应用程序管理。
目前应用非常广泛的MIDlet就是在MIDP中定义的。
CLDC与MIDP组成的完备Java运行环境提升了手持设备的能力,并且尽可能最小化了设备内存和电源的消耗。
2.2.2MIDlet内部结构
MIDlet是用J2MEAPIs开发的程序,用于移动计算环境中。
MIDlet需要一个特殊的运行环境。
这个环境主要包含一个应用程序管理器,它为在移动设备上选择和运行MIDlet提供方便。
每个MIDlet都是从同一个标准类中派生出来的。
这个标准类是MIDPAPI的组成部分,位于包javax.microedition.midlet中,叫做MIDlet类。
MIDlet类定义了几个方法,其中3个方法对开发MIDlet特别重要:
ØstartApp()—启动MIDlet;
ØpauseApp()—暂停MIDlet;
ØdestroyApp()—销毁MIDlet;
MIDlet对应三个状态:
Active(激活)、Paused(挂起)和Destroyed(销毁),它们决定了MIDlet如何发挥作用。
这些状态直接对应上述三个方法。
2.2.3基于MIDP的图像绘制技术
在没有MIDP2.0前,游戏绘图一般需要手动编程使用双缓冲。
需要在paint()方法内将所想要画的图形画在一张预先准备好的背景上,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。
Image类提供了一个建立背景的静态方法createImage(intwidth,intheight),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。
在MIDP2.0版本发布后,游戏移植性问题初步得到了解决。
MIDP2.0新加入了GameCanvas、Sprite、Layer、LayerManager、TiledLayer五个与游戏开发相关的类,其中Layer类一般不会直接用到。
GameCanvas类继承自Canvas,所以具有Canvas所具有的功能,还额外增加了一些便于游戏设计的功能。
Sprite是游戏精灵的意思是Layer的子类,当然也有Layer的所有功能。
第三章系统需求分析
本章主要对系统的运行平台、界面、速度和游戏的各种规则进行需求分析。
3.1运行平台
本游戏属于一款单屏幕动作类游戏,目标运行平台为所有支持CLDC1.1、MIDP2.0,屏幕分辨率不小于320×240的手机设备,并要求在各型号手机上均有良好的兼容性。
3.2界面要求
参照PC机上的赛车游戏,要求精致、美观,游戏角色形象可爱。
3.3速度要求
要求在满足平台需求的各手机上运行时画面流畅,操作无明显延迟感。
3.4游戏具体需求
该游戏具有如下功能:
Ø玩家赛车与游戏赛车在赛道上比赛,在行驶过程中会遇到各种各样的行车,玩家要尽量避开不与他们碰撞,因为每次碰撞都会减少生命值,行车随机出现。
如果用户车辆和行车相撞,则扣1分。
分数在屏幕上方显示出来。
用户可以用“上下左右”键来避开。
Ø在屏幕右下方有一个命令按钮:
暂停游戏。
点击按钮,暂停游戏;命令按钮变为:
开始游戏,如果再点击按钮,游戏继续进行。
Ø每个赛车都有相同的生命值和能量值,如果分数减小到0,游戏结束,系统提示:
“您输了”,并退出游戏。
第四章系统设计与实现
本章主要对游戏的整体框架进行设计,并对本游戏进行代码实现,具体包括:
游戏的启动界面、游戏赛车加载、道路滚动、碰撞检测、键控处理等。
4.1整体框架
4.1.1游戏流程图
本游戏的主要流程图如下所示:
图4-1游戏流程
4.1.2游戏程序类设计
游戏开发过程完全基于面向对象思想,使各个模块的功能尽可能的独立,游戏共设计2个类。
类的结构如图4-2所示。
图4-2游戏类结构图
4.1.3文件结构
本游戏的文件层次结构如图4-3所示。
图4-3游戏文件层次结构图
4.2代码实现
4.2.1游戏的启动管理
CarRaceMIDlet实例构造后自动调用startApp()方法,在这个方法中我们生成了一个Canvas,利用Display类的API方法setCurrent()方法把该画布设置为当前界面。
//游戏的启动
publicclassCarRaceMIDletextendsMIDlet{
privateCarRaceCanvascanvas=newCarRaceCanvas();
privateDisplaydis;
protectedvoidstartApp()throwsMIDletStateChangeException{
dis=Display.getDisplay(this);
dis.setCurrent(canvas);
}
protectedvoidpauseApp(){}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{}
}
4.2.2游戏的资源加载
加载游戏资源,加载玩家赛车、赛道上的行车图片。
这些工作主要是在prepareResource()方法中完成.
//加载资源
try{
ImagemyImage=Image.createImage("/mycar.gif");
myCar=newSprite(myImage);
for(inti=0;i ImageenImg=Image.createImage("/enemy.gif"); enemy[i]=newSprite(enImg); } }catch(Exceptionex){ ex.printStackTrace(); 4.2.3设定对手汽车的随机位置 初始化游戏并绘制游戏的各个部分: 加载赛道数据、玩家赛车、赛道上的行车出现的随机位置等。 这些工作主要是在setEnemy()方法中完成. //汽车随机出现 publicvoidsetEnemy(inten){ intx,y; while(true){ x=rnd.nextInt((int)this.getWidth()-enemy[en].getWidth()); //取纵坐标为界面高度-10倍范围内的随机数 y=-rnd.nextInt(this.getHeight()*10); for(intj=0;j //不能让汽车和别的对手汽车重叠 if(j! =en&&enemy[j].collidesWith(enemy[en],true)){ continue; } } enemy[en].setPosition(x,y); break; } } 4.2.4道路滚动 赛车之所以叫做赛车,就是因为车在动。 而在游戏中,为了实现车在动的效果,一般采用的方案是让道路滚动。 在本游戏中,其实,道路并没有滚动。 道路中间的白线一直在移动,产生滚动的效果。 privateintroad; publicvoiddrawRoad(){ road+=80; //画道路中间的白线 gra.setColor(245,245,245); gra.fillRect((int)this.getWidth()/2-10,road,20,150); if(road>=this.getHeight()){ road=-150; } } 4.2.5碰撞检测 游戏中很重要的一个地方是碰撞检测,主要是游戏主角与敌人的碰撞判断、游戏主角与游戏中其他角色的碰撞判断。 在本游戏中由于行车均是根据赛道来行驶的,赛车和行车不会与赛道旁的景物碰撞,所以在这里主要考虑玩家赛车与行车之间的碰撞检测。 我们知道当两辆车并行行驶时,它们之间的水平距离小到一定程度时就可以认为认为它们几经相撞了。 本游戏中通过两辆赛车的x坐标值之差来检测此种情形的发生,此时的处理代码如下: publicvoidcheck(Spriteen){ if(myCar.collidesWith(en,true)){ score--; //如果用户汽车左侧撞到对手汽车 if(myCar.getX()>en.getX()){ en.move(-20,0); myCar.move(20,0); } //如果用户汽车右侧撞到对手汽车 else{ en.move(20,0); myCar.move(-20,0); } } } 4.2.6游戏结束界面显示 游戏结束时,显示玩家赛车胜负情况,玩家所得分数 if(score==0){ loop=false; game=null; //将界面背景用灰色清空 gra.setColor(120,120,120); gra.fillRect(0,0,this.getWidth(),this.getHeight()); gra.setColor(255,255,0); gra.setFont(font); gra.drawString("您输了", this.getWidth()/2,0, Graphics.TOP|Graphics.HCENTER); gra.drawString("你的分数是"+j,this.getWidth()/2,this.getHeight()/3,Graphics.TOP|Graphics.HCENTER); this.removeCommand(cmdStart); this.removeCommand(cmdStop); } 第五章游戏测试 5.1打包 EclipseME插件提供了直接将程序打包成JAR的方法,并同时生成与之配合的JAD文件。 如下图所示,对项目点击右键,选择J2ME,在展开的下一级菜单中选择CreatePackage可以制作普通JAR包。 生成的JAR和JAD文件将保存在项目文件夹的deployed目录下。 图5-1使用EclipseME打包界面 5.2下载测试 在WTK2.5.1中模拟器下载测试时的游戏运行情况如下图所示。 图5-2WTK游戏运行界面 图5-3WTK游戏结束界面 第六章总结 6.1项目设计总结 本设计的最大难点就是由于游戏是在WTK中开发运行,程序抛出异常之后很难查找到错误的根本所在,所以经常会因为一个小的语法或逻辑错误而导致系统某功能无法正常运行。 总结本游戏主要有以下几点: Ø对手汽车随机给定一个位置,不能让两个对手汽车的位置重叠了,那样游戏就失真了。 Ø赛车之所以叫做赛车,就是因为车在动。 而在游戏中,为了实现车在动的效果,一般采用的方案是让道路滚动。 Ø碰撞后,车辆必须避让,否则就会出现一辆车从另一辆车的上方飞过去,游戏失真。 因此,我们可以在碰撞时,让对手的车和用户的车各自左右移动一个位置。 Ø游戏的难度是一个设计上的选择,难度的增加才能激起玩家的挑战欲望。 但在这个游戏中我们设计的难度较简单,因为初次利用J2ME做设计,因此赛车功能,难度相对简单。 6.2团队总结 经过这段时期系统的开发,我们对基于J2ME手机游戏开发技术有了更深的了解和认识,掌握了J2ME具体编程中的一些技巧和方法。 本次课程设计给了我们一个独立思考和解决问题的机会,在游戏的需求分析、功能模块和各方面的设计开发中,都需要进行细致全面的思考,从中让我们学会了以前不曾接触过的知识,并且学会了怎样将书本知识转化到实际应用开发工作中去。 课程设计能够很好地提高我们的综合能力。 除了学习到了相关的技术之外,还培养了自学、独立的解决问题的能力.因此,在以后的学习生活中,要学会从实践中学习,从学习中实践.从各方面武装自已,才能在日益激烈的竞争中突显自已。 致 谢 在课程设计即将结束之际,我们要真诚地感谢指导老师及任课老师。 在整个课程设计过程中,老师给了我悉心的指导和热情的帮助。 在课程设计开发过程中,老师始终在百忙之中为我在课程设计中遇到的问题给予解答,使我们的课程设计能够顺利地进行下去,在系统开发即将结束时,老师很负责地给我们提出了很多改进意见,并帮助我们一起解决遇到的难题,使我们能够很好地完成本次课程设计,所以我们要再一次地感谢老师。 在本次课程设计过程中,我们也得到了很多同学的帮助,特别是在代码设计和程序调试过程中,他们都很热心地给出了自己的意见或者帮助我解决了一些小问题,在此也向他们表示衷心的感谢。 由于时间的仓促及自身专业水平的不足,整篇文档肯定存在尚未发现的缺点和错误。 恳请阅读此文档的老师、同学,予以指正,不胜感激! 参考文献 [1]陈旭东.主编.J2ME应用教程.北京交通大学出版社[M],2007年9月; [2]胡虚怀.J2ME移动设备程序设计.北京: 清华大学出版社,2005 [3]李振鹏.J2ME手机游戏开发技术详解.北京.清华大学出版社,2006 [4]郎锐,孙方.J2ME手机程序Eclipse开发基础.北京.机械工业出版社,2006 [5]J2ME开发文档
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 赛车 游戏 文档
![提示](https://static.bdocx.com/images/bang_tan.gif)