您的当前位置:首页正文

J2ME小游戏

2021-09-28 来源:个人技术集锦
程序运行界面

一. 程序代码 1. 启动程序类:(GameStart.java)

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

public class GameStart extends MIDlet implements CommandListener { public Command exitCom; public GameStart() { exitCom = new Command(\"退出\ } protected void startApp() throws MIDletStateChangeException { FlyBird bird = new FlyBird(); bird.addCommand(exitCom); bird.setCommandListener(this); Display.getDisplay(this).setCurrent(bird); } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } public void commandAction(Command com, Displayable displayable) { if (com == exitCom) { try { this.destroyApp(false); } catch (MIDletStateChangeException e) { e.printStackTrace(); } this.notifyDestroyed();// 通知应用程序管理已经完成结束动作 } } }

2. 程序运行类(FlyBird.java)

import java.io.IOException; import java.util.Random;

import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.game.GameCanvas; import javax.microedition.lcdui.game.Sprite;

public class FlyBird extends GameCanvas implements Runnable { public final static int UP = 0, RIGHT = 1, DOWN = 2, LEFT = 3; public int direction = RIGHT;//小鸟精灵的飞行方向 public Random random;// 创建一个随机数生成器 public int moveX = 2, moveY = 0;// 在XY轴方向上移动速度 public int[] frameList = { 3, 4, 5, 4 };// 精灵的播放帧序列 public int[][] moveXY = { { 0, -2 }, { 2, 0 }, { 0, 2 }, { -2, 0 } };// XY轴移动速度数组 public Image birdImg, treeImg; public Sprite bird, tree;// 精灵对象 public Graphics offGra;// 缓冲区画笔 protected FlyBird() { super(false);// 不屏蔽MIDP1.0的键盘监测事件 try { birdImg = Image.createImage(\"/bird1.png\"); treeImg = Image.createImage(\"/tree.png\"); } catch (IOException e) { e.printStackTrace(); System.out.println(\"load file error!\"); } random = new Random();//实例化随机数生成器 bird = new Sprite(birdImg, 24, 32);// 实例画精灵对象 第一个参数对应图片 第二,三参数表示精灵图片的大小 tree = new Sprite(treeImg, 70, 156);//实例化树木精灵 bird.setRefPixelPosition(0, 120);// 设置精灵在屏幕上的位置 tree.setRefPixelPosition(50, 80);// 设置精灵在屏幕上的位置 offGra = this.getGraphics();// 获取系统自定的缓冲区画笔

bird.setFrameSequence(frameList);// 设置精灵的播放帧序列 Thread thread = new Thread(this); thread.start(); } public void alterDirection() {//改变精灵的方向 if (bird.collidesWith(tree, true)) {//像素判断检测小鸟精灵和树木精灵是否碰撞 direction = random.nextInt(4);//随机选择一个方向 this.setMoveXY();//设置对应方向的移动参数和精灵的帧序列 } } public void ctrlSprite() {//控制小鸟精灵的飞行 switch (direction) { case UP:// 当前的移动方向是向上 if (bird.getY() <= -bird.getHeight()) {// 是否精灵快运动到屏幕上边缘 bird.setPosition(bird.getX(), this.getHeight());//设置精灵的位置为屏幕下边缘 } break; case RIGHT:// 当前的移动方向是向右 if (bird.getX() >= this.getWidth()) {// 是否精灵快运动到屏幕右边缘 bird.setPosition(-bird.getWidth(), bird.getY());//设置精灵的位置为屏幕左边缘 } break; case DOWN:// 当前的移动方向是向下 if (bird.getY() >= this.getHeight()) {// 是否精灵快运动到屏幕下边缘 bird.setPosition(bird.getX(), -bird.getHeight());//设置精灵的位置为屏幕上边缘 } break; case LEFT:// 当前的移动方向是向左 if (bird.getX() <= -bird.getWidth()) {// 是否精灵快运动到屏幕左边缘 bird.setPosition(this.getWidth(), bird.getY());//设置精灵的位置为屏幕右边缘 } break; } }

public void setMoveXY() {//设置对应方向的移动参数和精灵的帧序列 switch (direction) { case UP:// 当前的移动方向是向上 frameList[0] = 0; frameList[1] = 1; frameList[2] = 2; frameList[3] = 1; bird.setFrameSequence(frameList);// 设置精灵显示的帧序列 moveX = moveXY[UP][0];// 在X轴方向上移动速度 moveY = moveXY[UP][1];// 在Y轴方向上移动速度 break; case RIGHT:// 当前的移动方向是向右 frameList[0] = 3; frameList[1] = 4; frameList[2] = 5; frameList[3] = 4; bird.setFrameSequence(frameList);// 设置精灵显示的帧序列 moveX = moveXY[RIGHT][0];// 在X轴方向上移动速度 moveY = moveXY[RIGHT][1];// 在Y轴方向上移动速度 break; case DOWN:// 当前的移动方向是向下 frameList[0] = 6; frameList[1] = 7; frameList[2] = 8; frameList[3] = 7; bird.setFrameSequence(frameList);// 设置精灵显示的帧序列 moveX = moveXY[DOWN][0];// 在X轴方向上移动速度 moveY = moveXY[DOWN][1];// 在Y轴方向上移动速度 break; case LEFT:// 当前的移动方向是向左 frameList[0] = 9; frameList[1] = 10; frameList[2] = 11; frameList[3] = 10; bird.setFrameSequence(frameList);// 设置精灵显示的帧序列 moveX = moveXY[LEFT][0];// 在X轴方向上移动速度 moveY = moveXY[LEFT][1];// 在Y轴方向上移动速度 break; } }

public void drawDisplay(Graphics gra) {// 绘制缓冲区的屏幕 gra.setColor(0); gra.fillRect(0, 0, this.getWidth(), this.getHeight()); bird.nextFrame();//显示下一帧 bird.move(moveX, moveY);// 精灵对象在屏幕上移动的距离 参数表示:在X轴的移动距离,在Y轴的移动距离 bird.paint(gra);// 在缓冲区屏幕绘制出精灵对象 tree.paint(gra);// 在缓冲区屏幕绘制出精灵对象 this.flushGraphics();// 把缓冲区屏幕的内容绘制到屏幕上 } public void run() { while (true) { this.ctrlSprite();//控制精灵飞行 this.alterDirection();//改变精灵的方向 this.drawDisplay(offGra); try { Thread.sleep(70);// 线程睡眠70豪秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }

因篇幅问题不能全部显示,请点此查看更多更全内容