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

📄 netenemysprite.java

📁 j2me的坦克大战 元代码 单机版和蓝牙联网版
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.*;import java.util.*;public class NetEnemySprite extends Sprite implements Runnable{    public  static boolean gameover=false;//游戏结束    private static boolean interrupt;//坦克运动是否暂停 ,加在run中    public  static void setInterrupt(boolean interrupt) {       NetEnemySprite.interrupt = interrupt;    }    public static int enemyNum = 6;//当6只坦克的lifes都为0时win    public static boolean isWin(){//被enemyManager调用        if(enemyNum<=0)return true;        return false;    }    private int lifes;//生命数,第一关2条,第二关3条,在EnemyManager类设置    private int type;//坦克类型,1普通,2绿色,3红色    private int HP;//HP值    //private int birthPlace;//初始和复活时的位置,由EnemyManager类决定    public void setHP(int HP) {        this.HP = HP;    }      public int getHP() {        return HP;    }    private static int X1=5,Y1=5,X2,Y2=5,X3,Y3=5;              private int curDirection;//现在的方向    private int nextDirection;//下一方向    private int SPEED=1;//坦克速度//    private boolean isNew = false;//是否刚复活    private Sprite explodeSprite;//爆炸精灵   // private ChangeDirectionThread changeDirectionThread;    //private ShootThread shootThread;    private Random r = new Random();    //实用的引用    private LayerManager layerManager;    private NetBattleCanvas bc;    private NetBulletSprite bullet;    private NetKingSprite kingSprite;//保护物    private NetTentSprite tentSprite;//帐篷    //检测碰撞    private static int screenWidth,screenHeight;    private NetEnemySprite[] es;    private NetUserSprite us[];    private NetPetSprite ps[];    private TiledLayer Things;    private TiledLayer Water;    private TiledLayer Trees;        public NetEnemySprite(Image image,LayerManager layerManager,NetBulletSprite bullet,            int type,NetBattleCanvas bc,GameDesign gd,NetKingSprite kingSprite,NetTentSprite tentSprite) {        super(image);        curDirection=Canvas.DOWN;        nextDirection=Canvas.DOWN;        defineReferencePixel(image.getWidth()/2,image.getHeight()/2);//+1之后,坦克就不会在顶端发炮即炸了        try {            Image explodeImage = Image.createImage("/tank/bulletExplode.png");            explodeSprite = new Sprite(explodeImage);            explodeSprite.defineReferencePixel(explodeImage.getWidth()/2,explodeImage.getHeight()/2);        }catch (IOException e) {e.printStackTrace();}        this.layerManager = layerManager;        this.bullet = bullet;        this.type = type;        this.HP=0;        //isNew = true;        this.bc = bc;        screenWidth = bc.getWidth();        screenHeight = bc.getHeight();        X2 = screenWidth/2;        X3 = screenWidth-5;        this.kingSprite = kingSprite;        this.tentSprite = tentSprite;        es = bc.getEnemySprites();        us = bc.getUserSprites();        ps = bc.getPetSprites();        try{            switch(NetBattleCanvas.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();}        //以下线程在构造方法中,所以只创建一次,用restart创建会因HP问题产生线程多余        //行走的线程       Thread t = new Thread(this);       t.start();        //改变方向的线程      // changeDirectionThread = new ChangeDirectionThread();       // changeDirectionThread.start();       //发射子弹的线程      //  shootThread = new ShootThread();     //  shootThread.start();    }    public int collides(){//跟别人碰撞了 0,没事  2,障碍物 坦克 边界 king pet        //遍历帐篷        if(tentSprite.isVisible()){             if(this.collidesWith(tentSprite,true))return 2;           }       //遍历king       else{            if(this.collidesWith(kingSprite,true))return 2;       }        //遍历pet        for(int i=0;i<ps.length;i++){            if(ps[i].isAlive())                if(this.collidesWith(ps[i],true)){                    return 2;//跟pet碰撞                }        }                 //遍历所有除自己以外的敌人坦克        for(int i=0;i<es.length;i++){            if(es[i].getHP()>0 && this != es[i])                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,false)                ||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 explodes(){//爆炸        //坦克精灵不可见        setVisible(false);        layerManager.remove(this);        //线程没结束,        HP = 0;              //画出爆炸效果         explodeSprite.setRefPixelPosition(this.getRefPixelX(),this.getRefPixelY());        layerManager.insert(explodeSprite, 0);        explodeSprite.setVisible(true);        Sound.instance.enemyExplodePlayer();        try {            Thread.sleep(50);   //keep the explode effect on screen for a short moment        }catch (InterruptedException e) {        }        while(interrupt){//如果暂停,爆炸效果仍存在            try {               Thread.sleep(10);   //keep the explode effect on screen for a short moment            }catch (InterruptedException e) {           }        }        explodeSprite.setVisible(false);        layerManager.remove(explodeSprite);        if(lifes<=0)enemyNum--;//这只坦克彻底死了        //new 出法宝        if(this.type == 2 && lifes==1){//绿色,new出炸弹            Image image = null;            try{                image = Image.createImage("/tank/aBomb.png");            }catch(IOException e){e.printStackTrace();}            new NetTalismanSprite(image,5,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager);        }        else if(this.type == 2){//绿色,new出坦克            Image image = null;            try{                image = Image.createImage("/tank/aTank.png");            }catch(IOException e){e.printStackTrace();}            new NetTalismanSprite(image,6,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager);        }        else if(this.type == 3 && lifes==1){//红色,new出星星            Image image = null;            try{                image = Image.createImage("/tank/aStar.png");            }catch(IOException e){e.printStackTrace();}            new NetTalismanSprite(image,4,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager);        }        else if(this.type == 3){//红色,new出红十字            Image image = null;            try{                image = Image.createImage("/tank/aBlood.png");            }catch(IOException e){e.printStackTrace();}            new NetTalismanSprite(image,1,this.getRefPixelX(),this.getRefPixelY(),bc,this.layerManager);        }    }     //发射子弹 ,在run里调用    public void fire(){        this.bullet.restart(this.getRefPixelX(), this.getRefPixelY(), curDirection);    }    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -