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

📄 netpetsprite.java

📁 j2me的坦克大战 元代码 单机版和蓝牙联网版
💻 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 + -