📄 tankcanvas.java
字号:
package src;
import java.io.IOException;
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.TiledLayer;
public class TankCanvas extends GameCanvas implements Runnable {
private boolean isplay;
public static PlayerTankSprite playerTank;
public static EnemyTankSprite enemytanksprite;
public static ExplosionSprite explosion;
public static TiledLayer groundBoard;
public static TiledLayer forgegroundBoard;
public static LayerManager tankLayermanager;
public static int canvasWidth;
public static int canvasHeight;
public static int fx;
public static int sd;
public int tanksd;
TankMIDlet midlet;
public static boolean gameover;
public static int num = 2;
public static int enum = 5;
public TankCanvas(TankMIDlet midlet) throws IOException {
super(true);
tanksd = 2;
fx = 3;
sd = -5;
this.midlet = midlet;
forgegroundBoard = creatBoard(Map.map1_level1);
groundBoard = creatBoard(Map.map0_level1);
canvasWidth = this.getWidth();
canvasHeight = this.getHeight();
tankLayermanager = new LayerManager();
tankLayermanager.append(forgegroundBoard);
createTank();
createEnemyTank();
tankLayermanager.append(groundBoard);
}
public static void createTank() {
try {
Image image = Image.createImage("/res/tank.png");
playerTank = new PlayerTankSprite(image, 14, 14);
tankLayermanager.append(playerTank);
tankLayermanager.append(playerTank.bullets);
playerTank.setPosition(121, 136);
} catch (IOException ioe) {
} catch (Exception e) {
}
}
public static void createEnemyTank() {
try {
Image images = Image.createImage("/res/enemyTank.png");
enemytanksprite = new EnemyTankSprite(images, 14, 14);
tankLayermanager.append(enemytanksprite);
tankLayermanager.append(enemytanksprite.enemybullets);
enemytanksprite.setPosition(20, 20);
enemytanksprite.start();
} catch (Exception e) {
}
}
private TiledLayer creatBoard(int[] map0_level1) throws IOException {
Image image = Image.createImage("/res/bg.png");
TiledLayer tiledLayer = new TiledLayer(12, 12, image, 15, 15);
// int[] map0_level1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0,
// 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 1, 0, 0, 0, 0, 4, 0, 0,
// 0, 2, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 3, 1, 2,
// 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
// 2, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4,
// 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
//
// };
for (int i = 0; i < map0_level1.length; i++) {
int column = i % 12;
int row = (i - column) / 12;
tiledLayer.setCell(column, row, map0_level1[i]);
}
return tiledLayer;
}
public void start() {
isplay = true;
Thread t = new Thread(this);
t.start();
}
public void run() {
Graphics g = getGraphics();
int timeStep = 20;
while (isplay) {
long start = System.currentTimeMillis();
tick();
input();
render(g);
long end = System.currentTimeMillis();
int duration = (int) (end - start);
if (duration < timeStep) {
try {
Thread.sleep(timeStep - duration);
} catch (InterruptedException ie) {
stop();
}
}
}
}
private void tick() {
if (playerTank.collidesWith(groundBoard, true))
playerTank.undo();
if (enemytanksprite.collidesWith(groundBoard, true)) {
enemytanksprite.undo();
}
if (enemytanksprite.collidesWith(playerTank, true))
{
enemytanksprite.setVisible(false);
playerTank.setVisible(false);
playerTank.setVisible(false);
tankLayermanager.remove(TankCanvas.playerTank);
enemytanksprite.setVisible(false);
tankLayermanager.remove(TankCanvas.enemytanksprite);
enemytanksprite.elift = false;
createTank();
createEnemyTank();
}
}
private void input() {
int keyStates = getKeyStates();
if ((keyStates & LEFT_PRESSED) != 0) {
playerTank.forward(-tanksd, 1);// 1为左标志
fx = 1;
sd = -5;
if ((keyStates & FIRE_PRESSED) != 0) {
playerTank.bullets.start(playerTank.getX(), playerTank.getY(),
fx, sd, 1);
}
} else if ((keyStates & RIGHT_PRESSED) != 0) {
playerTank.forward(tanksd, 2);// 2为右标志
fx = 2;
sd = 5;
if ((keyStates & FIRE_PRESSED) != 0) {
playerTank.bullets.start(playerTank.getX(), playerTank.getY(),
fx, sd, 1);
}
} else if ((keyStates & UP_PRESSED) != 0) {
playerTank.forward(-tanksd, 3);// 3为上标志
fx = 3;
sd = -5;
if ((keyStates & FIRE_PRESSED) != 0) {
playerTank.bullets.start(playerTank.getX(), playerTank.getY(),
fx, sd, 1);
}
} else if ((keyStates & DOWN_PRESSED) != 0) {
playerTank.forward(tanksd, 4);// 4为下标志
fx = 4;
sd = 5;
if ((keyStates & FIRE_PRESSED) != 0) {
playerTank.bullets.start(playerTank.getX(), playerTank.getY(),
fx, sd, 1);
}
}
if ((keyStates & FIRE_PRESSED) != 0) {
playerTank.bullets.start(playerTank.getX(), playerTank.getY(), fx,
sd, 1);
}
}
private void render(Graphics g) {
int w = getWidth();
int h = getHeight();
g.setColor(0x000000);
g.fillRect(0, 0, w, h);
tankLayermanager.paint(g, 0, 0);
// g.setColor(0xff0000);
// g.drawRect(x, y, 180, 180);
flushGraphics();
if (gameover) {
isplay = false;
w = getWidth();
h = getHeight();
g.setColor(0x000000);
g.fillRect(0, 0, w, h);
g.setColor(0xffffff);
g.drawString("GAME OVER", w / 2 - 80, h / 2, g.LEFT | g.TOP);
g.drawString("Tank 1.0", w / 2 - 80, h / 2 + 15, g.LEFT | g.TOP);
g.drawString("宿迁学院三系", w / 2 - 80, h / 2 + 30, g.LEFT | g.TOP);
flushGraphics();
}
}
public void stop() {
isplay = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -