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

📄 tankcanvas.java

📁 tank游戏
💻 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 + -