为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

赛车手机游戏实训报告

2017-10-21 27页 doc 140KB 25阅读

用户头像

is_882336

暂无简介

举报
赛车手机游戏实训报告赛车手机游戏实训报告 综 合 实 训 报 告 手机游戏设计 课题名称 综合实训 赛车手机游戏开发 系 别 计算机多媒体技术 专 业 班 级 学 号 学生姓名 指导教师: 2008 年 11 月 14 日 赛车手机游戏开发 让我们能够熟练掌握eclipse软件的使用,能够自己独立编写J2ME手 机游戏程序代码。巩固我们的所学知识,使我们把理论知识与实践结合 起来,能够更好的理解J2ME手机游戏程序的编写,掌握它各部分的含 义。 掌握游戏闪屏设计技术,游戏屏幕类GameCanvas制作游戏界面,游戏 多...
赛车手机游戏实训报告
赛车手机游戏实训 综 合 实 训 报 告 手机游戏 课题名称 综合实训 赛车手机游戏开发 系 别 计算机多媒体技术 专 业 班 级 学 号 学生姓名 指导教师: 2008 年 11 月 14 日 赛车手机游戏开发 让我们能够熟练掌握eclipse软件的使用,能够自己独立编写J2ME手 机游戏程序代码。巩固我们的所学知识,使我们把理论知识与实践结合 起来,能够更好的理解J2ME手机游戏程序的编写,掌握它各部分的含 义。 掌握游戏闪屏设计技术,游戏屏幕类GameCanvas制作游戏界面,游戏 多重背景的制作技巧,实现赛车的各种功能以及游戏实现技巧。 a) 用JAVA ME MIDP2.0提供的Game API实现手机赛车游戏程序开发; b) 游戏屏幕类GameCanvas的应用; c) 应用图层类LayerManager实现游戏场景; d) 应用图层管理类LayerManager实现对游戏背景的管理。 e) 应用游戏精灵类Sprite实现赛车的功能。 f) 游戏线程的应用; g) 手机程序代码优化; h) 综合掌握调试手机游戏程序技巧。 日 期 项目内容 项目实施 存在的问题 解决方法 不足 2008.10.27~31 市场调研、制定1、在网上查找1 、网络上的赛1、 只能自己设因为材料不够 、收集素各赛车游戏的车游戏太难,以计一个较简单好,所以游戏中 材、赛车游戏的类型与前景; 我的水平还无的赛车游戏; 的障碍物显得 准备工作 2、利用网络收法制作; 2、 只能找一些很粗糙。 集赛车游戏所2 、网络上的材差不多的材料,因为不断的改 须的材料; 料很难找到自再利用换操作系统,所 3、利用己所须的; photoshop软件以浪费了较多 photoshop软件3、在eclipse修改; 的时间。 对素材进行整软件所在的操3 、先在其他操 理与修改。 作系统上没有作系统上进行 photoshop软修改材料,再返 件。 回原系统。 2008.11.1~3 游戏策划、游戏1、根据所收集对于各图的含通过查找书本并没有对各图 功能架构图、流的资料对赛车义和它们之间资料和在网上做到深刻了解。 程图、类继承关游戏进行策划; 的区别不太清查找资料,并且 系图 2、根据自己的楚,所以一开始通过询问同学, 策划绘制手机不会绘制。 基本上理解了 游戏功能架构各个图的含义 图、流程图和类和其之间的关 继承关系图。 系和区别。 2008.11.4~11 游戏开发、各功1、开始制作游由于对J2ME知通过对书本上只是基本上解 能模块的实现 戏,编写游戏程识还不够深入的知识进行巩决了这个问题, 序代码; 了解,所以在许固和进一步的并没有能够完 2、通过实训中多细节方面还了解,并且向同美的解决,还存 的各模块的要不会编写。 学进行询问,基在许多方面的 求,一步步的编本上解决了这问题。 写代码,实现各个问题。 个模块的功能。 2008.11.12~14 游戏测试、优化1、通过eclipse1、一开始程序1、通过查找书各个功能还是 及改进,完成实软件进行游戏上存在着许多本和询问同学,存在一些不足。 训报告 测试,使其显示细节方面的不解决了这些不 在手机屏幕上; 足,使其无法在足, 并能够在 2、对游戏的各手机屏幕上显手机屏幕上显 个功能进行检示; 示; 测和完善; 2、各个功能不2、通过查找书 3、通过对程序够完善,存在缺本和询问同学, 进行,完成陷。 尽量完善各个 实训报告。 功能。 可用文字描述,也可用流程图 1、闪屏的实现 2、欢迎界面的实现 3、进行游戏各功能的选择 4、进行游戏(显示计分) 5、结束游戏 6、退出程序 *.java文件。程序应符合以下规范要求:A :有注释;B :有输入提示;C :分层缩 进、隔行书写 CARDemoMIDlet import javax.microedition.lcdui.Display; import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class CARDemoMIDlet extends MIDlet implements CommandListener { Display display; List list; Command okCommand;//定义确定按钮 Command backCommand;//定义返回按钮 Command helpCommand;//定义帮助按钮 Alert alert; int i; public CARDemoMIDlet() {//创建构造函数CARDemoMIDlet() display=Display.getDisplay(this); alert=new Alert("游戏天地");//构造Alert的、默认的单参数构造函数为提示信息的头部 alert.setString("赛车游戏");//设置提示信息 alert.setTimeout(2000);//设置Alert的时间,单位为毫秒 list=new List("Welcome to the game",List.IMPLICIT);//设置欢迎界面的头部信息 okCommand=new Command("确认",Command.OK,2); backCommand=new Command("返回",Command.BACK,2); list.setCommandListener(this); //设置控制监听器 } public void startApp() { display.setCurrent(alert,list); list.append("开始游戏", null);//添加列表 list.append("游戏说明", null); list.append("离开", null); list.addCommand(okCommand); list.addCommand(backCommand); } public void pauseApp() {} public void destroyApp(boolean unconditional) {} public void commandAction(Command cmd,Displayable disp) { if(cmd==okCommand)//设置按钮为确定状态 { switch(list.getSelectedIndex()) { case 0: for(i=0;i通知
} } } } public void hideNotify() { synchronized (executionLock) { paused = true; //暂停 } } public void initialize() { view[X] = 0; view[Y] = 0; view[WIDTH] = getWidth(); view[HEIGHT] = getHeight(); loader = new Hero(); loader.load(); hero = loader.getHero(); hero.defineCollisionRectangle( 0, 0, hero.getWidth(), hero.getHeight());//定义人物与障碍物的碰撞 map = new Map(); //在地图中插入人物hero map.insert(hero, 0); map.setViewWindow(0, 0, getWidth(), getHeight());//设置视窗的位置 int[] size = getWorldSize(); WORLD_WIDTH = size[0]; WORLD_HEIGHT = size[1]; initialized = true; //设置视窗的位置 } private int[] getWorldSize() { int width = 0; int height = 0; for (int i = 0; i < map.getSize(); i++) { Layer layer = map.getLayerAt(i); if(layer.getWidth() > width) width = layer.getWidth(); if(layer.getHeight() > height) height = layer.getHeight(); } return new int[]{width, height}; } public void start() { thread = new Thread(this); thread.start(); } public void stop() { initialized = false; thread = null; } public void run() { Graphics g = getGraphics(); while (initialized) { synchronized (executionLock) { if (paused) { try { wait(); } catch (Exception e) //捕捉异常 { } } } int keyState = getKeyStates();//设置键盘状态 if ((keyState & LEFT_PRESSED) != 0) { if (lastState != LEFT_PRESSED) { lastState = LEFT_PRESSED; //设置键盘状态为按左键 hero.setFrameSequence(new int[] { 0});//设置人物的帧序列 } else { hero.nextFrame(); } if(hero.getX() - STEP >= 0) hero.move(-STEP, 0); else hero.setPosition(0, hero.getY()); } else if ((keyState & RIGHT_PRESSED) != 0) { if (lastState != RIGHT_PRESSED) { lastState = RIGHT_PRESSED; hero.setFrameSequence(new int[] { 0}); } else { hero.nextFrame(); } if(hero.getX() + hero.getWidth() < WORLD_WIDTH) hero.move(STEP, 0); else hero.setPosition(WORLD_WIDTH-hero.getWidth(), hero.getY());//设 置人物显示的位置 } else if ((keyState & UP_PRESSED) != 0) { if (lastState != UP_PRESSED) { lastState = UP_PRESSED; hero.setFrameSequence(new int[] { 0 }); } else { hero.nextFrame();//显示人物的下一帧 } if(hero.getY() - STEP >= 0) hero.move(0, -STEP); else hero.setPosition(hero.getX(), 0); } else if ((keyState & DOWN_PRESSED) != 0) { if (lastState != DOWN_PRESSED) { lastState = DOWN_PRESSED; hero.setFrameSequence(new int[] { 0}); } else { hero.nextFrame(); } if(hero.getY() + hero.getHeight() < WORLD_HEIGHT) hero.move(0, STEP); else hero.setPosition(hero.getX(), WORLD_HEIGHT-hero.getHeight()); } checkCollision(lastState); //检查碰撞 // Next scroll the view if needed if (hero.getX() < view[X] + hero.getWidth()) { int dx = (view[X] - hero.getX() + hero.getWidth());//定义并初始化dx if (view[X] - dx >= 0) { view[X] -= dx; }//设置视窗的横坐标 } else if ( hero.getX() + hero.getWidth() > (view[X] + view[WIDTH]) - hero.getWidth()) { int dx = (hero.getX() + hero.getWidth()) - (view[X] + view[WIDTH] - hero.getWidth());//定义并初始化dx 的值 if(view[X] + view[WIDTH] <= WORLD_WIDTH) { view[X] += dx; } } if (hero.getY() < view[Y] + hero.getHeight()) // scoll up { int dy = (view[Y] - hero.getY() + hero.getHeight()); if (view[Y] - dy >= 0) { view[Y] -= dy; } } else if ( hero.getY() + hero.getHeight() > (view[Y] + view[HEIGHT]) - hero.getHeight()) // scroll down { int dy = (hero.getY() + hero.getHeight()) - (view[Y] + view[HEIGHT] - hero.getHeight()); if(view[Y] + view[HEIGHT] <= WORLD_HEIGHT) { view[Y] += dy; } } map.setViewWindow( view[X], view[Y], view[WIDTH], //设置视窗的大小 view[HEIGHT]); map.paint(g, 0, 0); //绘制地图 g.drawString(scoreStr, 180, 50, Graphics.TOP|Graphics.RIGHT); g.drawString(String.valueOf(score), 160, 70, Graphics.TOP|Graphics.RIGHT); //绘制得分 flushGraphics();//刷新 try { Thread.sleep(100); //线程休眠 } catch (Exception e) //捕捉异常 { e.printStackTrace(); } } } private void checkCollision(int key) { if (hero.collidesWith((TiledLayer) map.getLayerAt(1), true))/ /主人公和上层地图 进行像素级碰撞检测 { if (key == LEFT_PRESSED) //设置按键状态为左键 hero.move(STEP, 0); //人物向X轴正方向移动 else if (key == RIGHT_PRESSED) hero.move(-STEP, 0); else if (key == UP_PRESSED) hero.move(0, STEP); else hero.move(0, -STEP); score--; } } public void paint(Graphics g) //绘制屏幕 { if (!initialized) { initialize(); if (thread == null) { start();//线程开始 } } //调用paint(g)方法 super.paint(g); } } Hero import javax.microedition.lcdui.Image; import javax.microedition.lcdui.game.Sprite; public class Hero { private Image image; public Hero() { } public void load() { try { image = Image.createImage("/car2.png");//加载图片,创建不变图像 } catch (Exception e) //捕捉异常 { e.printStackTrace(); } } public Sprite getHero() { Image tmp = null; try { tmp = Image.createImage(image, 0, 0, 24, 35, Sprite.TRANS_NONE);//创建不变图像 } catch (Exception e) { e.printStackTrace(); } Sprite hero = new Sprite(tmp, 24, 35); //创建Sprite精灵 return hero; //返回hero值 } } import javax.microedition.lcdui.game.LayerManager; import javax.microedition.lcdui.Image; import javax.microedition.lcdui.game.TiledLayer; public class Map extends LayerManager//继承父类LayerManager { int[] GroundLayer_cells = new int[] { //创建GroundLayer_cells整型数组 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5, 1, 2, 2, 3, 2, 2, 3, 2, 2, 5, 1, 2, 2, 4, 2, 2, 4, 2, 2, 5}; int[] TreeLayer_cells = new int[] {//创建TreeLayer_cells整型数组 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; Image TreeLayer_tiles; TiledLayer TreeLayer; Image GroundLayer_tiles; TiledLayer GroundLayer; public Map() { try { Init(); } catch (Exception ex) { } } void Init() throws Exception//抛出异常 { TreeLayer_tiles = Image.createImage("/map.png");//加载地图图片 TreeLayer = new TiledLayer(10, 20, TreeLayer_tiles, 24, 35); //创建TiledLayer 对象TreeLayer GroundLayer_tiles = Image.createImage("/map.png"); //船检TiledLayer GroundLayer = new TiledLayer(10, 20, GroundLayer_tiles, 24, 35);对象GroundLayer fillLayer(TreeLayer, TreeLayer_cells); fillLayer(GroundLayer, GroundLayer_cells); append(TreeLayer); //添加地图图片 append(GroundLayer); //添加图片 } void fillLayer(TiledLayer layer, int[] cells) { for(int row=0; row < layer.getRows(); row++) { for(int col=0; col < layer.getColumns(); col++) { layer.setCell(col, row, cells[row * layer.getColumns() + col]); //填充地 图 } } } } 程序各模块运行结果界面图 困难: 1、看到题目,不能很好地进行分析; 2、基础知识掌握不牢; 3、以前写的程序少,刚开始写的时候,条理分得不是很清楚,意思不能很好 地表达; 4、电脑中了病毒,使得我所做的一切成果化为了泡影。 解决方案: 1、请教同学,画出了流程图,以帮助分析题目; 2、看书,查资料,巩固基础知识,在此过程中对J2ME又有了新的认识; 3、模仿了书上的例题,对程序的条理性也有了一定的认识; 4、在一天时间里重新做了一遍,帮我巩固了一番所学知识。 在课设这段时间,我学到了许多的知识,也积累了一些经验。巩固了以前所学知 识,更学会了许多以前不会的知识。 通过这次实训,我了解到了实践的重要性,只有理论结合实际,才能提高自己的 实际动手能力和独立思考的能力。只有理论知识是不够的,只能纸上谈兵,一旦 遇到实际问题,就会惊慌失措。 以前上课的时候,有时会遇到不懂的地方,现在才明白那是由于我没有在课后及 时对老师所讲内容进行实践操作,所以才只是记住了内容,却没有融会贯通,自 然时间长了越积越多也就不会了。所以以后要及时对上课老师所教知识进行实践 操作,使之达到融会贯通。 经过这次J2ME手机游戏实训,我们对eclipse这个软件有了更深一步的了解与深入,对J2ME类库的使用也有了大大的提高。在程序开发的过程中,我遇到了 各种各样的问题和错误。但面对种种问题和困难,还是得想尽一切办法去解决。 或是去网上查资料,或是想其他同学请教,或是互相讨论,或是查阅相关书籍。 现在,这次实训总算完成了,所付出的努力和心血总算没有白费。 《J2ME手机游戏开发技术详解》
/
本文档为【赛车手机游戏实训报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索