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

📄 bulletssprite.java

📁 坦克大战源代码
💻 JAVA
字号:
import javax.microedition.lcdui.*;import javax.microedition.lcdui.game.*;import java.io.IOException;/** * @author 张伟林 扩展自己的精灵类 * 此为子弹类,具有子弹的移动方向,移动量,子弹的碰撞等属性 */public class BulletsSprite extends Sprite implements Runnable{    private int x, y;    private int fx;// 子弹的    private int sd;// 子弹的    public int user;    private boolean lift = false;// 生命    int row, column;// 行与列    Sprite sprite;    public BulletsSprite(Image image, int frameWidth, int frameHeight)    {        super(image, frameWidth, frameHeight);// 继承Sprite类中的属性    }    public void start(int mx, int my, int mfx, int msd, int master)// mfx为方向的值,它有四个方向    // //msd为移动量   master为使用者    { // mx,my为座标        if (!lift)// 还有命存在        {            setPosition(mx + 6, my + 6);// mx,my为座标            fx = mfx;//初始化方向            sd = msd;//和移动量            user = master;            lift = true;// 保证调用一次就不调用了            setVisible(lift);// 妙啊,当生命在时就可见,不在时就自动的不可见            Thread t = new Thread(this);            t.start();        }    }    public void run()    {        while (lift)        {            long times_s = System.currentTimeMillis();// 开始时间            forward(sd, fx);// fx为方向,它有四个方向,sd为移动量            undo(); // 检测子弹碰撞!            long times_e = System.currentTimeMillis();// end时间            long times = times_e - times_s;// 时间间隔            if (times > 86)            {                times = 86;            }            try            {                Thread.sleep(86 - times);            }            catch (InterruptedException ie)            {                ie.printStackTrace();            }        }    }//------------------子弹的移动量与移动方向 b_fx为方向----------------    public void forward(int b_sd, int b_fx)    {        if (b_fx == 1)//1为向左        {            fineMove(b_sd, 0);// 参数为移动量        }        else if (b_fx == 2)        {            fineMove(b_sd, 0);        }        else if (b_fx == 3)        {            fineMove(0, b_sd);        }        else if (b_fx == 4)        {            fineMove(0, b_sd);        }    }    //---------------------检测是否碰撞-------------------------    public void undo()    {//------------------打中砖块--------------        if (this.collidesWith(MicroTankCanvas.mBoard, true))//是否打到砖块        {            System.out.println("打到了  ");            row = (this.getY() + 1) / 15; // 15是每张贴图(小砖块)的像素(长=宽=15)            column = (this.getX() + 1) / 15;//除以15就可以落在整行与整列上            System.out.println(row+"   "+column);            // MicroTankCanvas.explosion.start(this.getX(),this.getY());//调用爆炸方法            MicroTankCanvas.mBoard.setCell(column, row, 0);//第3个参数为0,则表示透明,此为对某个单元格操作            setVisible(false);//打中后当前子弹就不可见了            this.lift = false;//打中后,此子弹就没命了,定为false,就可以继续发下一颗            Thread.yield();        }        //-----------------打中敌方坦克-------------------------------        else if ((collidesWith(MicroTankCanvas.eTank, true)) && (user == 1))//user为使用者        {// MicroTankCanvas.explosion.start(getX(),getY());//调用爆炸方法            System.out.println("1  使用者为1 ");            MicroTankCanvas.eTank.elift = false;//坦克没命了            MicroTankCanvas.eTank.setVisible(false);//坦克不可见            MicroTankCanvas.mLayerManager.remove(MicroTankCanvas.eTank);//MicroTankCanvas.eTank为layer型            MicroTankCanvas.eTank.stop();//此线程暂停一下,怎么感觉这句的用处也不怎么大啊            this.setVisible(false);//子弹的生命没了,也不可见了            this.lift = false;            MicroTankCanvas.enum = MicroTankCanvas.enum - 1;//敌方生命减            Thread.yield();            if (MicroTankCanvas.enum > 0)            {                MicroTankCanvas.createETank();//只要敌方还有命,坦克再生            }            else            {                // 进入下一关            }        }        //----------------敌方打中我方坦克------------------------        else if ((collidesWith(MicroTankCanvas.mTank, true)) && (user == 0))        {// MicroTankCanvas.explosion.start(getX(),getY());//调用爆炸方法//            System.out.println("2   使用者为0");            MicroTankCanvas.mTank.setVisible(false);            MicroTankCanvas.mLayerManager.remove(MicroTankCanvas.mTank);            this.setVisible(false);            this.lift = false;            MicroTankCanvas.num = MicroTankCanvas.num - 1;            Thread.yield();            if (MicroTankCanvas.num > 0)            {                System.out.println("打中我方  可再生坦克");                MicroTankCanvas.createTank();            }            else            {                // 结束游戏                System.out.println("打中我方  over");                MicroTankCanvas.gameover = true;            }        }    }    public void stop()    {        Thread.yield();    }//--------------------子弹的移动 参数为移动量,其中必有一个为0---------------    private void fineMove(int kx, int ky)    {        int bx = getX();// 获取当前位置        int by = getY();        bx += kx;// 此也很精妙,当一个不为0时,另外一个一定为0        by += ky;        if (by < 0 || by > MicroTankCanvas.h)// 竖直方向出界        {            this.setVisible(false);// 出界就不可见了            lift = false;// 它的生命也没有了            Thread.yield();// yield为当前线程暂停而让其它的线程继续        }        if (bx < 0 || bx > MicroTankCanvas.w)//        {            this.setVisible(false);            lift = false;            Thread.yield();        }        setPosition(bx, by);// 移动子弹    }}

⌨️ 快捷键说明

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