j2me程序课程设计论文_第1页
j2me程序课程设计论文_第2页
j2me程序课程设计论文_第3页
j2me程序课程设计论文_第4页
j2me程序课程设计论文_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、J2ME课程论文课程论文广东海洋大学J2ME课程论文目目 录录1游戏的总体构思.32游戏的类设计.32.1HenwayMIDlet 类.32.2HCanvas 类.33游戏的详细设计.33.1 实现汽车的川流不息.33.2 实现屏幕中各种图像的显示.43.3 实现小鸡在屏幕内部运动.43.4 实现小鸡的移动.43.5 实现游戏结果的输出.44游戏的功能及实现的界面.45本次课程设计心得体会.56附源程序清单.66.3HenwayMIDlet 类.66.4HCanvas 类.7参考文献.13广东海洋大学J2ME课程论文基于 J2ME 的手机游戏小鸡过马路的开发与实现信息管理与信息系统专业,学号

2、201011671134,周玲敏1游戏的总体构思本次 j2me 的课程设计主要制作一款小鸡躲避公路上高速行驶的汽车的简单游戏,汽车在上下走向的公路上移动,而小鸡要从屏幕的左边移动到屏幕的右边。每次成功穿过,成绩增加;相反在穿马路时被撞死,则减掉一次机会,每次游戏共有 3 次机会。看谁在这 3 次机会中,成绩最高。基于各种编程技术实现的娱乐性游戏让人们抛弃对以前玩的日复一日、年复一年的实体(实物)游戏的厌倦情绪,重新调动人们游戏的热外,通过本游戏的开发,体现目前网络和电脑游戏的强大的灵活性和趣味性。2游戏的类设计2.1 HenwayMIDlet 类在小鸡过马路的游戏中,定义一个 HenwayMI

3、Dlet 的类结构,继承自 MIDlet 类,并扩展 CommandListener 接口。其中 startApp ( ) 函数负责程序的初始化功能, pauseApp ( )函数是当一个程序处于暂停状态的时候自动执行的函数 ,destroypp ( )函数则是当一个程序要退出时才会执行的函数。 并且在该类的最后commandAction(Command c, Displayable s)实现对键盘按键的监听。2.2 HCanvas 类通过 HCanvas 类实现小鸡过马路的具体功能设计,继承自 GameCanvas 类,并扩展 Runnable 接口。主要调用的方法有:start(),sto

4、p(),run(),update()等。3游戏的详细设计3.1 实现汽车的川流不息主要实现了游戏循环。简单的说就是不断的重画物体。在游戏中汽车在来回的移动,我们就要通过计算得到每一个汽车的位置,在新的位置上不断的绘制,只要速度足够的快,那么给人的感觉就是汽车移动了。初始化高速公路上川流不息的洗车,通过定义一个 carSprite数组进行设置。左边两辆洗车从上往下走,速度为 3 和 1;右边广东海洋大学J2ME课程论文的两辆洗车从下往上走,速度为 2 和 5,方向的设置主要通过正负速度来实现。3.2 实现屏幕中各种图像的显示Image 类的一个静态方法 createImage ( ) 用来载入和

5、创建图像, 我们只要把图像文件的名字指定为上面 createImage ( )方法的参数即可。该方法传回 Image 类的一个实例对象。这样我们就可以使用 Graphic 类提供的 draw(Graphics g)方法来绘制图像。3.3 实现小鸡在屏幕内部运动小鸡在屏幕内部运动主要是通过 private void checkBounds(Sprite sprite, boolean wrap)方法实现的。3.4 实现小鸡的移动通过 getKeyStates()得到当前的按键状态并调用 move( )方法实现小鸡在屏幕中的上下左右移动。3.5 实现游戏结果的输出在 update ( )方法中我们

