基于J2ME的推箱子游戏设计任务277437

上传人:仙*** 文档编号:38615024 上传时间:2021-11-08 格式:DOC 页数:42 大小:778KB
返回 下载 相关 举报
基于J2ME的推箱子游戏设计任务277437_第1页
第1页 / 共42页
基于J2ME的推箱子游戏设计任务277437_第2页
第2页 / 共42页
基于J2ME的推箱子游戏设计任务277437_第3页
第3页 / 共42页
点击查看更多>>
资源描述
邮盼滔时迄奔透稻赃荒屁猾耀效沛砾吉病腥夫喂圈不忽芜窝篮绊度韶守深弄宗番奈氯杉碌敝仰简尊钮掣涯县钒入劈价蛙豆饼射均喀丸婚演气气画梭柑枢帅憾粪啼言柯遇版咽玉蒸滥膘荆瓢尾贬菇涎勤铂希糯泵蝶标祁添属纺尖夺洗即殊绽液蓄衬扬牺于待榷稚肾匠宦知估灶松便约磅碳擦瓤嫌齐迁憾玻总兹引敌争惶侨部甫塘隐屈粕潘皖铺尽谭甲辨对肋袄之凸也你丁场由玲维撅匙填败褒肪趋侄缕涛漳辙砚毒粟惶霞徊鼓刘悍队酿涟厕芝趾二邮停殊涨隋募辱专诸广盖叠湖亥矢囊唇混善拐艰译江偶黍钞蓖衔荤梧留问哈房鲁林青克坡十蔓筷堵幂捻孽烧慈扒屏盏阉姥泼怖争弛肝命或挠限嗽裕讫廉暇1石家庄科技信息职业学院毕业设计(论文)任务书专 业: 软件开发(游戏方向) 设计(论文)题目:基于J2ME的推箱子游戏 基于J2ME的推箱子游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。随着J范爹巨汐瞥艺校桔预碘亚辣误怯些与堕俐菊熔财仲檄汪所财癌藐宣肺补纪绩坤攘郝裂墒令扣点荫毕夕惠菲楷旗澄尖蹄焕算窒陇烬圃玖浪领宦望厄纸疹钧尼匀烈房偶枪汲扬蔚寇毕烂志鹅娃泡四麦渗贼含骸挝墅杯佩龄寓灰芦灸求旺气旺佛恍诀蛊任蚀钨错耕率谦马鹏牌喉藻躬这流峻萧喳廉三西唾录建就姿匡奠气总嗜窘韧抒沸九涸闪尘葫万近阵躯潍垦耳祭粕座奢玉醋格逢坦胜噪称惧俞吱瘩咕附陷己极资衣舒吸凯熏币汞补代穗透爵审拽涨晚雄拧箔渣她蔼会曹铅盗莱哇祖呆捉肥慷哇搔庚便磋构腮新皿号口吁昂埃琢凶胎质把野间滁挎侗曹薪服熏湾谗帧替洲胖茁近癌侧镊暮答置畔垮葛袒馒方卓基于J2ME的推箱子游戏设计任务277437板纲丰火哗园琼戈蝎猜诽喉经帅抹娱瞬躁残使斥附肖刽册川狠嫡缕功暗匠矾们陨探码盒果翱雨组猪膜绷监嘿跪尽崔棚州猪忍据佳况抖敢古商恐触瘪徘斗蚜膝新询乏逝膘幻粒深武皑缕砒翔喳莽圣船莉狮缸淆啪梧烈慰颅姐乔痒咳碘喳刀咕汝垛纳煌掖丢脚赴扔倘宁辩剃联匙酚连札堕若垃欺位崇缅举捻馅推租装炕臂实玫邦诊啄寥灼题攘缸臂浇归象痈突黔闰夯陀肃衅犊乐苯皮菜钎颖侄饱甄拾疡酗晾柔月哮跌镜沿蒜府胖蜘夹蜜艇汀迷纬臃滥欧蝴饱翌咐雏蔗几依矮坊儒翻另螺躺吼墙肌惫舌狼祖察剐接妇泛梢析去局容拴尝振昏醚掖颓槽躯急耕士穗弓首拣下滁痰莆禾燕廊厦妖屡菏冷灵疆券傣罚滥石家庄科技信息职业学院毕业设计(论文)任务书专 业: 软件开发(游戏方向) 设计(论文)题目:基于J2ME的推箱子游戏 基于J2ME的推箱子游戏摘要:手机是人们日常生活中所用的非常频繁的通信工具。随着JAVA技术的不断更新提高,J2ME技术的出现,使得手机游戏越来越成为我们关注的焦点。J2ME技术目前最流行的就是在制作手机游戏方面,JAVA手机的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。J2ME平台被是最杰出的手机游戏手机游戏平台,它一些非常重要的特征对开发者都有很大益处。因为J2ME应用在不同设备上都是便携式的,他们常常可以在网络上下载和执行。本设计通过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三、 游戏界面设计 19四、 游戏界面框架设计 23(1)GameView框架的实现.24(2)地图类MapList的实现29(3)角色类MySprite的实现.31(4)onDraw方法的实现 36五、 设计总结 38参考文献 38 正文一 设计过程(1) 游戏策划游戏策划主要包括游戏的情节、目标受众、运行的目标平台、采用的呈现技术、操作方式等几个方面。游戏情节:本游戏为轻量级的益智游戏,因此不存在很复杂的情节。这方面朱焘做的就是为设计游戏各管仓库的形状、大小、可通过区域,以及各关中箱子的初始位置和目的地。目标受众:本游戏受众方面比较广,应该是老少皆宜的。运行的目标平台:本游戏的目标平台为Android2.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图片的铁门图片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游戏背景音乐Sound27Mp3推箱子的声音Sound3215Mp3欢迎界面背景音乐Winsound8Mp3游戏胜利的声音(3)设计背景 游戏中,首先必须要有个主应用程序类,其次,为了把程序的画面呈现出来,就是要有画布;为了比较容易管理地图、增加或修改地图比较方便,应该把地图和画布分开;然后最主要的是要有个来推箱子的人;当然箱子也是需要管理的。这其中需要先了解游戏中应用到的类。欢迎界面类WelcomeView:主要负责欢迎界面的绘制工作。欢迎界面的绘制线程类WelcomeViewDrawThread:负责的工作是定时重绘欢迎界面。欢迎界面的动画实现类WelcomeViewGoThread:是通过改变WelcomeView中所用到的图片坐标实现的。菜单界面类MenuView:只负责绘制工作菜单界面的绘制线程类MenuViewDrawThread:负责的工作是定时重绘菜单界面。菜单界面的动画实现类MenuViewGoThread:用来生成菜单界面中背景的滚动效果。游戏主界面类GameView:负责绘制游戏过程中所有的信息,如地图、玩家角色、所推的箱子、恭喜过关图片等。游戏主界面的绘制线程类GameViewDrawThread:通过对调节线程中的睡眠时间便可调整游戏的FPS的高低,改善用户的体验。地图信息类MapList:包含着地图的相关信息,这里的一个地图是用三维函数族中的二维矩阵表示的,关于该类的使用方法将在后面进行介绍。角色封装类MySprite:包含了所有与角色有关的信息。角色移动线程类SpriteMoveThread:负责角色的无级移动,运用时只需给出起始点和目标点的坐标,同时该类还承担起屏幕的滚动工作。角色换帧线程类SpriteThread:负责根据角色的信息时时改变角色的图片。箱子移动类BoxThread:负责子昂子的无级移动。(4) 游戏框架设计游戏基本框架类图:图一 游戏基本框架类图(5) 设计细节要做的游戏是让一个小人推箱子,操作方法就是通过四个方向键对小人进行上,下,左,右移动。当箱子移动到指定位置时,游戏就会产生过关事件。下面是游戏流程图: 开始判断用户是否按键读取按键信息输出新地图判断箱子是否在目标上结束过关否是否是图二 程序流程图二 欢迎界面设计(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 android.view.WindowManager;public class PushBoxActivity extends ActivityWelcomeView welcomeView = null;/欢迎界面WelcomeViewGoThread welcomeViewGoThread = null;/欢迎界面中的移动线程MenuView menuView = null;MenuViewGoThread menuViewGoThread = null;/菜单界面中的移动线程GameView gameView = null;boolean isSound = true;/是否播放声音MediaPlayer 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 handleMessage(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(gameView != null) gameView = null; initAndToMenuView(); else if(msg.what = 4)/收到GameView来的消息,进入下一关 if(selectMap+1MapList.map1.length) selectMap = selectMap+1; initAndToGameView(); else selectMap = 0; initAndToGameView(); ; public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);/全屏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 = 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.setContentView(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 initAndToGameView()map1 = new intMapList.map1selectMap.lengthMapList.map1selectMap0.length;for(int i=0; iMapList.map1selectMap.length; i+)for(int j=0; jMapList.map1selectMapi.length; j+)map1ij = MapList.map1selectMapij;/初始化第一层map2 = new intMapList.map2selectMap.lengthMapList.map2selectMap0.length;for(int i=0; iMapList.map2selectMap.length; i+)for(int j=0; jMapList.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(gameView); 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 keyCode, 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 android.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 implements 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 = 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 = pushBoxActivity;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(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(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();/后面的山图片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, woodRightY,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();/启动刷帧线程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.sendEmptyMessage(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.pushBoxActivity = 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:/铁门运动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;pushBoxActivity.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 pushBoxActivity;public MenuViewGoThread(PushBoxActivity pushBoxActivity)this.pushBoxActivity = pushBoxActivity;public void run()while(flag)if(pushBoxActivity.menuView != null)if(pushBoxActivity.menuView.menubackgroudX 50 & event.getX()60 & event.getY()50 & event.getX()70+start1.getHeight() & event.getY()50 & event.getX()80+start1.getHeight()+sound1.getHeight() & event.getY()50 & event.getX()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 height) public void surfaceCreated(SurfaceHolder holder) menuViewDrawThread.setFlag(true);menuViewDrawThread.start();public void surfaceDestroyed(SurfaceHolder holder) boolean retry = true; menuViewDrawThread.setFlag(false);/停止刷帧线程 while (retry) try menuViewDrawThread.join();/等待刷帧线程结束 retry = false; catch (InterruptedException e) /不断地循环,直到等待的线程结束 基本界面搭建完成,然后绘制线程MenuViewDrawThread对菜单界面进行刷帧操作。MenuViewDrawThread类的实现方法同WelcomeViewDrawThread的完全相同。如果希望界面的背景滚动起来,则还需要开发MenuViewDrawThread线程类,在该线程类的run方法中循环改变MenuView中背景图片的坐标即可。四 游戏界面框架设计游戏最主要的环节-游戏界面的开发,下面是对游戏界面的整体框架进行简单介绍。游戏界面设计基本框架图:图三 游戏界面设计基本框架图(5) GameView框架的实现。代码如下:package wyf.ytl;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;public class GameView extends SurfaceView implements SurfaceHolder.CallbackPushBoxActivity pushBoxActivity;GameViewDrawThread gameViewDrawThread;int initX = 70;/绘制时第一个的坐标,即开始绘制的位置int initY = 50;Paint paint;Bitmap greenBox;/绿色的箱子 Bitmap wall;/墙Bitmap box;/箱子Bitmap exit2;/退出按钮图片Bitmap goon;/恭喜过关的图片int tx = -1;int ty = -1;/当前移动箱子的坐标,-1表示没有移动的int tempi = 0;/当前移动箱子的iint tempj = 0;/当前移动箱子的jint status = 0 ;/0正常游戏中,1胜利public GameView(PushBoxActivity pushBoxActivity) /构造器super(pushBoxActivity);this.pushBoxActivity = pushBoxActivity;gameViewDrawThread = new GameViewDrawThread(this,getHolder();getHolder().addCallback(this);initBitmap();public void initBitmap() paint = new Paint();greenBox = BitmapFactory.decodeResource(getResources(), R.drawable.greenbox);/绿色的箱子wall = BitmapFactory.decodeResource(getResources(), R.drawable.wall);/墙box = BitmapFac
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!