呵呵,前段时间在网上认识了个从业J2ME开发的前辈,觉得他好是客气,人应该很好很好。为了能够在他手下兼职,我和他提出了一个星期期限,就是在一个星期内从零开始到会开发一款简单的J2ME 2D游戏。哈哈哈,从来没有那么兴奋过,OK,在一个星期后,我发给了他这样的一个游戏:
本来想开发一款传统的打飞机游戏的,可是不知道该如何控制众多随机敌机从天而降的效果出来,所以干脆将错就错,用随机出现的一块陨石来砸也可以移动的飞机。哈哈哈,很烂吧。不过也实现了哈哈哈。心想,谁会玩我这款游戏呢?哈哈哈
本游戏用到的技术有:
游戏背景的布局方法;精灵类对象的移动方法;碰撞检测以及精灵可见或不可见的实现;和游戏屏幕滚动实现
以下是源代码:
BombCanvas.java
:
package bomb;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
public class BombCanvas extends GameCanvas implements Runnable {
private Image bkgImage,planeImage_1,shitou_1,shitou_2,shitou_3,shitou_4,bombImage;
private Graphics g;
private TiledLayer background;
private LayerManager layManager;
private int screenWidth = 0; //屏幕宽度
private int screenHeight = 0; //屏幕高度
private int drawX = 0; //要绘制的X坐标
private int drawY = 0; //要绘制的Y坐标
private int dx = 0;
private Sprite plane_1,shi_1,shi_2,shi_3,shi_4,bomb,bg;
private int moveLR = 60;
private int moveUD = 180;
private int down = 60;
private int count1 = 0;
private int count2 = 0;
private int count3 = 0;
private int count4 = 0;
private Random random;
private byte[][] backgroundMap = { {1,2,3,4,5,6},
{7,8,9,10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30},
{31,32,33,34,35,36},
{1,2,3,4,5,6},
{7,8,9,10,11,12},
{13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30},
{31,32,33,34,35,36}};
protected BombCanvas() {
super(true);
screenHeight = getHeight();
screenWidth = getWidth();
try {
//图片大小为360*360,为了简单没有设置自己的地图格式
bkgImage = Image.createImage("/backg.png");
//图片大小为80*64
planeImage_1 = Image.createImage("/plane1.png");
//图片大小为19*15
shitou_1 = Image.createImage("/shitou.png");
shitou_2 = Image.createImage("/shitou.png");
shitou_3 = Image.createImage("/shitou.png");
shitou_4 = Image.createImage("/shitou.png");
bombImage = Image.createImage("/bomb.png");
} catch (Exception e) {
System.out.print("加载不了图片");
}
int i,j;
g = this.getGraphics();
//绘画图层1,共6列12行
background = new TiledLayer(6,12,bkgImage,60,60);
for(i=0;i<12;i++)
for(j=0;j<6;j++){
background.setCell(j,i,backgroundMap[i][j]);
}
plane_1= new Sprite(planeImage_1,19,15);
shi_1= new Sprite(shitou_1,16,16);
shi_2= new Sprite(shitou_1,16,16);
shi_3= new Sprite(shitou_1,16,16);
shi_4= new Sprite(shitou_1,16,16);
bomb = new Sprite(bombImage,256,128);
layManager = new LayerManager();
//图层2现在在最前面
layManager.append(plane_1);
//大飞机在第2层
layManager.append(shi_1);
//爆炸在第3层
layManager.append(bomb);
//没有发生碰撞,所以不可视
bomb.setVisible(false);
//添加背景图层
layManager.append(background);
plane_1.setPosition(60,180);
shi_1.setPosition(80,0);
shi_2.setPosition(60,0);
shi_3.setPosition(40,0);
shi_4.setPosition(10,0);
//绘制在屏幕撒上
layManager.paint(g,0,0); //这一步可以把之前所有的图片都添在屏幕上
flushGraphics();
Thread thread = new Thread(this);
thread.start();
}
public void keyPressed() {
int x, y;
int keyState = getKeyStates();
//判断上下左右键是否被按下
if ((keyState & UP_PRESSED) != 0) {
moveUD = moveUD - 2;
drawY = drawY +2;
}
if ((keyState & DOWN_PRESSED) != 0) {
moveUD = moveUD + 2;
drawY = drawY - 2;
}
if ((keyState & LEFT_PRESSED) != 0) {
moveLR = moveLR - 2;
}
if ((keyState & RIGHT_PRESSED) != 0) {
moveLR = moveLR + 2;
}
if ((keyState & FIRE_PRESSED) != 0) {
random = new Random();
count1 = (int)Math.abs(random.nextInt())%300;
count2 = (int)Math.abs(random.nextInt())%200;
count3 = (int)Math.abs(random.nextInt())%320;
count4 = (int)Math.abs(random.nextInt())%350;
}
}
public void run() {
//无限循环检测键盘的输入
while (true) {
keyPressed();
draw();
try {
Thread.sleep(50);
} catch (InterruptedException ie) {
}
}
}
public void draw(){
//移动背景 屏幕的移动效果一般我们是通过改变View Window的的位置来实现的,
//比如你想屏幕向右移动,那么你要调整View Window的x坐标增加相应的数值,
//如果想屏幕向左移动,那么调整View Window的x坐标减少相应的数值。
//上下移动原理一样
layManager.setViewWindow(drawX,drawY,screenWidth,screenHeight);
shi_1.setPosition(drawX+count1,++down);
shi_2.setPosition(drawX+count2,++down);
shi_3.setPosition(drawX+count3,++down);
shi_4.setPosition(drawX+count4,++down);
if(down >= screenHeight)
{
down = 10;
}
plane_1.setPosition(moveLR,moveUD);
//使用象素碰撞检查,如果发生碰撞则显示爆炸图片
if(plane_1.collidesWith(shi_1,true)){
bomb.setPosition(drawX+10,drawY+180);
bomb.setVisible(true);
plane_1.setVisible(false);
shi_1.setVisible(false);
shi_2.setVisible(false);
shi_3.setVisible(false);
shi_4.setVisible(false);
}
//绘制在屏幕撒上
layManager.paint(g,0,0);
flushGraphics();
}
}
BombDemo.java:
package bomb;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class BombDemo extends MIDlet implements CommandListener{
private Command exitCommand;
private BombCanvas bombCan;
public BombDemo() {
exitCommand = new Command("Exit", Command.EXIT, 1);
bombCan = new BombCanvas();
bombCan.addCommand(exitCommand);
bombCan.setCommandListener(this);
}
protected void startApp() {
Display.getDisplay(this).setCurrent(bombCan);
}
protected void pauseApp() {
}
protected void destroyApp(boolean d) {
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}
相关推荐
我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...
本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 首先,我们要了解J2ME的基础架构。J2ME包括配置(Configurations)、配置文件(Profiles)和功能包...
在Java开发领域,`java.lang.ClassFormatError: Bad version information`是一个常见的错误,通常发生在尝试加载或执行不兼容的字节码时。这个错误表明Java虚拟机(JVM)遇到了一个它无法识别或者处理的类文件版本。...
这个“J2ME&Gaming中文版”教材主要针对的是Java在游戏开发领域的应用,为初学者提供了学习J2ME编程的基础路径。 J2ME的架构由两部分组成:Connected Limited Device Configuration (CLDC) 和 Mobile Information ...
分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME...
一个界面看上去非常专业的J2me游戏:山洞历险记,游戏界面写的相当不错,看上去就比较专业,以前在手机里这款游戏也是很多人喜欢玩的,运行start画面,并且进行选择,如果选中start则调用canvas运行游戏,否则退出,...
在这个压缩包中,我们拥有的是"摩迦历险记"这款游戏的源码,它是一款在J2ME盛行时期流行于Java手机上的游戏。通过分析和学习这个游戏的源码,我们可以深入了解J2ME游戏开发的一些关键技术和知识点。 1. **MIDP...
J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含文档.zip J2ME飞机游戏含...
j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏 j2me 飞机射击游戏...
这个源码是基于J2ME实现的“连连看”游戏,一个经典的益智游戏,玩家需要在限定时间内找出并消除两个相同图案的方块。以下将详细解析这个项目的知识点: 1. **J2ME基础知识** - J2ME架构:J2ME由配置、 profiles ...
J2ME是Java的一个子集,专门用于嵌入式设备,如早期的智能手机、游戏机和个人数字助手。这个项目提供了一个五子棋游戏的完整实现,旨在为开发者提供学习和参考的实例。 在五子棋游戏中,两个玩家轮流在棋盘上放置黑...
《J2ME游戏开发(第一版)》是针对Java Micro Edition(J2ME)平台进行游戏编程的专业指导书籍。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。这本书的焦点在于教导开发者...
总结来说,"J2ME例子:俄罗斯方块"不仅是一个学习J2ME编程的实践项目,也是提升游戏开发技能的良好途径。通过这个过程,开发者可以掌握移动平台上的图形编程、事件处理、游戏逻辑设计等多方面的知识,同时还能了解到...
J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏
总结来说,"J2ME 飞机游戏"代表了一种使用J2ME技术进行的移动游戏开发实践,它涵盖了图形编程、游戏逻辑实现、用户交互、资源管理等多个方面,是学习和理解J2ME开发的很好案例。通过分析和研究这个游戏,开发者不仅...
J2ME不错的飞机游戏,希望大家支持!!!
在本项目中,我们看到的是一个基于J2ME的飞机射击游戏的毕业设计。 【描述】提到的"J2ME飞机游戏的毕业设计"意味着这是一个学生为了完成学业任务而创建的项目。通常,这样的设计会涵盖游戏设计的基本元素,如游戏...
1. **图形渲染**:J2ME游戏引擎通常包含一个图形渲染系统,用于处理2D和3D图形。它们利用低级API如MIDP(Mobile Information Device Profile)的Canvas类来实现高效绘制,确保游戏在不同设备上流畅运行。 2. **物理...
3. **J2ME游戏移植人员**:将已有的游戏从一个平台移植到另一个平台,确保其在不同的设备上都能正常运行。 #### 五、J2ME程序设计的几个原则 良好的程序设计习惯对于提高软件质量和维护性至关重要: 1. **使用...