6、对小鸡的复活次数以及分数变量进行初始化,通过checkBounds(carSpritei, true)来检查小鸡和汽车精灵是否碰撞,碰撞后,减掉生命值,如果生命值没了,那么游戏结束。调用 g.setColor() 设置字体颜色;调用g.setFont(Font.getFont(Font.FACE_MONOSPACE,Font.STYLE_BOLD,Font.SIZE_LARGE)来设置字体样式;调用 g.drawString()输出相应的游戏结束语句。4游戏的功能及实现的界面小鸡过马路作为一款简单的益智游戏,主要实现的功能如下:功能一:小鸡通过川流不息的高速公路,必须避开来来往往的车辆,才得以

7、成功的穿越高速公路。功能二:小鸡与汽车性碰撞时,发出警告音,小鸡会回到原始位置。游戏设置小鸡具有 3 次复活的机会,当小鸡与汽车碰撞时,便失去一次机会,同时右下角的小鸡会减少一只,依此类推。功能三:小鸡过马路的游戏提供统计分数的功能,当游戏结束时会显示本次游戏广东海洋大学J2ME课程论文的分数。功能四:小鸡过马路提供方便快捷的重新开始游戏的功能,只需要按中间的确定按钮即可。小鸡过马路主要实现界面如图 1 所示。 图 1、小鸡过马路游戏实现界面5本次课程设计心得体会本学期通过选修了 J2ME 应用教程,让我对 J2ME 程序设计有了初步的了解。通过刘大召老师的精心讲解,以及对我们课后实际操作的相

8、关要求,让我们在学习的过程中更加注重自己个人的动手能力,从而也为我们以后在手机编程方面积累了一定的基础。在学习的过程中,我们主要是通过讨论的形式进行的,从而有利于激发大家对J2ME 程序编程方面的理解和兴趣。给定任务后就进行自主性学习或分小组进行共同学习和合作完成,同学们在操作学习中把自己不理解、不明白的地方提出来,互相讨论、交流,大家坐在一起畅所欲言,解决不了的就让老师来帮助解决,这样使得相互之间都得到了学习、巩固知识的机会,提高了学习的效率,也为教师们搭建了相互学习,相互交流的平台,使我们在相互交流和合作中不断提高和成长,并建立了一定得友谊。本次课程设计主要选取了小鸡过马路该款手机游戏,通

9、过对小鸡过马路游戏的深入了解,并从个人对其非常感兴趣的角度出发对小鸡过马路进行更加深入的学习并调试,加深自己对 J2ME 程序设计思想的领悟。在调试的过程中也出现了很多问题,但是通过去图书馆查找相关资料、上网查阅以及对向同学和老师请教的方式基本上解决广东海洋大学J2ME课程论文了游戏调试过程中遇到的难题。通过本次 J2ME 手机游戏设计,让我更深刻的了解程序设计的基本思想,巩固了J2ME 程序设计的基本知识。本次课程设计所开发的手机游戏,实现了手机游戏的一些基本和必需的功能。如游戏的界面设置,游戏动画的设置,玩家的控制键设置,游戏的结果的显示,游戏的开始和暂停等功能。但游戏功能还存在着很多不足

10、,首先,对游戏的动画设计不够熟悉,技巧性不强,界面的设置也不够美观。这些对于玩家来说是非常重要,将直接决定本游戏的生存能力。其次,有些功能不能实现。这次游戏的功能没能做到十全十美,是由于自身能力的不足和时间的限制,没有对游戏的开发进行进一步研究,还有很多地方需要改进。 6附源程序清单6.3 HenwayMIDlet 类import javax.microedition.midlet.*;import javax.microedition.lcdui.*;/定义一个HenwayMIDlet的类结构,要求继承自MIDlet类,并扩展CommandListener接口public class Hen

11、wayMIDlet extends MIDlet implements CommandListener private HCanvas canvas;/先定义一个我们要创建的启动界面类的实例,该类我们命名为canvas public void startApp() /startApp ( ) 函数负责程序的初始化功能 if (canvas = null) /将负责现实的类通过我们自定义的canvas类的构造函数,传递给canvas类 canvas = new HCanvas(Display.getDisplay(this); Command exitCommand = new Command(

12、Exit, Command.EXIT, 0); /定义了一个Command控件变量并创建一个新的Command实例 canvas.addCommand(exitCommand);/将命令添加到界面中 canvas.setCommandListener(this);/设定对该命令的监听 /创建成功后启动画布 canvas.start(); public void pauseApp() /pauseApp ( )函数是当一个程序处于暂 停状态的时候自动执行的函数 public void destroyApp(boolean unconditional) / destroypp ( )函数则是当广东

13、海洋大学J2ME课程论文一个程序要退出时才会执行的函数 canvas.stop(); /定义命令处理函数,当被监听的命令被触发时, 执行该代码 public void commandAction(Command c, Displayable s) if (c.getCommandType() = Command.EXIT) destroyApp(true); notifyDestroyed(); 6.4 HCanvas 类import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.ut

14、il.*;import java.io.*;public class HCanvas extends GameCanvas implements Runnable private Display display; /这里定义一个图像类,用来显示启动界面 private boolean sleeping;/游戏当前状态 private long frameDelay;/设置游戏帧速率 private int inputDelay;/ private Image background;/定义背景图像 private Image chickenHead;/定义小鸡图像 private Sprite

15、chickenSprite;/小鸡精灵 private Sprite carSprite = new Sprite4;/定义洗车精灵数组 private int carYSpeed = new int4;/定义汽车精灵图像数组 private boolean gameOver;/游戏结束的标志 private int numLives; /定义游戏的存活次数 private int score;/记录玩家的成绩 public HCanvas(Display d) super(true); /继承父类的功能 display = d;/存储显示类的实例 frameDelay = 33; / 设置帧

16、速率,以每秒30帧。把每秒的帧数限定到最高30帧, /这一般是游戏的设定,为的是让游戏运行时占用系统的Cpu较小 inputDelay = 0; /定义显示类的成员函数strat ( ) public void start() display.setCurrent(this); / 设置画布为当前屏幕 广东海洋大学J2ME课程论文 gameOver = false; /游戏结束 numLives = 3; /游戏复活的3次机会 score = 0; /初始化游戏的起始分数为0 / 在start ( )方法中我们对上面的变量进行初始化 / 初始化背景图片、小鸡精灵还有洗车 try backgro

17、und = Image.createImage(/Highway.png);/创建背景图片:高速公路 chickenHead = Image.createImage(/ChickenHead.png);/创建精灵图像 chickenSprite = new Sprite(Image.createImage(/Chicken.png), 22, 22); /设定精灵图像的大小 chickenSprite.setPosition(2, 77);/设定精灵图像的位置/初始化高速公路上川流不息的洗车,通过定义一个carSprite数组进行设置。左边两辆洗车从上往下走,速度为3和1;右边的两辆洗车从下往

18、上走,速度为2和5,方向的设置主要通过正负速度来实现 carSprite0 = new Sprite(Image.createImage(/Car1.png);/创建第一辆汽车通过 Image.createImage()方法调用资源目录下存放的洗车图片 carSprite0.setPosition(27, 0); /设置第一辆汽车的初始位置 carYSpeed0 = 3;/第一辆汽车从上往下走,速度为3 carSprite1 = new Sprite(Image.createImage(/Car2.png); carSprite1.setPosition(62, 0); carYSpeed1

19、= 1; /第二辆汽车从上往下走,速度为1 carSprite2 = new Sprite(Image.createImage(/Car3.png); carSprite2.setPosition(93, 67); carYSpeed2 = -2;/第三辆汽车从下往上走,速度为-2 (符号表示方向) carSprite3 = new Sprite(Image.createImage(/Car4.png); carSprite3.setPosition(128, 64); carYSpeed3 = -5;/第一辆汽车从下往上走,速度为-5 /图片加载结束 catch (IOException e

20、) System.err.println(Failed loading images!); /捕获异常,不能正常加载图片 sleeping = false; Thread t = new Thread(this); /创建游戏线程 t.start();/线程开始和工作 public void stop() / 停止动画 sleeping = true; /游戏主循环 public void run() 广东海洋大学J2ME课程论文 Graphics g = getGraphics(); / The main game loop while (!sleeping) update();/更新数据

21、draw(g); /显示图像 try Thread.sleep(frameDelay); catch (InterruptedException ie) private void update() / 检查游戏是否从新开始 if (gameOver) int keyState = getKeyStates();/得到当前的按键状态 if (keyState & FIRE_PRESSED) != 0) / 当按下确定键时,开始一个新游戏,初始化各种变量 chickenSprite.setPosition(2, 77); gameOver = false; score = 0; numLi

22、ves = 3; return; / 按键控制小鸡的移动 if (+inputDelay 2) int keyState = getKeyStates(); if (keyState & LEFT_PRESSED) != 0) chickenSprite.move(-6, 0); /当按下左键时,调用move方法 chickenSprite.nextFrame(); /显示下一帧动画 else if (keyState & RIGHT_PRESSED) != 0) /右键按下 chickenSprite.move(6, 0); chickenSprite.nextFrame()

23、; if (keyState & UP_PRESSED) != 0) /上键按下 chickenSprite.move(0, -6); chickenSprite.nextFrame(); else if (keyState & DOWN_PRESSED) != 0) /下键按下 chickenSprite.move(0, 6);广东海洋大学J2ME课程论文 chickenSprite.nextFrame(); checkBounds(chickenSprite, false); / 重设延迟 inputDelay = 0; / 检查小鸡的位置,如果过了马路,记录加25,并且让

24、小鸡重新回到开始处,如果发生碰撞的话就产生警告音 if (chickenSprite.getX() 154) AlertType.WARNING.playSound(display); chickenSprite.setPosition(2, 77); score += 25; / 更新汽车精灵 for (int i = 0; i 4; i+) / 移动汽车精灵 carSpritei.move(0, carYSpeedi); checkBounds(carSpritei, true); / 检查小鸡和汽车精灵是否碰撞 if (chickenSprite.collidesWith(carSpri

25、tei, true) AlertType.ERROR.playSound(display); / 碰撞后,减掉生命值,如果生命值没了,游戏结束 if (-numLives = 0) gameOver = true; else / 否则,重新过马路 chickenSprite.setPosition(2, 77); break; / 在draw ( )方法中添加代码,显示游戏结束等信息 private void draw(Graphics g) / 绘制高速公路背景 g.drawImage(background, 0, 0, Graphics.TOP | Graphics.LEFT);广东海洋大

26、学J2ME课程论文 / 绘制提供复活机会的小鸡 for (int i = 0; i numLives; i+) g.drawImage(chickenHead, 180 - (i + 1) * 8), 170, Graphics.TOP | Graphics.LEFT); / 绘制小鸡精灵 chickenSprite.paint(g); / 绘制洗车精灵 for (int i = 0; i 4; i+) carSpritei.paint(g); if (gameOver) / 游戏结束,显示“game over”和成绩 g.setColor(255, 0, 255); / 设置字体颜色 g.setFont(Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE);/设置字体样式 g.drawString(本次游戏结束, 90, 40, Graphics.TOP | Graphics.HCENTER);/显示字符串 g.setFont(Font.getFont(Font.FAC

温馨提示

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

最新文档

评论

0/150

提交评论