⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycanvas.java

📁 Java j2me写的一款手机飞行游戏
💻 JAVA
字号:
import java.io.IOException;
import java.util.Vector;
//Download by http://www.codefans.net
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.game.LayerManager;
import javax.microedition.lcdui.game.Sprite;
import javax.microedition.lcdui.game.TiledLayer;

public class MyCanvas extends GameCanvas implements Runnable {
	HeroSprite mHero;
	TiledLayer mLayer;
	LayerManager mLm;
	TiledLayer mBoxLayer;
	Sprite mD;
	Vector mBulletVec;
	Vector mEnemyVec;
	Vector mExplodeVec;

	int mCounter = 0;
	Image birdImg = null;
	Image explodeImg=null;

	protected MyCanvas() {
		super(true);
		Image img = null;
		Image heroImg = null;
		Image DImg = null;

		try {
			img = Image.createImage("/back2.png");
			heroImg = Image.createImage("/164-Small06.png");
			DImg = Image.createImage("/bullet.png");
			birdImg = Image.createImage("/flyer128X192_1.png");
			explodeImg=Image.createImage("/Explosion.png");

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		HeroSprite.mImgBullet = DImg;
		HeroSprite.mBulletH = HeroSprite.mBulletW = 8;

		mLayer = new TiledLayer(10, 15, img, 32, 32);
		mLayer.fillCells(0, 0, 10, 15, 1);

		mHero = new HeroSprite(heroImg, 56, 40);

		mBoxLayer = new TiledLayer(10, 15, img, 32, 32);
		for (int i = 0; i < 10; i++)
			for (int j = 0; j < 15; j++)
				mBoxLayer.setCell(i, j, mBoxMap[j][i]);

		mD = new Sprite(DImg, 8, 8);

		mLm = new LayerManager();

		mLm.append(mHero);
		mLm.append(mBoxLayer);
		mLm.append(mLayer);
		
		

		mBulletVec = new Vector();
		mEnemyVec = new Vector();
		mExplodeVec=new Vector();

		Thread t = new Thread(this);
		t.start();

	}

	public void handleKey() {
		int key = getKeyStates();

		if ((key & UP_PRESSED) != 0) {
			mHero.moveto(HeroSprite.UP);
			
		}
		if ((key & DOWN_PRESSED) != 0) {
			mHero.moveto(HeroSprite.DOWN);
		}
		if ((key & LEFT_PRESSED) != 0) {
			mHero.moveto(HeroSprite.LEFT);
		}
		if ((key & RIGHT_PRESSED) != 0) {
			mHero.moveto(HeroSprite.RIGHT);
		}

		if ((key & FIRE_PRESSED) != 0) {
			Bullet b = mHero.fire();
			mBulletVec.addElement(b);
			mLm.insert(b, 0);
		}

		int x, y, herox, heroy;

		herox = mHero.getX();
		heroy = mHero.getY();

		x = herox - getWidth() / 2;
		y = heroy - getHeight() / 2;

		if (x < 0)
			x = 0;
		else if (x > mLayer.getWidth() - getWidth())
			x = mLayer.getWidth() - getWidth();

		if (y < 0)
			y = 0;
		else if (y > mLayer.getHeight() - getHeight())
			y = mLayer.getHeight() - getHeight();
		mLm.setViewWindow(x, y, getWidth(), getHeight());
	
		
		
	}

	public void action() {
		// 怪物处理
		mCounter++;
		if (mCounter % 20 == 5) {
			TrialSprit mon = new TrialSprit(birdImg, 32, 48, 1);
			mEnemyVec.addElement(mon);
			mLm.insert(mon, 0);
		}

		for (int i = 0; i < mEnemyVec.size(); i++) {
			TrialSprit m = (TrialSprit) mEnemyVec.elementAt(i);
			m.stepMove();
		}

		// 子弹移动
		for (int i = 0; i < mBulletVec.size(); i++) {
			Bullet b = (Bullet) mBulletVec.elementAt(i);
			b.action();
			
			//检测与敌人的碰撞
			for(int j=0;j<mEnemyVec.size();j++){
				TrialSprit m=(TrialSprit)mEnemyVec.elementAt(j);
				if(b.collidesWith(m, true)){
					mEnemyVec.removeElementAt(j);
					mBulletVec.removeElementAt(i);
					mLm.remove(b);
					mLm.remove(m);
					
					Sprite explode=new Sprite(explodeImg,21,17);
					explode.setPosition(m.getX(), m.getY());
					
					mExplodeVec.addElement(explode);
					mLm.insert(explode, 0);
					
					//j--;
					i--;
					break;
				}
			}
			
			if(b.getX()<0||b.getX()>mLayer.getWidth()||b.getY()<0||b.getY()>mLayer.getHeight()){
				mBulletVec.removeElement(b);
				mLm.remove(b);
			}
				
			
			
		}
		
		//爆炸效果
		for(int i=0;i<mExplodeVec.size();i++){
			Sprite ex=(Sprite)mExplodeVec.elementAt(i);
			ex.nextFrame();
			System.out.println(ex.getFrame()+" "+ex.getRawFrameCount());
			if(ex.getFrame()>=ex.getRawFrameCount()-1){
				mExplodeVec.removeElementAt(i);
				mLm.remove(ex);
				i--;
			}
		}
		
		
		

		// 判断英雄与图层碰撞
		mD.setPosition(mHero.getX() + (mHero.getWidth() - mD.getWidth()) / 2,
				mHero.getY() + (mHero.getHeight() - mD.getHeight()) / 2);
		if (mD.collidesWith(mBoxLayer, false))
			mHero.undo();
	}

	public void run() {
		Graphics g = getGraphics();

		while (true) {
			handleKey();

			action();
			mLm.paint(g, 0, 0);
			flushGraphics();

			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

	}

	byte mBoxMap[][] = {{0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 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, 0, 0, 7, 0, 0, 0, 0, 0},
			{7, 7, 0, 0, 7, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 7, 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}};

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -