赛车手机游戏实训报告.doc_第1页
赛车手机游戏实训报告.doc_第2页
赛车手机游戏实训报告.doc_第3页
赛车手机游戏实训报告.doc_第4页
赛车手机游戏实训报告.doc_第5页
免费预览已结束,剩余13页可下载查看

下载本文档

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

文档简介

综 合 实 训 报 告20082009学年第一学期课题名称手机游戏设计综合实训赛车手机游戏开发系 别专 业计算机多媒体技术班 级学 号学生姓名 指导教师: 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.2731市场调研、制定方案、收集素材、赛车游戏的准备工作1、在网上查找各赛车游戏的类型与前景;2、利用网络收集赛车游戏所须的材料;3、利用photoshop软件对素材进行整理与修改。1 、网络上的赛车游戏太难,以我的水平还无法制作;2 、网络上的材料很难找到自己所须的;3、在eclipse软件所在的操作系统上没有photoshop软件。1、 只能自己设计一个较简单的赛车游戏;2、 只能找一些差不多的材料,再利用photoshop软件修改;3 、先在其他操作系统上进行修改材料,再返回原系统。因为材料不够好,所以游戏中的障碍物显得很粗糙。因为不断的改换操作系统,所以浪费了较多的时间。2008.11.13游戏策划、游戏功能架构图、流程图、类继承关系图1、根据所收集的资料对赛车游戏进行策划;2、根据自己的策划绘制手机游戏功能架构图、流程图和类继承关系图。对于各图的含义和它们之间的区别不太清楚,所以一开始不会绘制。通过查找书本资料和在网上查找资料,并且通过询问同学,基本上理解了各个图的含义和其之间的关系和区别。并没有对各图做到深刻了解。2008.11.411游戏开发、各功能模块的实现1、开始制作游戏,编写游戏程序代码;2、通过实训中的各模块的要求,一步步的编写代码,实现各个模块的功能。由于对J2ME知识还不够深入了解,所以在许多细节方面还不会编写。通过对书本上的知识进行巩固和进一步的了解,并且向同学进行询问,基本上解决了这个问题。只是基本上解决了这个问题,并没有能够完美的解决,还存在许多方面的问题。2008.11.1214游戏测试、优化及改进,完成实训报告1、通过eclipse软件进行游戏测试,使其显示在手机屏幕上;2、对游戏的各个功能进行检测和完善;3、通过对程序进行分析,完成实训报告。1、一开始程序上存在着许多细节方面的不足,使其无法在手机屏幕上显示;2、各个功能不够完善,存在缺陷。1、通过查找书本和询问同学,解决了这些不足, 并能够在手机屏幕上显示;2、通过查找书本和询问同学,尽量完善各个功能。各个功能还是存在一些不足。五、 功能模块(算法)描述(可用文字描述,也可用流程图)1、闪屏的实现2、欢迎界面的实现3、进行游戏各功能的选择4、进行游戏(显示计分)5、结束游戏6、退出程序六、 关键类的源代码(*.java文件。程序应符合以下规范要求:A可读性:有注释;B交互性:有输入提示;C结构化程序设计风格:分层缩进、隔行书写)CARDemoMIDletimport 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 CommandListenerDisplay 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;ilist.size();i+) list.delete(i); CARCanvas displayable = new CARCanvas(); Display.getDisplay(this).setCurrent(displayable);/设置显示的下一个屏幕为游戏界面 list.removeCommand(okCommand); break; case 1: for(i=0;ilist.size();i+) list.delete(i); list.set(0,在这个游戏中,玩家可以用上下左右键来控制赛车向下行驶. + 注意不要撞到其他赛车和人物, null);/设置下一个界面的显示内容为括号中的内容 list.removeCommand(okCommand); break; case 2: destroyApp(false);/退出程序 notifyDestroyed(); break; else if(cmd=backCommand)/设置按键状态为返回 for(i=0;ilist.size();i+)list.delete(i); startApp();/开始程序 CARCanvasimport javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.game.*;public class CARCanvas extends GameCanvas implements Runnableprivate static final int X = 0; /定义常量X的值为0private static final int Y = 1; /定义常量Y的值为1private static final int WIDTH = 2; /定义常量WIDTH的值为2private static final int HEIGHT = 3; /定义常量HEIGHT的值为3private static final int STEP = 3; /定义常量STEP的值为3private Hero loader;private Sprite hero;private Thread thread;private TiledLayer layer;private Map map;private int lastState = -1;private int WORLD_WIDTH; /定义常量WORLD_WIDTHprivate int WORLD_HEIGHT; /定义常量WORLD_HEIGHTprivate int view = new int4; /定义整型数组viewprivate boolean initialized = false;private boolean paused = false; /布尔变量用来控制是否暂停private Object executionLock = new Object();int score=100;/定义初始化分数为100String scoreStr=得分:;public CARCanvas()super(true); /抑制键盘setFullScreenMode(true); /设置全屏模式为真public void showNotify()if(initialized)synchronized (executionLock) /同步if (paused)paused = false;executionLock.notify();/死锁的通知public void hideNotify()synchronized (executionLock)paused = true; /暂停public void initialize()viewX = 0;viewY = 0;viewWIDTH = getWidth();viewHEIGHT = getHeight();loader = new Hero();loader.load();hero = loader.getHero();hero.defineCollisionRectangle(0,0,hero.getWidth(),hero.getHeight();/定义人物与障碍物的碰撞map = new Map();map.insert(hero, 0); /在地图中插入人物heromap.setViewWindow(0, 0, getWidth(), getHeight();/设置视窗的位置int size = getWorldSize();WORLD_WIDTH = size0;WORLD_HEIGHT = size1;initialized = true; /设置视窗的位置private int getWorldSize()int width = 0;int height = 0;for (int i = 0; i width)width = layer.getWidth();if(layer.getHeight() height)height = layer.getHeight();return new intwidth, 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)trywait();catch (Exception e) /捕捉异常int keyState = getKeyStates();/设置键盘状态if (keyState & LEFT_PRESSED) != 0)if (lastState != LEFT_PRESSED) lastState = LEFT_PRESSED; /设置键盘状态为按左键hero.setFrameSequence(new int 0);/设置人物的帧序列elsehero.nextFrame();if(hero.getX() - STEP = 0)hero.move(-STEP, 0);elsehero.setPosition(0, hero.getY();else if (keyState & RIGHT_PRESSED) != 0)if (lastState != RIGHT_PRESSED)lastState = RIGHT_PRESSED;hero.setFrameSequence(new int 0);elsehero.nextFrame();if(hero.getX() + hero.getWidth() = 0)hero.move(0, -STEP);elsehero.setPosition(hero.getX(), 0);else if (keyState & DOWN_PRESSED) != 0)if (lastState != DOWN_PRESSED)lastState = DOWN_PRESSED;hero.setFrameSequence(new int 0);elsehero.nextFrame();if(hero.getY() + hero.getHeight() WORLD_HEIGHT)hero.move(0, STEP);elsehero.setPosition(hero.getX(), WORLD_HEIGHT-hero.getHeight();checkCollision(lastState); /检查碰撞/ Next scroll the view if neededif (hero.getX() = 0)viewX -= dx;/设置视窗的横坐标else if (hero.getX() + hero.getWidth() (viewX + viewWIDTH) - hero.getWidth()int dx =(hero.getX() + hero.getWidth()- (viewX + viewWIDTH - hero.getWidth();/定义并初始化dx的值if(viewX + viewWIDTH = WORLD_WIDTH)viewX += dx;if (hero.getY() = 0)viewY -= dy;else if ( hero.getY() + hero.getHeight() (viewY + viewHEIGHT) - hero.getHeight() / scroll downint dy =(hero.getY() + hero.getHeight()- (viewY + viewHEIGHT - hero.getHeight();if(viewY + viewHEIGHT = WORLD_HEIGHT)viewY += dy;map.setViewWindow(viewX,viewY,viewWIDTH,viewHEIGHT); /设置视窗的大小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();/刷新tryThread.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);elsehero.move(0, -STEP); score-; public void paint(Graphics g) /绘制屏幕if (!initialized)initialize();if (thread = null)start();/线程开始super.paint(g); /调用paint(g)方法Heroimport 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值 Mapimport 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); GroundLayer = new TiledLayer(10, 20, GroundLayer_ti

温馨提示

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

评论

0/150

提交评论