📄 netpetsprite.java
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.*;import java.util.*;public class NetPetSprite extends Sprite implements Runnable{ public static boolean gameover=false;//游戏结束 private static boolean interrupt;//运动是否暂停 ,加在run中 public static void setInterrupt(boolean interrupt) { NetPetSprite.interrupt = interrupt; } private int SPEED=2; private boolean alive; public boolean isAlive(){return alive;} private int type=Canvas.LEFT;//1章鱼 2小狗 3小猫 4小鬼 private int direction; //实用的引用 private NetBattleCanvas bc;//设置游戏win,lose private LayerManager layerManager;//结束游戏时,让layer画东西 private int screenWidth,screenHeight; private NetEnemySprite[] es; private NetUserSprite us[]; private TiledLayer Things; private TiledLayer Water; private TiledLayer Trees; public NetPetSprite(Image image,int x,int y,int type,LayerManager layerManager, NetBattleCanvas bc,GameDesign gd) {//10张图片一起 super(image,image.getWidth()/10,image.getHeight()); defineReferencePixel(image.getWidth()/20,image.getHeight()/2); this.layerManager = layerManager; this.bc = bc; screenWidth = bc.getWidth(); screenHeight = bc.getHeight(); this.setRefPixelPosition(x, y); this.type = type; this.setFrameSequence(new int[]{1,3,5,7,9}); if(type==2 || type==3){ direction=Canvas.RIGHT;//章鱼和小狗朝右,小猫和小鬼朝左 this.setFrameSequence(new int[]{0,2,4,6,8}); } //取得其他坦克,障碍物 es = bc.getEnemySprites(); us = bc.getUserSprites(); try{ switch(BattleCanvas.level){ case 1:this.Things = gd.getThings(); this.Water = gd.getWater(); this.Trees = gd.getTrees(); break; case 2:this.Things = gd.getThings1(); this.Water = gd.getWater1(); this.Trees = gd.getTrees1(); break; case 3:break; } }catch(IOException e){e.printStackTrace();} //添加到画布 alive = true; setVisible(true); layerManager.insert(this,0); //自启动 new Thread(this).start(); new DynimThread().start(); } public int collides(){//跟别人碰撞了 0,没事 2,障碍物 坦克 边界 //遍历所有的敌人坦克 for(int i=0;i<es.length;i++){ if(es[i].getHP()>0 ) if(this.collidesWith(es[i],true)){ return 2;//跟坦克碰撞 } } //遍历所有玩家坦克 for(int i=0;i<us.length;i++){ if(us[i].getHP()>0) if(this.collidesWith(us[i],true)){ return 2;//跟坦克碰撞 } } //遍历障碍物 if(this.collidesWith(Things,true)||this.collidesWith(Trees,true) ||this.collidesWith(Water,true)) return 2; //遍历边界 if(this.getX()<0 || this.getY()<0 || this.getX()>screenWidth-this.getWidth() || this.getY()>screenHeight-this.getHeight()) return 2; return 0; } public void run(){//pet走动 while(!gameover && alive){ if(!interrupt){ if(direction == Canvas.RIGHT){ this.move(SPEED, 0); //若碰撞,改变direction if (this.collides() == 2){//碰撞 this.move(-SPEED,0); try{Thread.sleep(300);} catch(InterruptedException e){e.printStackTrace();} direction = GameCanvas.LEFT; this.setFrameSequence(new int[]{1,3,5,7,9}); } } else{ this.move(-SPEED, 0); //若碰撞,改变direction if (this.collides() == 2){//碰撞 this.move(SPEED,0); try{Thread.sleep(300);} catch(InterruptedException e){e.printStackTrace();} direction = GameCanvas.RIGHT; this.setFrameSequence(new int[]{0,2,4,6,8}); } } } try{ Thread.sleep(200); }catch(InterruptedException e){ e.printStackTrace(); } } } public void explode(){//爆炸方法都是被子弹线程调用 //pet消失 alive = false; this.setVisible(false); layerManager.remove(this); //画出爆炸效果 Image explodeImage = null; try{ explodeImage = Image.createImage("/tank/tentExplode.png"); }catch(IOException e){ e.printStackTrace(); } Sprite explodeSprite = new Sprite(explodeImage,18,18); explodeSprite.defineReferencePixel(9,9); explodeSprite.setRefPixelPosition(this.getRefPixelX(),this.getRefPixelY()); layerManager.insert(explodeSprite, 0); explodeSprite.setVisible(true); int count=0; Sound.instance.petExplodePlayer(); while(++count<=4){//播放张图片 try { Thread.sleep(60); //keep the explode effect on screen for a short moment }catch (InterruptedException e) { e.printStackTrace(); } while(interrupt){//如果暂停,爆炸效果仍存在 try { Thread.sleep(10); //keep the explode effect on screen for a short moment }catch (InterruptedException e) { e.printStackTrace(); } } explodeSprite.nextFrame(); } explodeSprite.setVisible(false); layerManager.remove(explodeSprite); //new 出法宝 if(this.type == 1){//章鱼 Image image = null; try{ image = Image.createImage("/tank/aShip.png"); }catch(IOException e){e.printStackTrace();} new NetTalismanSprite(image,2,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager); } else if(this.type == 2){//小狗,new出 Image image = null; try{ image = Image.createImage("/tank/aProtect.png"); }catch(IOException e){e.printStackTrace();} new NetTalismanSprite(image,3,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager); } else if(this.type == 3){//小猫,new出子弹 Image image = null; try{ image = Image.createImage("/tank/aBullet.png"); }catch(IOException e){e.printStackTrace();} new NetTalismanSprite(image,8,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager); } else if(this.type == 4){//小鬼,new出 Image image = null; try{ image = Image.createImage("/tank/aTent.png"); }catch(IOException e){e.printStackTrace();} new NetTalismanSprite(image,7,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager); } } private class DynimThread extends Thread{ public void run(){//动态播放 while(!gameover && alive){ if(!interrupt){ NetPetSprite.this.nextFrame(); } try{ Thread.sleep(100); }catch(InterruptedException e){ e.printStackTrace(); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -