📄 tankcanvas.java
字号:
package demo;import java.io.IOException;import java.util.Random;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.game.GameCanvas;import javax.microedition.lcdui.game.LayerManager;import javax.microedition.lcdui.game.Sprite;/** * * @author lynhung_pro */public class TankCanvas extends GameCanvas implements Runnable{ private static final int SPEED = 3; private static final int TIME = 30; private Sprite redTank, bullet; private boolean interrupted; private LayerManager lm; private TankDesign design; private Sprites sprites; private Sprite [] sprite; private Random rand; private TankRandom spriteRandom; private int Level = 2; private TankBullet tankBullet; private byte direction = GameCanvas.UP; public TankCanvas() throws IOException, InterruptedException{ super(true); try{ Init(); }catch(IOException Ex){ Ex.printStackTrace(); } } public boolean wallCollides(Sprite sprite){ return ( sprite.getX() < 0 || sprite.getY() < 0 || sprite.getX() > (getWidth() - sprite.getWidth()) || sprite.getY() > (getHeight() - sprite.getHeight())); } public boolean spriteCollides(Sprite sprite) { boolean hit = false; for(int i=0;i<Level;i++){ if (sprite.collidesWith( sprite==this.sprite[i]?redTank:this.sprite[i], true)){ hit = true; } } return hit; } public void Init() throws IOException, InterruptedException{ //Khoi tao cac lop design = new TankDesign(); lm = new LayerManager(); sprites = new Sprites(design.getImage(),15,15); //Khoi tao cac sprite redTank = sprites.getRedTank(); sprites.addTank(lm, redTank, 100, 100); sprite = new Sprite[Level]; for(int i=0;i<Level;i++){ sprite[i] = sprites.getGreenTank(); sprites.addTank(lm, sprite[i], 15, 20*i); } //Hoan tat va ve len man hinh design.updateLayerManagerForScreen(lm); //Khoi tao luong cho SpriteRandom for(int i=0;i<Level;i++){ spriteRandom = new TankRandom(this, sprite[i]); spriteRandom.setSequences( design.greenTankSeqUp, Sprite.TRANS_NONE, design.greenTankSeqDown, Sprite.TRANS_NONE, design.greenTankSeqLeft, Sprite.TRANS_NONE, design.greenTankSeqRight, Sprite.TRANS_NONE); (new Thread(spriteRandom)).start(); } } public void sleepTime(int time){ try{ Thread.sleep(time); }catch(InterruptedException Ex){ Ex.printStackTrace(); } } public void gameStop(){ this.interrupted = true; } public void shutRedBullet() throws IOException, InterruptedException{ int xBullet = 0,yBullet = 0; final int SIZE = 5; if(direction == GameCanvas.UP){ xBullet = redTank.getX() + SIZE; yBullet = redTank.getY(); } if(direction == GameCanvas.DOWN){ xBullet = redTank.getX() + SIZE; yBullet = redTank.getY() + 2*SIZE; } if(direction == GameCanvas.LEFT){ xBullet = redTank.getX(); yBullet = redTank.getY() + SIZE; } if(direction == GameCanvas.RIGHT){ xBullet = redTank.getX() + 2*SIZE; yBullet = redTank.getY() + SIZE; } sprites = new Sprites(design.getImage(), 5, 5); bullet = sprites.getRedBullet(); bullet.setPosition(xBullet, yBullet); bullet.setVisible(true); lm.append(bullet); design.updateLayerManagerForScreen(lm); tankBullet = new TankBullet(this, bullet, direction); (new Thread(tankBullet)).start(); sleepTime(4*TIME); } public void shutGreenBullet(Sprite sprite,byte direct) throws IOException, InterruptedException{ int xBullet = 0,yBullet = 0; final int SIZE = 5; if(direct == GameCanvas.UP){ xBullet = sprite.getX() + SIZE; yBullet = sprite.getY(); } if(direct == GameCanvas.DOWN){ xBullet = sprite.getX() + SIZE; yBullet = sprite.getY() + 2*SIZE; } if(direct == GameCanvas.LEFT){ xBullet = sprite.getX(); yBullet = sprite.getY() + SIZE; } if(direct == GameCanvas.RIGHT){ xBullet = sprite.getX() + 2*SIZE; yBullet = sprite.getY() + SIZE; } sprites = new Sprites(design.getImage(), 5, 5); bullet = sprites.getGreenBullet(); bullet.setPosition(xBullet, yBullet); bullet.setVisible(true); lm.append(bullet); design.updateLayerManagerForScreen(lm); tankBullet = new TankBullet(this, bullet, direct); (new Thread(tankBullet)).start(); } public void run() { Graphics g = getGraphics(); while(!interrupted){ int keyState = getKeyStates(); if ((keyState & LEFT_PRESSED) != 0) { direction = GameCanvas.LEFT; redTank.setFrameSequence(design.redTankSeqLeft); redTank.move(-SPEED, 0); if(spriteCollides(redTank)||(wallCollides(redTank))){ redTank.move(SPEED, 0); } } else if ((keyState & RIGHT_PRESSED) != 0) { direction = GameCanvas.RIGHT; redTank.setFrameSequence(design.redTankSeqRight); redTank.move(SPEED, 0); if(spriteCollides(redTank)||(wallCollides(redTank))){ redTank.move(-SPEED, 0); } } else if ((keyState & UP_PRESSED) != 0) { direction = GameCanvas.UP; redTank.setFrameSequence(design.redTankSeqUp); redTank.move(0, -SPEED); if(spriteCollides(redTank)||(wallCollides(redTank))){ redTank.move(0, SPEED); } } else if ((keyState & DOWN_PRESSED) != 0) { direction = GameCanvas.DOWN; redTank.setFrameSequence(design.redTankSeqDown); redTank.move(0, SPEED); if(spriteCollides(redTank)||(wallCollides(redTank))){ redTank.move(0, -SPEED); } }else if((keyState & FIRE_PRESSED) != 0){ try { shutRedBullet(); } catch (IOException ex) { ex.printStackTrace(); } catch (InterruptedException ex) { ex.printStackTrace(); } }else { } this.lm.paint(g, 0, 0); flushGraphics(0, 0, getWidth(), getHeight()); sleepTime(TIME); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -