📄 battlecanvas.java
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.*; public class BattleCanvas extends GameCanvas implements Runnable,CommandListener{ public static int level=1; private boolean win = false; private boolean lose = false; public static boolean gameover=false;//游戏结束 public static boolean interrupt;//控制kingSprite public static void setInterrupt(boolean interrupt) { BattleCanvas.interrupt = interrupt; } public boolean pressStop=false; private Command listCommand = new Command("Sound Setting",Command.ITEM,1); private Command pauseCommand = new Command("Pause",Command.STOP,1); private Command resumeCommand = new Command("Continue",Command.STOP,1); private Command exitCommand = new Command("Exit",Command.ITEM,2); private Command nextCommand = new Command("NextLevel",Command.BACK,1); private GameDesign gameDesign; //平铺层,Base,Tree,Water,Things private TiledLayer base; private TiledLayer water; private TiledLayer trees; private TiledLayer things; //绘图者,LayerManager private LayerManager layerManager; //精灵 private KingSprite kingSprite; private TentSprite tentSprite; public TentSprite getTentSprite() { return tentSprite; } private UserSprite userSprite[]; private EnemySprite enemySprite[]; private BulletSprite userBulletSprite[]; private BulletSprite enemyBulletSprite[]; private PetSprite petSprite[]; private int UserNum=1; private int UserBulletNum=1; private int EnemyNum=6; //total enemy number private int EnemyBulletNum=6; private int PetNum=4; //实用引用 private GameMidlet gameMidlet; public BattleCanvas(GameMidlet gameMidlet){ super(true); this.gameMidlet = gameMidlet; try { //Sound.instance.gamestartPlayer(); Sound.instance.resumeBack(); this.addCommand(pauseCommand); this.addCommand(listCommand); this.addCommand(exitCommand); this.setCommandListener(this); this.init(); } catch (IOException ex) { ex.printStackTrace(); } } public void init()throws IOException{ //绘图者添加平铺层 gameDesign = new GameDesign(); layerManager = new LayerManager(); switch(BattleCanvas.level){ case 1:gameDesign.updateLayerManagerForSchool(layerManager);break; case 2:gameDesign.updateLayerManagerForSchool1(layerManager);break; //case 3:gameDesign.updateLayerManagerForSchool2(layerManager);break; } //添加king Image kingImage = null; try{ kingImage = Image.createImage("/tank/king.png"); }catch(IOException e){ e.printStackTrace(); } kingSprite = new KingSprite(kingImage,layerManager,this); //帐篷 Image tentImage = null; try{ tentImage = Image.createImage("/tank/tent.png"); }catch(IOException e){ e.printStackTrace(); } tentSprite = new TentSprite(tentImage,layerManager,this); //1辆玩家坦克,1发玩家子弹;6辆敌人坦克,6发敌人子弹,4只Pet Image bulletImage = null; Image userImage = null; Image enemyImageNomal=null; Image enemyImageGreen=null; Image enemyImageRed=null; Image octImage = null; Image dogImage = null; Image catImage = null; Image spookImage = null; try{ bulletImage = Image.createImage("/tank/bullet.png"); userImage = Image.createImage("/tank/user.png"); enemyImageNomal = Image.createImage("/tank/enemyNomal.png"); enemyImageGreen = Image.createImage("/tank/enemyGreen.png"); enemyImageRed = Image.createImage("/tank/enemyRed.png"); octImage = Image.createImage("/tank/oct.png"); dogImage = Image.createImage("/tank/dog.png"); catImage = Image.createImage("/tank/cat.png"); spookImage = Image.createImage("/tank/spook.png"); }catch(IOException e){ e.printStackTrace(); } userBulletSprite = new BulletSprite[UserBulletNum]; userSprite = new UserSprite[UserNum]; enemyBulletSprite = new BulletSprite[EnemyBulletNum]; enemySprite = new EnemySprite[EnemyNum]; petSprite = new PetSprite[PetNum];//玩家初始化 for(int i=0;i<UserNum;i++){ userBulletSprite[i] = new BulletSprite(bulletImage,layerManager,100,true,this,gameDesign,kingSprite,tentSprite);//true表示玩家子弹; userSprite[i] = new UserSprite(userImage,layerManager,userBulletSprite[i],this,gameDesign,kingSprite,tentSprite); }//敌人初始化 for(int i=0;i<EnemyNum;i++){ int t = i%4; if(t==0||t==1){ enemyBulletSprite[i] = new BulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new EnemySprite(enemyImageNomal,layerManager,enemyBulletSprite[i],1,this,gameDesign,kingSprite,tentSprite); }else if(t == 2){ enemyBulletSprite[i] = new BulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new EnemySprite(enemyImageGreen,layerManager,enemyBulletSprite[i],2,this,gameDesign,kingSprite,tentSprite); }else{ enemyBulletSprite[i] = new BulletSprite(bulletImage,layerManager,100,false,this,gameDesign,kingSprite,tentSprite);//false表示敌人子弹; enemySprite[i] = new EnemySprite(enemyImageRed,layerManager,enemyBulletSprite[i],3,this,gameDesign,kingSprite,tentSprite); } } //pet初始化 petSprite[0] = new PetSprite(octImage,200,30,1,layerManager,this,gameDesign); petSprite[1] = new PetSprite(dogImage,30,70,2,layerManager,this,gameDesign); petSprite[2] = new PetSprite(catImage,15,50,3,layerManager,this,gameDesign); petSprite[3] = new PetSprite(spookImage,15,90,4,layerManager,this,gameDesign); //敌人坦克启动 new EnemyManager(this); } public void run(){ Graphics g = getGraphics(); while(!gameover){ input(); render(g); try { Thread.sleep(30); } catch (InterruptedException ex) { ex.printStackTrace(); } } } private void input(){//不断检测按键 int keyStates = getKeyStates(); if ((keyStates & UP_PRESSED) != 0) { userSprite[0].setNextDirection(Canvas.UP); userSprite[0].setIsPressed(true); } else if ((keyStates & RIGHT_PRESSED) != 0){ userSprite[0].setNextDirection(Canvas.RIGHT); userSprite[0].setIsPressed(true); } else if ((keyStates & LEFT_PRESSED) != 0) { userSprite[0].setNextDirection(Canvas.LEFT); userSprite[0].setIsPressed(true); } else if ((keyStates & DOWN_PRESSED) != 0) { userSprite[0].setNextDirection(Canvas.DOWN); userSprite[0].setIsPressed(true); } if ((keyStates & FIRE_PRESSED) !=0) { userSprite[0].fire(); }// if((keyStates & KEY_NUM9) != 0) {//新生玩家坦克?????// userSprite[0].restart();// }// if((keyStates & DOWN_PRESSED) != 0){//?????????????????// BulletSprite.setInterrupt(true);// EnemySprite.setInterrupt(true);// UserSprite.setInterrupt(true);// }else if((keyStates & UP_PRESSED) != 0){//?????????????????// BulletSprite.setInterrupt(false);// EnemySprite.setInterrupt(false);// UserSprite.setInterrupt(false);// } } private void render(Graphics g){ layerManager.paint(g, 0, 0); //layerManager //this.serviceRepaints(); flushGraphics(0, 0, this.getWidth(), this.getHeight()); } public BulletSprite[] getEnemyBulletSprites() { return enemyBulletSprite; } public EnemySprite[] getEnemySprites(){ return this.enemySprite; } public BulletSprite[] getUserBulletSprites(){ return this.userBulletSprite; } public UserSprite[] getUserSprites() { return userSprite; } public PetSprite[] getPetSprites() { return petSprite; } public void commandAction(Command c, Displayable d) { if(c == pauseCommand){ this.removeCommand(c); this.addCommand(resumeCommand); Sound.instance.stopBack(); interrupt = true; TentSprite.setInterrupt(true); KingSprite.setInterrupt(true); BulletSprite.setInterrupt(true); EnemySprite.setInterrupt(true); EnemyManager.setInterrupt(true); UserSprite.setInterrupt(true); TalismanSprite.setInterrupt(true); PetSprite.setInterrupt(true); pressStop = true; }else if(c == resumeCommand){ this.removeCommand(c); this.addCommand(pauseCommand); Sound.instance.resumeBack(); interrupt = false; TentSprite.setInterrupt(false); KingSprite.setInterrupt(false); BulletSprite.setInterrupt(false); EnemySprite.setInterrupt(false); EnemyManager.setInterrupt(false); UserSprite.setInterrupt(false); TalismanSprite.setInterrupt(false); PetSprite.setInterrupt(false); pressStop = false; }else if(c == exitCommand){ this.gameOver(); //退出到游戏进入界面 this.gameMidlet.gameMenuCanvasBack(); }else if(c == listCommand){ Sound.instance.stopBack(); interrupt = true; TentSprite.setInterrupt(true); KingSprite.setInterrupt(true); BulletSprite.setInterrupt(true); EnemySprite.setInterrupt(true); EnemyManager.setInterrupt(true); UserSprite.setInterrupt(true); TalismanSprite.setInterrupt(true); PetSprite.setInterrupt(true); this.gameMidlet.option.gaming = true; this.gameMidlet.gameOption(); }else if(c == nextCommand){ this.gameMidlet.chooseLevel = 2; this.gameMidlet.newGame(); } } public void gameOver(){ gameover = true; BulletSprite.gameover = true; UserSprite.gameover = true; EnemySprite.gameover = true; EnemyManager.gameover = true; KingSprite.gameover = true; TentSprite.gameover = true; TalismanSprite.gameover = true; PetSprite.gameover = true; Sound.instance.stopBack(); } public void win(){ if(lose)return;//已经lose Sound.instance.stopBack(); Sound.instance.winPlayer(); win = true; UserSprite.setInterrupt(true); Image winImage = null; try{ winImage = Image.createImage("/tank/win.png"); }catch(IOException e){ e.printStackTrace(); } Sprite winSprite = new Sprite(winImage); winSprite.defineReferencePixel(winImage.getWidth()/2,winImage.getHeight()/2); winSprite.setRefPixelPosition(this.getWidth()/2, this.getHeight()/2); winSprite.setVisible(true); layerManager.insert(winSprite,0); //处理按键 this.removeCommand(pauseCommand); this.removeCommand(resumeCommand); this.removeCommand(listCommand); if(BattleCanvas.level==1)this.addCommand(nextCommand); } public void lose(){//kingSprite userSprite调用 if(win)return;//已经win Sound.instance.stopBack(); Sound.instance.gameoverPlayer(); lose = true; UserSprite.setInterrupt(true); Image loseImage = null; try{ loseImage = Image.createImage("/tank/lose.png"); }catch(IOException e){ e.printStackTrace(); } Sprite loseSprite = new Sprite(loseImage); loseSprite.defineReferencePixel(loseImage.getWidth()/2,loseImage.getHeight()/2); loseSprite.setRefPixelPosition(this.getWidth()/2, this.getHeight()/2); loseSprite.setVisible(true); layerManager.insert(loseSprite,0); //处理按键 this.removeCommand(pauseCommand); this.removeCommand(resumeCommand); this.removeCommand(listCommand); //this.addCommand(exitCommand); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -