版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、石家庄科技信息职业学院毕 业 论 文题目: 基于j2me的小球快跑游戏 学 号: 090124014 姓 名: 马振东 专业班级:软件技术(游戏方向)09-24 班指导教师: 刘永伟 完成日期: 2011-12-18 基于j2me的小球快跑游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。随着java技术的不断更新提高,j2me技术的出现,使得手机游戏越来越成为我们关注的焦点。j2me技术目前最流行的就是在制作手机游戏方面,java手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。j2me平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特征对开发者都有很大益处
2、。因为j2me应用在不同设备上都是便携式的,他们常常可以在网络上下载和执行。本设计通过driftball和 gameview等类进行小球快跑游戏设计,最后编程实现了全过程。关键词:j2me driftball gameview 目录一、 设计内容及过程 4(1)游戏策划 4(2)设计背景. 4(3)游戏框架设计 5二、 游戏主菜单的开发 5(1)welcomeview类的代码框架. 5(2)welcomeview类的主要成员方法. 6(3)welcomethread类的开发. 8(4)菜单界面的用户交互事件处理. 9三、 游戏界面模块的开发 11 (1)gameview的成员变量. 11 (2
3、)gamethread类的代码框架. 13 (3)gamemenuthread类的开发 . 13四、 游戏中各个图层的开发.15(1)地图图层的开发.15(2)其他图层的开发与实现18五、 游戏后台逻辑的开发. . 21 (1)小球的运动控制 . 21 (2)小球的碰撞检测 . 25六、 传感器计算模块的开发 . 27 (1)balllistener类的开发 . 27 (2)rotateutil类的开发 . 28七、 设计总结参考文献 31 一 设计内容及过程本设计针对小球快跑实现了新游戏、选关、恭喜过关,继续或冲完等过程。可以清楚的演示各个画面的切换和一些游戏开发的类库。(1) 游戏策划本游
4、戏从类型上看属于动作类通关游戏,因此在游戏开发前进行的策划中需要考虑到诸如剧情规划、关卡设计等内容剧情规划:由于本游戏主要是以玩法取胜,而不是靠游戏情节来吸引玩家,所以游戏的剧情的规划可以尽量简单或者干脆没有关卡设计:关卡设计是本游戏的一个重点,在关卡设计的时候,如何保证难易程度的循环渐进和关卡之间的互异性以及关卡的可玩性是需要重视的问题。目标受众:本游戏的操作方式十分简单,各个年龄阶段的玩家都可以快速掌握。目标平台:本游戏的目标平台为mtk。呈现技术:本游戏的游戏画面采用了图元技术,所以地图的设计也是一个重点,同时增强了游戏的空间感。(2)设计背景 游戏中,首先必须要有个主应用程序类,其次,
5、为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开。这其中需要先了解游戏中应用到的类。welcomeview类继承自surfaceview类,其主要负责播放欢迎动画和显示游戏主菜单。gameview类继承自surfaceview,其主要负责游戏主画面的渲染。gamemenuthread负责实现游戏中菜单的逐行的效果。gamemap类负责负责提供游戏中的地图信息,gamemap中存储了所有关卡的信息,并对外提供了方法用于获得指定关卡的地图信息。driftball类继承自activity,其主要负责在不同的view之间进行切换,同时也负责处理
6、用户单击屏幕事件。baiilistener类继承自sensorlistener类,气质要负责监听手机姿态的变化并将捕获到的数据传递给rotateutil进行分析计算。rotateutil类主要负责接收手机姿态的变化数据,并根据一系列算法计算出在这种姿态下的小球的运动方向。(3) 游戏框架设计游戏基本框架图: 图1 小球快跑游戏基本框架二 游戏主菜单的开发(1) welcomeview类的代码框架代码如下:package wyf.wpf;/声明包语句import android.content.context;/引入相关类import android.content.res.resources;
7、/引入相关类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.view.surfaceholder;/引入相关类import android.view.surface
8、view;/引入相关类/* * 该类继承自view,负责欢迎界面的绘制 */public class welcomeview extends surfaceview implements surfaceholder.callbackdriftball father;welcomethread wt;welcomedrawthread wdt;bitmap bmpbackscreen;/后台背景的动画帧bitmap bmpstartorquit;/开始和退出的两个大球图片bitmap bmpsoundoption;/声音选项的两个大球图片int status = -1;/状态值,为0表示待命,1
9、表示开始或退出按钮按下,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(this);getholder().addcallback(this);wdt = new welcomedrawth
10、read(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.app.activity;/引入相关类import android.graphics.rect;/引入相关类import an
11、droid.hardware.sensormanager;/引入相关类import android.media.mediaplayer;/引入相关类import android.os.bundle;/引入相关类import android.os.handler;/引入相关类import android.os.message;/引入相关类import android.view.keyevent;/引入相关类import android.view.motionevent;/引入相关类import android.view.view;/引入相关类import android.view.window;
12、/引入相关类import android.view.windowmanager;/引入相关类/* * 该类为游戏的主类,所有的view对象在这里有所引用,主要的功能是实现游戏 * 的流程控制,提供游戏需要的常量,在视图之间进行切换。 */public class driftball extends activity public static final int status_play = 0;/游戏进行中public static final int status_pause = 1;/游戏暂停public static final int status_win = 2;/通过一关publi
13、c 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;/最大关卡数int level = 1;/初始状态等级为1int life = max_life;/初始状态生命数最大rect rectstart;/开始圆球按钮的矩形
14、框rect rectsoundoption;/声音选项圆球按钮的矩形框rect rectquit;/推出圆形按钮的矩形框rect rectcontinue;/继续游戏菜单项的矩形框rect rectsoundalter;/声音选项菜单项的矩形框rect recthelp;/帮助菜单项的矩形框rect rectbacktomain;/回到主菜单菜单项的矩形框rect rectgamemsgbox;/屏幕中间提示消息的矩形框mediaplayer mpgamemusic;/游戏背景音乐mediaplayer mppluslife;/加命的音乐mediaplayer mpmissilehit;/导弹
15、打中的音乐mediaplayer mpgamewin;/通过了一关的音乐mediaplayer mpgamelose;/损失一条命的音乐mediaplayer mpbreakout;/显示菜单和掉入陷阱以及被吃掉的音乐boolean wantsound = true;/标志位,记录是否播放音乐view currview;/记录当前显示的viewgameview gv;/游戏视图的引用welcomeview wv;/欢迎视图的引用balllistener bl;/继承自sensorlistener的监听器helpview hv;/帮助视图/1=对源代码进行如下修改以连接sensorsimulat
16、or/sensormanager mysensormanager;sensormanagersimulator mysensormanager; handler myhandler = new handler()public void handlemessage(message msg) /重写handlemessage方法switch(msg.what)case 0:/0为收到来自welcomeview的开始游戏命令 gv = new gameview(driftball.this);setcontentview(gv);/设置当前viewcurrview = gv;/记录当前viewsta
17、rtsensor();/开启传感器 图2 游戏开始界面 (3) welcomethread的开发代码如下:package wyf.wpf;/声明包语句/* * 该类继承自thread,为欢迎界面的后台线程, * 负责修改相关数据,达到动画效果 */public class welcomethread extends threadwelcomeview father;/welcomeview引用int sleepspan = 100;/休眠时间boolean flag = false;/构造器,接收welcomeview对象引用public welcomethread(welcomeview f
18、ather)this.father = father;this.flag = true;(4) 菜单界面的用户交互事件处理代码如下:/重写的方法,用于接收和处理用户点击屏幕事件overridepublic boolean ontouchevent(motionevent event) if(event.getaction() = motionevent.action_up)int x=(int)event.getx();int y=(int)event.gety();if(currview = wv)/当前为欢迎界面if(rectstart.contains(x, y)/点下开始的圆球wv.s
19、tatus = 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()
20、try mpgamemusic.start();/播放游戏背景音乐 catch (exception e) else if(rectquit.contains(x, y)/点下退出的圆球wv.status = 1;/设置状态为1,有按钮按下wv.selectedindex = 1;/设置被选中的按钮为退出按钮else if(currview = gv)/当前为游戏界面在显示if(gv.status = status_pause)if(rectcontinue.contains(x,y)/点下继续游戏菜单gv.gmt.isout = true;/菜单开始退出屏幕else if(rectsound
21、alter.contains(x, y)/点下切换声音菜单wantsound = !wantsound;if(!wantsound)/判断记录值的真假if(mpgamemusic.isplaying()try mpgamemusic.pause();/暂停声音 catch (exception e) else if(wantsound)if(!mpgamemusic.isplaying()try mpgamemusic.start();/播放声音 catch (exception e) gv.gmt.isout = true;else if(recthelp.contains(x, y)/点下
22、帮助菜单gv.gmt.isout = true;/淡出菜单gv.pausegame();/暂停游戏hv = new helpview(this);/创建helpview对象setcontentview(hv);/切屏currview = hv;else if(rectbacktomain.contains(x, y)/点下回主菜单gv.gmt.isout = true;/淡出菜单wv = new welcomeview(this);/创建欢迎界面setcontentview(wv);/切屏currview = wv;/记录当前viewpausesensor();/暂停sensorgv.shut
23、all();/关闭gv的附属线程gv = null;else if(gv.status = status_win)/闯过一关if(rectgamemsgbox.contains(x, y)gv.initgame();gv.resumegame();/开始下一关的游戏else if(gv.status = status_pass | gv.status = status_over)/当前状态为通全关或死完了if(rectgamemsgbox.contains(x, y)/判断点击的位置wv = new welcomeview(this);/创建欢迎界面setcontentview(wv);/切屏
24、currview = wv;/记录viewpausesensor();/暂停监听器gv.shutall();/关闭gv附属线程gv = null;return true;三 游戏界面模块的开发(1) gameview的成员变量 代码如下: package wyf.wpf;/声明包语句import java.util.arraylist;/引入相关类import android.content.res.resources;/引入相关类import android.graphics.bitmap;/引入相关类import android.graphics.bitmapfactory;/引入相关类i
25、mport android.graphics.canvas;/引入相关类import android.view.surfaceholder;/引入相关类import android.view.surfaceview;/引入相关类import android.view.surfaceholder.callback;/引入相关类import static wyf.wpf.driftball.*;/引入相关类/* * 该类继承自surfaceview,主要功能是绘制游戏屏幕,对后台的绘制或其他线程 * 进行控制。 */public class gameview extends surfaceview
26、 implements callbackint screenwidth = 320;/屏幕宽度int screenheight = 480;/屏幕高度int backy;/x坐标总是为零int nebulax;/星云的x坐标int nebulay;/星云的y坐标int ballx;/小球的横坐标int bally;/小球的纵坐标int tilesize = 20;/图元的大小int direction = -1;/小球运动方向,上为0,顺时针依次为17int velocity = 4;/小球运动速度int eatindex;/吃人动画帧索引int status;/游戏状态int trapind
27、ex;/陷阱动画索引boolean showmenu;/是否显示菜单driftball father;/driftball引用drawthread dt;/绘制线程gamethread gt;/后台数据的修改线程cannonthread ct;/大炮线程gamemenuthread gmt;/游戏菜单线程meteorolite meteoarray;/陨石数组arraylist almissile = new arraylist();/存放导弹集合arraylist alcannon = new arraylist();/存放大炮集合bitmap bmpstar;/星空图片bitmap bmp
28、nebula;/星云图片bitmap bmpball;/小球图片bitmap bmptile;/地图图元,即路的图片bitmap bmpmeteo; /陨石图片bitmap bmpeat;/吃人图片bitmap bmphome;/家的图片bitmap bmptrap;/陷阱图片bitmap bmpcannon;/大炮图片bitmap bmpmissile;/导弹图片bitmap bmppluslife;/加命图片bitmap bmpmultiply;/乘号图片,用以显示命数bitmap bmpnumber;/数字图片bitmap bmpmenuitem;/菜单项图片数组bitmap bmpga
29、mewin;/游戏胜利图片bitmap bmpgameover;/游戏结束图片bitmap bmpgamepass;/游戏通关图片 (2)gamethread类的代码框架 代码如下: package wyf.wpf;/声明包语句/* * 这个类主要负责绘制元素的数据变化,如控制陨石和星云的帧何时切换 * 同时还负责,移动小球。不同的元素的不同的换帧间隔是通过帧控制计数器 * 来实现的。移动小球的同时还会相应地进行碰撞检测 */import static wyf.wpf.driftball.*;/引入driftball类的静态常量public class gamethread extends threadgameview father;/g
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度导演与动漫制作公司合作合同3篇
- 2024年苗圃技术员专项服务合同
- 2024年酒店早餐全面承包业务协议一
- 2024年版铁路客运服务协议范本版B版
- 2024年货物运输与保险合同
- 2024年青岛房地产交易协议样本一
- 2024年采购招标流程代理协议规范版B版
- 2024某服装品牌与设计师就品牌形象设计的合同
- 二零二五年大理石地暖材料供应与施工安装合同2篇
- 黄金行业检测培训
- 知识创新与学术规范中国大学mooc课后章节答案期末考试题库2023年
- 企业贷款书面申请书
- 人教五年级英语上册2011版五年级英语上册《Lesson17》教案及教学反思
- 交换机安装调试记录表实用文档
- 理性思维作文素材800字(通用范文5篇)
- 应急物资清单明细表
- 房地产估计第八章成本法练习题参考
- 《社会主义核心价值观》优秀课件
- 《妊娠期糖尿病患者个案护理体会(论文)3500字》
- 《小学生错别字原因及对策研究(论文)》
- 便携式气体检测报警仪管理制度
评论
0/150
提交评论