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

📄 netusersprite.java

📁 j2me的坦克大战 元代码 单机版和蓝牙联网版
💻 JAVA
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.*;import java.util.*;public class NetUserSprite extends Sprite implements Runnable{     private int index;//玩家0,玩家1     public static boolean gameover=false;//游戏结束     private static boolean interrupt;//坦克运动是否暂停 ,加在run中     public static void setInterrupt(boolean interrupt) {        NetUserSprite.interrupt = interrupt;    }    private int lifes=3;//生命数    private int HP;//HP值    private int x,y;//初始和复活时的位置    public int getHP() {        return HP;    }        private  boolean isPressed =false;//是否被按键    public void setIsPressed(boolean isPressed) {        this.isPressed = isPressed;    }    private int curDirection;//现在的方向    private int nextDirection;//下一方向    public void setNextDirection(int nextDirection) {        this.nextDirection = nextDirection;    }    public int SPEED=1;//坦克速度    private NetBulletSprite bullet; //玩家自己的子弹    private Sprite explodeSprite;//爆炸精灵    //实用的引用    private LayerManager layerManager;    private int screenWidth,screenHeight;    private NetBattleCanvas bc;    private NetKingSprite kingSprite;//保护物    private NetTentSprite tentSprite;//帐篷    private GameDesign gd;    private NetUserSprite[] us;    private NetEnemySprite[] es;//所有敌人    private NetPetSprite ps[];    private boolean isNew = false;//是否有保护层    private Sprite protectSprite;//保护层    private boolean hasShip;//true则可以进水    private boolean isInWater;//true则打到没事(因有船)    private Sprite shipSprite;//船    private int count=0;//保护层计数,坦克run里面控制到5,保护层就了      //private TiledLayer Bask;    private TiledLayer Things;    private TiledLayer Water;    private TiledLayer Trees;    //线程    private Thread t;        public NetUserSprite(Image image,LayerManager layerManager,NetBulletSprite bullet,            NetBattleCanvas bc,GameDesign gd,NetKingSprite kingSprite,NetTentSprite tentSprite,int index) {        super(image);        curDirection=Canvas.UP;        nextDirection=Canvas.UP;        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.HP=0;        this.index = index;        isNew = true;        this.bc = bc;        screenWidth = bc.getWidth();        screenHeight = bc.getHeight();        if(index==0){             x = screenWidth/2-20;             y = screenHeight-6;        }else{             x = screenWidth/2+30;             y = screenHeight-6;        }               this.kingSprite = kingSprite;        this.tentSprite = tentSprite;        us = bc.getUserSprites();        es = bc.getEnemySprites();        ps = bc.getPetSprites();        this.gd = gd;        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();}        //保护层        try {            Image protectImage = Image.createImage("/tank/protect.png");            protectSprite = new Sprite(protectImage);            protectSprite.defineReferencePixel(protectImage.getWidth()/2,protectImage.getHeight()/2);        }catch (IOException e) {e.printStackTrace();}                //启动行动线程run        t = new Thread(this);        t.start();        //玩家自己启动,        restart();            }    public boolean isNew() {        return isNew;    }    public int collides(){//跟别人碰撞了 0,没事  2,障碍物 坦克 边界 king         //遍历帐篷        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 )                if(this.collidesWith(es[i],true)){                    return 2;//跟坦克碰撞                }        }         //遍历所有的玩家坦克        for(int i=0;i<us.length;i++){            if(us[i].getHP()>0 && us[i]!=this)                if(this.collidesWith(us[i],true)){                    return 2;//跟坦克碰撞                }        }        //遍历水        if(this.collidesWith(Water,true)){            if(this.hasShip){//有船                if(!isInWater){//且之前没在水里                    this.isInWater = true;                    this.addShip();                }            } else {//没船                return 2;            }        }else if(isInWater){//没跟水相碰,且之前在水里            this.isInWater = false;            this.removeShip();        }               //遍历障碍物        if(this.collidesWith(Things,true)||this.collidesWith(Trees,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);            //线程没结束,但run无效            HP = 0;            //画出爆炸效果             explodeSprite.setRefPixelPosition(this.getRefPixelX(),this.getRefPixelY());            layerManager.insert(explodeSprite, 0);            explodeSprite.setVisible(true);            Sound.instance.userExplodePlayer();        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);        //移除保护层        isNew=false;        layerManager.remove(protectSprite);        //再自启动        this.restart();            }    //发射子弹,由按键的线程调用    public void fire(){        if(!gameover&&!interrupt)this.bullet.restart(this.getRefPixelX(), this.getRefPixelY(), curDirection);    }        public void setLifes(int lifes){//初始化生命数,在EnemyManager类设置        this.lifes = lifes;    }    public int getLifes() {        return lifes;    }     public void restart(){//重置位置,HP值,方向       if(HP>0)return;       if(lifes<=0){bc.lose();return;}       setRefPixelPosition(x,y);       HP=100;//HP=100       curDirection=Canvas.UP;       nextDirection=Canvas.UP;       setTransform(Sprite.TRANS_NONE);       lifes--;       hasShip = false;       isInWater = false;       this.bullet.setFrame(0);       this.SPEED = 1;              //添加到画布管理器       setVisible(true);       layerManager.insert(this,0);       //出生有保护层        this.addProtect();        count=1000;           }    public void run(){        while(!gameover){            if(!interrupt){                if(HP>0){                   if(count>=1400 && count<1600){                        if(this.protectSprite.isVisible())this.protectSprite.setVisible(false);                        else this.protectSprite.setVisible(true);                   }                   if(count++ == 1600){//20次后玩家不是新出生的了,没有保护层了                       isNew=false;                       layerManager.remove(protectSprite);                   }                   go();                }            }             //加sleep,不然cpu太高                         try {                   Thread.sleep(10);            } catch (InterruptedException ex) {                   ex.printStackTrace();            }        }    }    private void go(){//坦克行走         while(isPressed){                switch(nextDirection){                    case GameCanvas.DOWN:                        //如果跟现在方向一样,不转                        //如果跟现在方向不一样,转                        if(nextDirection != curDirection){                            this.setTransform(Sprite.TRANS_ROT180);                            curDirection = nextDirection;                          }                         this.move(0, SPEED);                        if(isNew){this.protectSprite.move(0,SPEED);}                        if(isInWater){shipSprite.move(0,SPEED);}//在水中(有船,且在水中)                        //若普通碰撞                        if (this.collides() == 2){//普通碰撞                             move(0,-SPEED);                             if(isNew){this.protectSprite.move(0,-SPEED);}                             if(isInWater){shipSprite.move(0,-SPEED);}//在水中(有船,且在水中)                        }                break;                    case GameCanvas.UP:                        //如果跟现在方向一样,不转                        //如果跟现在方向不一样,转                        if(nextDirection != curDirection){                            this.setTransform(Sprite.TRANS_NONE);                            curDirection = nextDirection;                          }                         this.move(0, -SPEED);                        if(isNew){this.protectSprite.move(0,-SPEED);}                        if(isInWater){shipSprite.move(0,-SPEED);}//在水中(有船,且在水中)                        //若普通碰撞                        if (this.collides() == 2){//普通碰撞                             move(0, SPEED);                              if(isNew){this.protectSprite.move(0,SPEED);}                             if(isInWater){shipSprite.move(0,SPEED);}//在水中(有船,且在水中)                        }                break;                    case GameCanvas.LEFT:                        //如果跟现在方向一样,不转                        //如果跟现在方向不一样,转                        if(nextDirection != curDirection){                            this.setTransform(Sprite.TRANS_ROT270);                            curDirection = nextDirection;                          }                        this.move(-SPEED,0);                        if(isNew){this.protectSprite.move(-SPEED,0);}                        if(isInWater){shipSprite.move(-SPEED,0);}//在水中(有船,且在水中)                        //若普通碰撞                        if (this.collides() == 2){//普通碰撞                               this.move(SPEED,0);                               if(isNew){this.protectSprite.move(SPEED,0);}                               if(isInWater){shipSprite.move(SPEED,0);}//在水中(有船,且在水中)                        }                break;                    case GameCanvas.RIGHT:                        //如果跟现在方向一样,不转                        //如果跟现在方向不一样,转                        if(nextDirection != curDirection){                            this.setTransform(Sprite.TRANS_ROT90);                            curDirection = nextDirection;                          }                        this.move(SPEED,0);                        if(isNew){this.protectSprite.move(SPEED,0);}                        if(isInWater){shipSprite.move(SPEED,0);}//在水中(有船,且在水中)                        //若普通碰撞                        if (this.collides() == 2){//普通碰撞                              move(-SPEED,0);                                if(isNew){this.protectSprite.move(-SPEED,0);}                              if(isInWater){shipSprite.move(-SPEED,0);}//在水中(有船,且在水中)                        }              break;                }//switch                isPressed = false;//走一步就停一下        }//while                 }    //关于保护层    //刚复活时,带有保护层,isNew=true,(子弹类:遇到玩家自爆,玩家没事)    //在restart()时加保护层,然后400次后自灭    public void addProtect(){        //添加保护层        protectSprite.setRefPixelPosition(this.getRefPixelX(),this.getRefPixelY());        layerManager.insert(protectSprite, 0);        protectSprite.setVisible(true);        isNew = true;        count=0;    }    //船    //吃到法宝后,new船出来,船会被打掉(炸弹要判断玩家是否hasShip,true就hasShip=false)    public void setHasShip(boolean hasShip){        this.hasShip = hasShip;    }    public boolean IsInWater(){        return isInWater;    }    private void addShip(){        try {            Image shipImage = Image.createImage("/tank/ship.png");            shipSprite = new Sprite(shipImage);            shipSprite.defineReferencePixel(shipImage.getWidth()/2,shipImage.getHeight()/2);        }catch (IOException e) {e.printStackTrace();}        shipSprite.setRefPixelPosition(this.getRefPixelX(),this.getRefPixelY());        layerManager.insert(shipSprite, 0);        shipSprite.setVisible(true);        layerManager.insert(this, 0);    }    private void removeShip(){        shipSprite.setVisible(false);        layerManager.remove(shipSprite);    }   }

⌨️ 快捷键说明

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