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

📄 bombcanvas.java

📁 《精通JAVA手机游戏与应用程序设计》随书光盘
💻 JAVA
字号:
package bomb_sound;

import java.io.InputStream;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;

public class BombCanvas extends GameCanvas implements Runnable {

	private Image bkgImage, planeImage_1, planeImage_2, 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, plane_2, bomb;
	
	private PlayMusic pm;

	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("/game/backg.png");
			//图片大小为80*64
			planeImage_1 = Image.createImage("/game/plane1.png");
			//图片大小为144*144
			planeImage_2 = Image.createImage("/game/plane2.png");
			bombImage = Image.createImage("/game/bomb.png");

		} catch (Exception e) {

		}

		int i, j;

		g = this.getGraphics();

		//绘画图层1,共6行6列
		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, 80, 64);
		plane_2 = new Sprite(planeImage_2, 144, 144);
		bomb = new Sprite(bombImage, 256, 128);

		layManager = new LayerManager();
		//图层2现在在最前面
		layManager.append(plane_1);
		//大飞机在第2层
		layManager.append(plane_2);
		//爆炸在第3层
		layManager.append(bomb);
		//没有发生碰撞,所以不可视
		bomb.setVisible(false);
		//添加背景图层
		layManager.append(background);

		plane_1.setPosition(60, 180);
		plane_2.setPosition(80, 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) {
			if (drawY - 2 > screenHeight) {
				drawY = drawY - 2;
				dx = dx + 1;
			} else {
				drawY = 720 - screenHeight;
				dx = dx + 1;
			}

		}
		if ((keyState & DOWN_PRESSED) != 0) {
			if (drawY + 2 < 720 - screenHeight) {
				drawY = drawY + 2;
				dx = dx + 1;
			} else {
				drawY = screenHeight;
				dx = dx + 1;
			}

		}

	}

	public void run() {
		//为游戏加入后台音乐
		Thread t = new Thread() {
			public void run() {	
				pm = new PlayMusic();
				if(pm != null)
					pm.playwavfile();
			}
		};
		t.start();

		//无限循环检测键盘的输入
		while (true) {
			keyPressed();
			draw();
			try {
				Thread.sleep(50);
			} catch (InterruptedException ie) {
			}
		}
	}

	public void draw() {
		//移动背景
		layManager.setViewWindow(drawX, drawY, screenWidth, screenHeight);
		plane_2.setPosition(drawX + 60, drawY + 0 + dx);
		plane_1.setPosition(drawX + 80, drawY + 180);

		//使用象素碰撞检查,如果发生碰撞则显示爆炸图片
		if (plane_1.collidesWith(plane_2, true)) {
			bomb.setPosition(drawX + 10, drawY + 180);
			bomb.setVisible(true);
			plane_1.setVisible(false);
			plane_2.setVisible(false);
			
			pm.playbomb();
		}

		//绘制在屏幕撒上
		layManager.paint(g, 0, 0);
		flushGraphics();

	}

	class PlayMusic {
		
		PlayMusic(){
			
		}
		public void playwavfile() {
			try {
				// 从Jar包中读取背景音乐的wav文件
				InputStream in = getClass().getResourceAsStream(
						"/GamebackgroundSound.wav");
				//指定文件类型
				Player p = Manager.createPlayer(in, "audio/x-wav");

				p.start();
			} catch (Exception e) {

				Alert alr = new Alert("错误", "不能够播放 WAV 文件!", null,
						AlertType.ERROR);
				alr.setTimeout(Alert.FOREVER);
			}
		}
		public void playbomb(){
			try {
				// 从Jar包中读取爆炸声音的wav文件
				InputStream in = getClass().getResourceAsStream(
						"/EXPLODE.WAV");
				//指定文件类型
				Player p;			
				p = Manager.createPlayer(in, "audio/x-wav");

				p.start();
			
			} catch (Exception e) {

				Alert alr = new Alert("错误", "不能够播放 WAV 文件!", null,
						AlertType.ERROR);
				alr.setTimeout(Alert.FOREVER);
			}
		}
		
	}
}

⌨️ 快捷键说明

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