1、石家庄科技信息职业学院毕 业 论 文题目: 基于 J2ME 的小球快跑游戏 学 号: 090124014 姓 名: 马振东 专业班级:软件技术(游戏方向)09-24 班指导教师: 刘永伟 完成日期: 2011-12-18 1基于 J2ME 的小球快跑游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。随着 JAVA 技术的不断更新提高,J2ME 技术的出现,使得手机游戏越来越成为我们关注的焦点。J2ME 技术目前最流行的就是在制作手机游戏方面,JAVA 手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。J2ME 平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特
2、征对开发者都有很大益处。因为 J2ME 应用在不同设备上都是便携式的,他们常常可以在网络上下载和执行。本设计通过 DriftBall 和 GameView 等类进行小球快跑游戏设计,最后编程实现了全过程。关键词:J2ME DriftBall GameView2目录一、 设计内容及过程 4(1)游戏策划 4(2)设计背景. 4(3)游戏框架设计 5二、 游戏主菜单的开发 5(1)WelcomeView 类的代码框架. 5(2)WelcomeView 类的主要成员方法. 6(3)WelcomeThread 类的开发. 8(4)菜单界面的用户交互事件处理. 9三、 游戏界面模块的开发 11(1)Ga
3、meView 的成员变量. 11(2)GameThread 类的代码框架. 13(3)GameMenuThread 类的开发 . 13四、 游戏中各个图层的开发.15(1)地图图层的开发. 15(2)其他图层的开发与实现 18五、 游戏后台逻辑的开发. . 21(1)小球的运动控制 . 21(2)小球的碰撞检测 . 25六、 传感器计算模块的开发 . 27(1)BallListener 类的开发 . 27(2)RotateUtil 类的开发 . 283七、 设计总结参考文献 314一 设计内容及过程本设计针对小球快跑实现了新游戏、选关、恭喜过关,继续或冲完等过程。可以清楚的演示各个画面的切换和
4、一些游戏开发的类库。(1) 游戏策划本游戏从类型上看属于动作类通关游戏,因此在游戏开发前进行的策划中需要考虑到诸如剧情规划、关卡设计等内容剧情规划:由于本游戏主要是以玩法取胜,而不是靠游戏情节来吸引玩家,所以游戏的剧情的规划可以尽量简单或者干脆没有关卡设计:关卡设计是本游戏的一个重点,在关卡设计的时候,如何保证难易程度的循环渐进和关卡之间的互异性以及关卡的可玩性是需要重视的问题。目标受众:本游戏的操作方式十分简单,各个年龄阶段的玩家都可以快速掌握。目标平台:本游戏的目标平台为 MTK。呈现技术:本游戏的游戏画面采用了图元技术,所以地图的设计也是一个重点,同时增强了游戏的空间感。(2)设计背景
5、游戏中,首先必须要有个主应用程序类,其次,为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开。这其中需要先了解游戏中应用到的类。WelcomeView 类继承自 SurfaceView 类,其主要负责播放欢迎动画和显示游戏主菜单。GameView 类继承自 SurfaceView,其主要负责游戏主画面的渲染。GameMenuThread 负责实现游戏中菜单的逐行的效果。GameMap 类负责负责提供游戏中的地图信息,GameMap 中存储了所有关卡的信息,并对外提供了方法用于获得指定关卡的地图信息。DriftBall 类继承自 Activ
6、ity,其主要负责在不同的 View 之间进行切换,同时也负责处理用户单击屏幕事件。BaiiListener 类继承自 SensorListener 类,5气质要负责监听手机姿态的变化并将捕获到的数据传递给 RotateUtil 进行分析计算。RotateUtil 类主要负责接收手机姿态的变化数据,并根据一系列算法计算出在这种姿态下的小球的运动方向。(3) 游戏框架设计游戏基本框架图:图 1 小球快跑游戏基本框架二 游戏主菜单的开发(1) WelcomeView 类的代码框架代码如下:package wyf.wpf; /声明包语句import android.content.Context;
7、/引入相关类import android.content.res.Resources; /引入相关类import android.graphics.Bitmap; /引入相关类import android.graphics.BitmapFactory; /引入相关类import android.graphics.Canvas; /引入相关类import android.graphics.Color; /引入相关类import android.graphics.Matrix; /引入相关类import android.graphics.Paint; /引入相关类import android.vi
8、ew.SurfaceHolder; /引入相关类import android.view.SurfaceView; /引入相关类/* 该类继承自View,负责欢迎界面的绘制*/6public class WelcomeView extends SurfaceView implements SurfaceHolder.CallbackDriftBall father;WelcomeThread wt;WelcomeDrawThread wdt;Bitmap bmpBackScreen; /后台背景的动画帧Bitmap bmpStartOrQuit; /开始和退出的两个大球图片Bitmap bmpS
9、oundOption; /声音选项的两个大球图片int status = -1; /状态值,为0表示待命,1表示开始或退出按钮按下,2为显示加载中int selectedIndex = -1; /被选中的命令,只能是开始或退出int backIndex; /后台帧动画的索引Matrix m; /Matrix对象,负责int planetCoordinate= /三个球的位置数组60,120,120,300,180,220;/构造器,初始化成员变量public WelcomeView(DriftBall father) super(father);wt = new WelcomeThread(t
10、his);getHolder().addCallback(this);wdt = new WelcomeDrawThread(this,getHolder();initBitmap(father); /初始化图片this.father = father;status = 0;m = new Matrix();(2) WelcomeView 类主要成员方法代码如下:package wyf.wpf; /声明包语句import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;/引入相关类import android.ap
11、p.Activity; /引入相关类import android.graphics.Rect; /引入相关类import android.hardware.SensorManager;/引入相关类import android.media.MediaPlayer; /引入相关类import android.os.Bundle; /引入相关类import android.os.Handler; /引入相关类import android.os.Message; /引入相关类7import android.view.KeyEvent; /引入相关类import android.view.MotionE
12、vent; /引入相关类import android.view.View; /引入相关类import android.view.Window; /引入相关类import android.view.WindowManager;/引入相关类/* 该类为游戏的主类,所有的View对象在这里有所引用,主要的功能是实现游戏* 的流程控制,提供游戏需要的常量,在视图之间进行切换。*/public class DriftBall extends Activity public static final int STATUS_PLAY = 0; /游戏进行中public static final int ST
13、ATUS_PAUSE = 1; /游戏暂停public static final int STATUS_WIN = 2; /通过一关public static final int STATUS_LOSE = 3; /丢掉一条命public static final int STATUS_OVER = 4; /送完命了,游戏结束public static final int STATUS_PASS = 5; /通全关public static final int MAX_LIFE = 5; /最大生命数public static final int MAX_LEVEL = 5; /最大关卡数in
14、t level = 1; /初始状态等级为1int life = MAX_LIFE; /初始状态生命数最大Rect rectStart; /开始圆球按钮的矩形框Rect rectSoundOption; /声音选项圆球按钮的矩形框Rect rectQuit; /推出圆形按钮的矩形框Rect rectContinue; /继续游戏菜单项的矩形框Rect rectSoundAlter; /声音选项菜单项的矩形框Rect rectHelp; /帮助菜单项的矩形框Rect rectBackToMain; /回到主菜单菜单项的矩形框Rect rectGameMsgBox; /屏幕中间提示消息的矩形框Me
15、diaPlayer mpGameMusic; /游戏背景音乐MediaPlayer mpPlusLife; /加命的音乐MediaPlayer mpMissileHit; /导弹打中的音乐MediaPlayer mpGameWin; /通过了一关的音乐MediaPlayer mpGameLose; /损失一条命的音乐MediaPlayer mpBreakOut; /显示菜单和掉入陷阱以及被吃掉的音乐boolean wantSound = true; /标志位,记录是否播放音乐View currView; /记录当前显示的ViewGameView gv; /游戏视图的引用WelcomeView
16、wv; /欢迎视图的引用BallListener bl; /继承自SensorListener的监听器HelpView hv; /帮助视图/1=对源代码进行如下修改以连接SensorSimulator/ SensorManager mySensorManager;SensorManagerSimulator mySensorManager; Handler myHandler = new Handler()public void handleMessage(Message msg) /重写handleMessage方法8switch(msg.what)case 0: /0为收到来自Welcom
17、eView的开始游戏命令gv = new GameView(DriftBall.this);setContentView(gv); /设置当前ViewcurrView = gv; /记录当前ViewstartSensor(); /开启传感器图2 游戏开始界面(3) WelcomeThread 的开发代码如下:9package wyf.wpf; /声明包语句/* 该类继承自Thread,为欢迎界面的后台线程,* 负责修改相关数据,达到动画效果*/public class WelcomeThread extends ThreadWelcomeView father; /WelcomeView引用i
18、nt sleepSpan = 100; /休眠时间boolean flag = false;/构造器,接收WelcomeView对象引用public WelcomeThread(WelcomeView father)this.father = father;this.flag = true;(4) 菜单界面的用户交互事件处理代码如下:/重写的方法,用于接收和处理用户点击屏幕事件Overridepublic boolean onTouchEvent(MotionEvent event) if(event.getAction() = MotionEvent.ACTION_UP)int x=(int
19、)event.getX();int y=(int)event.getY();if(currView = wv) /当前为欢迎界面if(rectStart.contains(x, y) /点下开始的圆球wv.status = 1; /设置状态为1,有按钮按下wv.selectedIndex = 0; /设置被选中的按钮为开始按钮else if(rectSoundOption.contains(x, y) /点下切换声音的圆球wantSound = !wantSound; /切换标志位if(!wantSound) /如果当前在播放声音,停if(mpGameMusic.isPlaying()try mpGameMusic.pause(); /暂停游戏背景音乐 catch (Exception e) else if(wantSound) /如果当前没有播放声音,播放if(!mpGameMusic.isPlaying()try