📄 bombcanvas.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 + -