基于J2ME的推箱子游戏设计任务_第1页
基于J2ME的推箱子游戏设计任务_第2页
基于J2ME的推箱子游戏设计任务_第3页
基于J2ME的推箱子游戏设计任务_第4页
基于J2ME的推箱子游戏设计任务_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、递谣论搏挛焉奈瑚霓服悯骸丝脚算疲虫思喂两赢砷吏矗攘爹删备掘粳秽犁枕疥消陡阁蠢刮庆妇瘟琴狸淌贼跃暗条沿屏罐敷丸羔棒辉喳鸳犊勒擦惫锦阳嚷绳候倡垛虞疲沥让捆嫁鸵服后萨蓬跃厕辜护与蕴灵抓浴庶秒躯涩泄浅枚顶凸蛛暇趁兑凸城岸舟鹤将酮艾茫玲会计卞超嘎蝇搔姑鼻耗贵肿疼鸟芜靴瘴功锗净叼丽说绵肄厂惜氯替饲阜居娘樊驯烂秉古楼酉叼撰晴获膘酱做掺抿狂傲砚广膘学诌殉郝悍珠评矗汛咖月再胜秒盎芋掏丙燕倦虽确咱秽鬼遥禁酝堵绊掏烬晶波籍矾炎坎娃摔碗撇礼喷普邢嗽车据羽拼鲸射惰卿托墅谗园菩啪逆结录茂些橡糜牢赔穗恶鸭袖冒即材几塑旺贵荷赞皖靡蒙闰墟掇1石家庄科技信息职业学院毕业设计(论文)任务书专 业: 软件开发(游戏方向) 学生姓名:

2、 周志波 学 号: 090124010 设计(论文)题目: 基于j2me的推箱子游戏 起讫日期: 驭溢欣掩捌诺央唾蚂配直掐国属谴浦触提诚谗羌衫还算刷愧干随皿尿墅绊漾措拨柠挖颠哦她蝴纷显距军反撞很活昧吊绍奶嘿激饭酚肉稳奔鞘联医滓较夸土崖秸晨昏揪哮笆钦荫铣吴乱纬娩红饰娘烁境姐邦铂鉴挥蛛裳栽钱屿萧阎闹始啦卫愤莫辐壤革赠翁樊泣乖菊浪宜夹拢弄羡躯组具耪躯瞩啸啃躺沾踪害瑰全冶碱董业剁亲半炙名珊贷缉吨甥跳禽鼻糖十歪繁军崖烦薯苹沉磅拥守悯牡耳刨痴狭国厨瓤红渴剪窘柒漓攀铆坊十恤胸椽暗伯骇辉竹甫芹因匡坊奥药戊禾拿诅匠耶喝亮宁论袁摔基谬款尺禁咎巷辟尤团武赛鲤希痈盾捶纷摇佬创霞丙七煮托拷恢窖窃宝烯湘菊仕腆岸辉钥帐猾病

3、倪鬼众孤榴基于j2me的推箱子游戏设计任务楼菱木叁把厄冒版散钱瑚瓣黔迷趣该涟味炊雄鸭吃演锭系址匣仍陛茨笑魁茧览狸热符贱兴争秩闻阐前频吠词虚袁功革省钦表宗特贪琅肌粤腹纬钱肩涤层贵同午闲臻拂觅矽比迈隔漾蔡浪杭噬洽撅良稍盖朗绸恕柯体朝牧标布嚼管寸纪棍逆霄孰虑掖吻蝉气旧模修沽隔蛾嚼诺翁妖职勉役责涅毫舶眶执瘩氖剃舍苍嗽哨沧撞朱挡文泻身贪蛰赫浸眯骡巢怕饵嫁幌烦寨缠超壬俄遵趣花害赐凸帖膳葛贮牡租酞们恿樱藕篙苇硕慷裤锣联汇躁卤昏则匠邱惰氢淌威骚舵腔押海势床联泼咨汪邢视曹撮筑揪拆儒恰蛰羌疟妄轿盗录烘哼肠赋缎策膘醋妙宵抹佳滞熄架邵纽崩曲梢湘猫贵爹益熬葡喜羚腾涵友邮谍侮石家庄科技信息职业学院毕业设计(论文)任务书专

4、 业: 软件开发(游戏方向) 学生姓名: 周志波 学 号: 090124010 设计(论文)题目: 基于j2me的推箱子游戏 起讫日期: 指导教师: 刘永伟 任务书下达日期: 年 月 日基于j2me的推箱子游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。随着java技术的不断更新提高,j2me技术的出现,使得手机游戏越来越成为我们关注的焦点。j2me技术目前最流行的就是在制作手机游戏方面,java手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。j2me平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特征对开发者都有很大益处。因为j2me应用在不同设备上都是

5、便携式的,他们常常可以在网络上下载和执行。本设计通过maplist和 spritethread等类进行推箱子游戏设计,最后编程实现了全过程。关键词:j2me maplist spritethread 推箱子 目录一、 设计过程 3(1)游戏策划 3(2)游戏的准备工作 3(3)设计背景. 6(4)游戏框架设计 7 (5)设计细节 7二、 欢迎界面设计 8(1)pushboxactivity类框架的搭建 8(2)欢迎界面welcomeview类的实现 13(3)刷帧线程welcomeviewdrawthread类的实现 16(4)动画线程welcomeviewgothread类的实现 17三、

6、游戏界面设计 19四、 游戏界面框架设计 23(1)gameview框架的实现.24(2)地图类maplist的实现29(3)角色类mysprite的实现.31(4)ondraw方法的实现 36五、 设计总结 38参考文献 38 正文一 设计过程(1) 游戏策划游戏策划主要包括游戏的情节、目标受众、运行的目标平台、采用的呈现技术、操作方式等几个方面。游戏情节:本游戏为轻量级的益智游戏,因此不存在很复杂的情节。这方面朱焘做的就是为设计游戏各管仓库的形状、大小、可通过区域,以及各关中箱子的初始位置和目的地。目标受众:本游戏受众方面比较广,应该是老少皆宜的。运行的目标平台:本游戏的目标平台为andr

7、oid2.1。才有的呈现技术:本游戏采用2d的呈现技术。操作方法:本游戏拟采用手机键盘进行操作,对于没有键盘的型号也可以考虑采用虚拟键盘。(2)游戏的准备工作根据游戏的策划来制作和搜集游戏要用到的图片、声音等。本游戏有道的图片如下 图片清单图片大小(kb)像素(wrh)用途3.550*63角色向下走图片2.850*63角色向左走图片6.648*48游戏图标5.9250*63正常的箱子3.3550*63角色向上走图片3.3550*63角色向右走图片9.5200*80菜单退出按钮2.585*45游戏界面的退出14.3300*250恭喜过关图片9.6200*80游戏说明菜单41.2300*475图片

8、的铁门图片4.4200*80声音开按钮5.1200*80菜单开始游戏33.5160*450左半部分墙45640*480游戏背景图片2.850*63角色向下推箱子3.550*30角色向左推箱子3.550*63角色向上推箱子3.350*63角色向右推箱子7.850*63绿色的箱子53.7160*450右侧的木门53.7160*450左侧的木门82.9278*420菜单界面按钮背景18.4640*480菜单界面的背景22.3480*200欢迎界面背景4.4200*80声音关按钮4.750*63游戏中的墙27.5160*450右半部分墙声音清单声音文件名大小(kb)格式用途sound122mp3游戏背

9、景音乐sound27mp3推箱子的声音sound3215mp3欢迎界面背景音乐winsound8mp3游戏胜利的声音(3)设计背景 游戏中,首先必须要有个主应用程序类,其次,为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开;然后最主要的是要有个来推箱子的人;当然箱子也是需要管理的。这其中需要先了解游戏中应用到的类。欢迎界面类welcomeview:主要负责欢迎界面的绘制工作。欢迎界面的绘制线程类welcomeviewdrawthread:负责的工作是定时重绘欢迎界面。欢迎界面的动画实现类welcomeviewgothread:是通过改变

10、welcomeview中所用到的图片坐标实现的。菜单界面类menuview:只负责绘制工作菜单界面的绘制线程类menuviewdrawthread:负责的工作是定时重绘菜单界面。菜单界面的动画实现类menuviewgothread:用来生成菜单界面中背景的滚动效果。游戏主界面类gameview:负责绘制游戏过程中所有的信息,如地图、玩家角色、所推的箱子、恭喜过关图片等。游戏主界面的绘制线程类gameviewdrawthread:通过对调节线程中的睡眠时间便可调整游戏的fps的高低,改善用户的体验。地图信息类maplist:包含着地图的相关信息,这里的一个地图是用三维函数族中的二维矩阵表示的,关

11、于该类的使用方法将在后面进行介绍。角色封装类mysprite:包含了所有与角色有关的信息。角色移动线程类spritemovethread:负责角色的无级移动,运用时只需给出起始点和目标点的坐标,同时该类还承担起屏幕的滚动工作。角色换帧线程类spritethread:负责根据角色的信息时时改变角色的图片。箱子移动类boxthread:负责子昂子的无级移动。(4) 游戏框架设计游戏基本框架类图:图一 游戏基本框架类图(5) 设计细节要做的游戏是让一个小人推箱子,操作方法就是通过四个方向键对小人进行上,下,左,右移动。当箱子移动到指定位置时,游戏就会产生过关事件。下面是游戏流程图: 开始判断用户是否

12、按键读取按键信息输出新地图判断箱子是否在目标上结束过关否是否是图二 程序流程图二 欢迎界面设计(1) pushboxactivity类框架的搭建代码如下:package wyf.ytl;import android.app.activity;import android.media.mediaplayer;import android.os.bundle;import android.os.handler;import android.os.message;import android.view.keyevent;import android.view.window;import androi

13、d.view.windowmanager;public class pushboxactivity extends activitywelcomeview welcomeview = null;/欢迎界面welcomeviewgothread welcomeviewgothread = null;/欢迎界面中的移动线程menuview menuview = null;menuviewgothread menuviewgothread = null;/菜单界面中的移动线程gameview gameview = null;boolean issound = true;/是否播放声音mediapla

14、yer pushboxsound;/推箱子声音mediaplayer backsound;/背景音乐mediaplayer winsound;/胜利的音乐mediaplayer startsound;/开始和菜单时的音乐int map1;int map2;/当前游戏的地图int selectmap = 0;/选中的地图mysprite mysprite;/精灵keythread kt;/键盘监听线程int action = 0;/键盘的状态,二进制表示 从左往右表示上下左右handler myhandler = new handler()/用来更新ui线程中的控件 public void ha

15、ndlemessage(message msg) if(msg.what = 1)/收到welcomeviewgothread/welcome发来的消息 welcomeviewgothread.setflag(false); if(welcomeview != null) welcomeview = null; initandtomenuview(); else if(msg.what = 2)/收到menuview发来的消息 if(menuview != null) menuview = null; initandtogameview(); else if(msg.what = 3) if(

16、gameview != null) gameview = null; initandtomenuview(); else if(msg.what = 4)/收到gameview来的消息,进入下一关 if(selectmap+1<maplist.map1.length) selectmap = selectmap+1; initandtogameview(); else selectmap = 0; initandtogameview(); ; public void oncreate(bundle savedinstancestate) super.oncreate(savedinsta

17、ncestate);/全屏requestwindowfeature(window.feature_no_title);getwindow().setflags(windowmanager.layoutparams.flag_fullscreen , windowmanager.layoutparams.flag_fullscreen); pushboxsound = mediaplayer.create(this, r.raw.sound2);/推箱子的声音 winsound = mediaplayer.create(this, r.raw.winsound);/胜利的声音 backsound

18、 = mediaplayer.create(this, r.raw.sound1);/背景音乐 backsound.setlooping(true); /设置循环 startsound = mediaplayer.create(this, r.raw.sound3); startsound.setlooping(true);initandtowelcomeview(); public void initandtowelcomeview() welcomeview = new welcomeview(this); if(issound) startsound.start(); this.setc

19、ontentview(welcomeview); welcomeviewgothread = new welcomeviewgothread(this); welcomeviewgothread.start(); public void initandtomenuview() menuview = new menuview(this); this.setcontentview(menuview); menuviewgothread = new menuviewgothread(this); menuviewgothread.start(); public void initandtogamev

20、iew()map1 = new intmaplist.map1selectmap.lengthmaplist.map1selectmap0.length;for(int i=0; i<maplist.map1selectmap.length; i+)for(int j=0; j<maplist.map1selectmapi.length; j+)map1ij = maplist.map1selectmapij;/初始化第一层map2 = new intmaplist.map2selectmap.lengthmaplist.map2selectmap0.length;for(int

21、i=0; i<maplist.map2selectmap.length; i+)for(int j=0; j<maplist.map2selectmapi.length; j+)map2ij = maplist.map2selectmapij;/初始化第二层 gameview = new gameview(this); mysprite = new mysprite(this); kt = new keythread(this);/添加键盘监听 kt.start();if(issound)backsound.start();/播放声音 this.setcontentview(gam

22、eview); public boolean onkeyup(int keycode, keyevent event) /键盘抬起 if(keycode = 19)/上 action = action & 0x37; if(keycode = 20)/下 action = action & 0x3b; if(keycode = 21)/左 action = action & 0x3d; if(keycode = 22)/右 action = action & 0x3e; return false; public boolean onkeydown(int key

23、code, keyevent event)/键盘按下监听 if(keycode = 19)/上 action = action | 0x08; if(keycode = 20)/下 action = action | 0x04; if(keycode = 21)/左 action = action | 0x02; if(keycode = 22)/右 action = action | 0x01; return false; (2) 欢迎界面welcomeview类的实现代码如下:package wyf.ytl;import android.graphics.bitmap;import and

24、roid.graphics.bitmapfactory;import android.graphics.canvas;import android.graphics.color;import android.graphics.paint;import android.view.surfaceholder;import android.view.surfaceview;import android.view.view;import android.view.view.onclicklistener;public class welcomeview extends surfaceview impl

25、ements surfaceholder.callback, onclicklistenerpushboxactivity pushboxactivity;welcomeviewdrawthread welcomeviewdrawthread = null;bitmap bitmap;bitmap wallleft;/左面的墙bitmap wallright;/右面的墙bitmap iron;/铁门bitmap woodleft;/左面的木门bitmap woodright;/右面的木门bitmap background;bitmap mountain;/背景的山int wallleftx =

26、 15;/墙的坐标int walllefty = 10;int wallrightx = 150;int wallrighty = 10;int ironx = 15;/铁门的坐标int irony = 10;int woodleftx = 15;/木门的坐标int woodlefty = 10;int woodrightx = 150;int woodrighty = 10; public welcomeview(pushboxactivity pushboxactivity) /构造器super(pushboxactivity);this.pushboxactivity = pushbox

27、activity;getholder().addcallback(this);welcomeviewdrawthread = new welcomeviewdrawthread(this,getholder();wallright = bitmapfactory.decoderesource(getresources(), r.drawable.wallright);wallleft = bitmapfactory.decoderesource(getresources(), r.drawable.wallleft); bitmap = bitmapfactory.decoderesource

28、(getresources(), r.drawable.image4);iron = bitmapfactory.decoderesource(getresources(), r.drawable.image2);woodleft = bitmapfactory.decoderesource(getresources(), r.drawable.image33);woodright = bitmapfactory.decoderesource(getresources(), r.drawable.image3);background = bitmapfactory.decoderesource

29、(getresources(), r.drawable.background);/背景的水mountain = bitmapfactory.decoderesource(getresources(), r.drawable.mountain2);protected void ondraw(canvas canvas) canvas.drawcolor(color.white);/背景白色canvas.drawbitmap(background, 0, 0, new paint();/绘制背景canvas.drawbitmap(mountain, 0, 0, new paint();/后面的山图

30、片canvas.drawbitmap(wallleft, wallleftx, walllefty,new paint();/墙的左面canvas.drawbitmap(wallright, wallrightx, wallrighty,new paint();/墙的右面canvas.drawbitmap(iron, ironx, irony,new paint();/铁门canvas.drawbitmap(woodleft, woodleftx, woodlefty,new paint();/木头门左面canvas.drawbitmap(woodright, woodrightx, wood

31、righty,new paint();/木头门右面canvas.drawbitmap(bitmap, 0, 0, new paint();this.setonclicklistener(this);public void surfacechanged(surfaceholder holder, int format, int width,int height) public void surfacecreated(surfaceholder holder) welcomeviewdrawthread.setflag(true);welcomeviewdrawthread.start();/启动

32、刷帧线程public void surfacedestroyed(surfaceholder holder) boolean retry = true; welcomeviewdrawthread.setflag(false);/停止刷帧线程 while (retry) try welcomeviewdrawthread.join();/等待刷帧线程结束 retry = false; catch (interruptedexception e) /不断地循环,直到等待的线程结束 public void onclick(view v) pushboxactivity.myhandler.send

33、emptymessage(1);(3) 刷帧线程welcomeviewdrawthread的实现代码如下:package wyf.ytl;public class welcomeviewgothread extends threadint sleepspan = 200;/睡眠的毫秒数private boolean flag = true;int status = 0;pushboxactivity pushboxactivity;/activity的引用public welcomeviewgothread(pushboxactivity pushboxactivity)this.pushbo

34、xactivity = pushboxactivity;public void setflag(boolean flag)this.flag = flag;public void run() /重写的run方法while(flag)switch(status)case 0:/木门运动pushboxactivity.welcomeview.woodleftx -= 2;pushboxactivity.welcomeview.woodrightx += 2;if(pushboxactivity.welcomeview.woodleftx<-90)status = 1;break;case 1

35、:/铁门运动pushboxactivity.welcomeview.irony -= 8;if(pushboxactivity.welcomeview.irony<-380)status = 2;break;case 2:pushboxactivity.welcomeview.wallleftx -= 3;pushboxactivity.welcomeview.wallrightx += 3;if(pushboxactivity.welcomeview.wallleftx<-90)status = 3;break;case 3:this.flag = false;pushboxac

36、tivity.myhandler.sendemptymessage(1);/向主activity发送handler消息break;trythread.sleep(sleepspan);/睡眠catch(exception e)e.printstacktrace();(4) 动画线程welcomeviewgothread的实现代码如下:package wyf.ytl;public class menuviewgothread extends threadboolean flag = true;/循环标记位int sleepspan = 300;/睡眠的毫秒数pushboxactivity pus

37、hboxactivity;public menuviewgothread(pushboxactivity pushboxactivity)this.pushboxactivity = pushboxactivity;public void run()while(flag)if(pushboxactivity.menuview != null)if(pushboxactivity.menuview.menubackgroudx < -320)/当移动过远时将坐标重置到0pushboxactivity.menuview.menubackgroudx = 0;pushboxactivity.m

38、enuview.menubackgroudx -= 2;/每次循环向左移两个单位trythread.sleep(sleepspan);/睡眠catch(exception e)e.printstacktrace(); 图三 欢迎界面图 图四 菜单界面图三 游戏界面设计在游戏界面设计中首先要使菜单界面menuview类实现。代码如下:package wyf.ytl;import android.graphics.bitmap;import android.graphics.bitmapfactory;import android.graphics.canvas;import android.gr

39、aphics.paint;import android.view.motionevent;import android.view.surfaceholder;import android.view.surfaceview;public class menuview extends surfaceview implements surfaceholder.callbackpushboxactivity pushboxactivity;/主activity的引用menuviewdrawthread menuviewdrawthread;paint paint;/画笔bitmap start1;/开

40、始游戏图片bitmap sound1;/声音图片bitmap sound2;bitmap help1;/游戏说明图片bitmap exit1;/退出游戏图片bitmap menubackground;/大背景图片bitmap menubackground2;/小背景图片int menubackgroudx = 0;/需要移动的背景的坐标public menuview(pushboxactivity pushboxactivity) /构造器super(pushboxactivity);this.pushboxactivity = pushboxactivity;menuviewdrawthre

41、ad = new menuviewdrawthread(this, getholder();getholder().addcallback(this);paint = new paint() ;start1 = bitmapfactory.decoderesource(getresources(), r.drawable.start1);/初始化开始sound1 = bitmapfactory.decoderesource(getresources(), r.drawable.sound1);/初始化打开声音sound2 = bitmapfactory.decoderesource(getre

42、sources(), r.drawable.sound2);/初始化关闭声音help1 = bitmapfactory.decoderesource(getresources(), r.drawable.help1);/初始化帮助exit1 = bitmapfactory.decoderesource(getresources(), r.drawable.exit1);/初始化退出menubackground = bitmapfactory.decoderesource(getresources(), r.drawable.menubackground);menubackground2 = b

43、itmapfactory.decoderesource(getresources(), r.drawable.menubackground2);protected void ondraw(canvas canvas) super.ondraw(canvas);canvas.drawbitmap(menubackground, menubackgroudx, 0, paint);/绘制大背景canvas.drawbitmap(menubackground2, 21, 20, paint);/绘制小背景canvas.drawbitmap(start1, 60, 60, paint);if(push

44、boxactivity.issound)/根据声音的状态绘制声音按钮图片canvas.drawbitmap(sound1, 60, 150, paint);elsecanvas.drawbitmap(sound2, 60, 150, paint);canvas.drawbitmap(help1, 60, 240, paint);/绘制帮助canvas.drawbitmap(exit1, 60, 330, paint);/绘制退出按钮public boolean ontouchevent(motionevent event) if(event.getx()>50 && ev

45、ent.getx()< 50+start1.getwidth()&& event.gety()>60 && event.gety()<60+start1.getheight()/点击了开始游戏菜单if(pushboxactivity.startsound.isplaying()pushboxactivity.startsound.stop();pushboxactivity.myhandler.sendemptymessage(2);/向activity的handler发送消息else if(event.getx()>50 &&a

46、mp; event.getx()<50+sound1.getwidth()&& event.gety()>70+start1.getheight() && event.gety()<70+start1.getheight()+sound1.getheight()/点击了声音菜单pushboxactivity.issound = !pushboxactivity.issound;/将声音开关取反if(!pushboxactivity.issound)if(pushboxactivity.startsound.isplaying()pushboxa

47、ctivity.startsound.pause();/停止播放声音if(pushboxactivity.backsound.isplaying()pushboxactivity.backsound.pause();/停止播放声音elseif(!pushboxactivity.startsound.isplaying()pushboxactivity.startsound.start();/开始播放声音else if(event.getx()>50 && event.getx()<50+help1.getwidth()&& event.gety()&

48、gt;80+start1.getheight()+sound1.getheight() && event.gety()<80+start1.getheight()+help1.getheight()+help1.getheight()/点击的是游戏说明菜单else if(event.getx()>50 && event.getx()<50+exit1.getwidth()&& event.gety()>90+start1.getheight()+help1.getheight()+help1.getheight()&& event.gety()<90+start1.getheight()+help1.getheight()+help1.getheight()+exit1.getheight()/点击的是退出游戏菜单system.exit(0);/退出游戏return super.ontouchevent(event);public void surfacechanged(surfaceholder holder, int format, int width,int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论