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

📄 enemy.java

📁 J2ME手机游戏源码 整个游戏有八个类组成: &#61548 主类:TankMIDlet &#61548 敌人坦克:Enemy &#61548 图片池:EnemyPool &#61548
💻 JAVA
字号:
import javax.microedition.lcdui.*;
import java.util.Random;
class Enemy
{
    private static Graphics g = null;
    private static Random myrandom = new Random();
    public boolean alive;
    public int posX, posY;
    public int direction;
    private int speed;
    private int sp;
    public boolean shootFlag;
    public int bulletNo, bulletCnt;
    private int bulletLevel;
    private Image imgCurrentDraw;
    private Image imgEnemyLeft;
    private Image imgEnemyRight;
    private Image imgEnemyUp;
    private Image imgEnemyDown;
    public int frameWidth, frameHeight;
    public boolean ifTimer;
    public int kind;
    public int lifeCount = 0;
    public int bulletCount;
    private boolean grassPaint = false;
    private TankCanvas canvas;
    public Enemy(TankCanvas canvas, int kind)
    {
        this.canvas = canvas;
        this.kind = kind;
        ifTimer = false;
        shootFlag = false;
        bulletLevel = 0;
        direction = 0x14;
        frameWidth = EnemyPool.frameWidth;
        frameHeight = EnemyPool.frameHeight;
        speed = canvas.tileW / 2;
        sp = speed;
        shootFlag = false;
        bulletCount = 50;
        direction = 0x14;
        switch (kind)
        {
            case 0:
                imgEnemyLeft = EnemyPool.enemyLeftNormal;
                imgEnemyRight = EnemyPool.enemyRightNormal;
                imgEnemyUp = EnemyPool.enemyUpNormal;
                imgEnemyDown = EnemyPool.enemyDownNormal;
                break;
            case 1:
                //red tanker
                bulletCount = 25;
                imgEnemyLeft = EnemyPool.enemyLeftRed;
                imgEnemyRight = EnemyPool.enemyRightRed;
                imgEnemyUp = EnemyPool.enemyUpRed;
                imgEnemyDown = EnemyPool.enemyDownRed;
                break;
            case 2:
                lifeCount = 3;
                imgEnemyLeft = EnemyPool.enemyLeftGreen;
                imgEnemyRight = EnemyPool.enemyRightGreen;
                imgEnemyUp = EnemyPool.enemyUpGreen;
                imgEnemyDown = EnemyPool.enemyDownGreen;
                break;
            case 3:
                bulletCount = 15;
                imgEnemyLeft = EnemyPool.enemyLeftNormal;
                imgEnemyRight = EnemyPool.enemyRightNormal;
                imgEnemyUp = EnemyPool.enemyUpNormal;
                imgEnemyDown = EnemyPool.enemyDownNormal;
                break;
            default:
                break;
        }
        imgCurrentDraw = imgEnemyDown;
    }
    synchronized void paint(Graphics g)
    {
        int fillposX = posX;
        int fillposY = posY;
        int fillwidth, fillheigh;
        int i;
        fillwidth = frameWidth;
        fillheigh = frameHeight;
        if (!ifTimer)
        {
            if (!shootFlag && ((myrandom.nextInt() & 2) == 0) && (bulletCnt == 0))
            {
                shootFlag = true;
                i = 0;
                for (i = 1; i < canvas.maxBullet; i++)
                {
                    if (canvas.bulletAlive[i] == false)
                        break;
                }
                if ((i > 0) && (i < canvas.maxBullet))
                {
                    bulletCnt = bulletCount;
                    bulletNo = i;
                    canvas.fireBullet(bulletNo, direction, posX, posY, 3);
                }
            }
        }
        if (bulletCnt > 0)
            bulletCnt--;
        grassPaint = false;
        if (isMapCollide())
            direction = tankAI();
        g.setColor(0x0);
        if (ifTimer)
        {
            speed = 0;
        }
        else
        {
            speed = sp;
        }
        switch (direction & 0x0f)
        {
            case 1:
                if ((posX > canvas.mapOffsetX) && !isMapCollide())
                {
                    posX -= speed;
                    fillposX = posX + frameWidth;
                    fillposY = posY;
                    fillwidth = speed;
                    fillheigh = frameHeight;
                }
                break;
            case 2:
                if ((posX < (canvas.mapOffsetX + canvas.mapWidth - frameWidth)) && !isMapCollide())
                {
                    posX += speed;
                    fillposX = posX - speed;
                    fillposY = posY;
                    fillwidth = speed;
                    fillheigh = frameHeight;
                }
                break;
            case 3:
                if ((posY > canvas.mapOffsetY) && !isMapCollide())
                {
                    posY -= speed;
                    fillposX = posX;
                    fillposY = posY + frameHeight;
                    fillwidth = frameWidth;
                    fillheigh = speed;
                }
                break;
            case 4:
                if ((posY < (canvas.mapOffsetY + canvas.mapHeight - frameHeight)) && !isMapCollide())
                {
                    posY += speed;
                    fillposX = posX;
                    fillposY = posY - speed;
                    fillwidth = frameWidth;
                    fillheigh = speed;
                }
            default:
                break;
        }
        g.fillRect(fillposX, fillposY, fillwidth, fillheigh);
        switch (direction & 0x0f)
        {
            case 1:
                g.drawImage(imgEnemyLeft, posX, posY, g.TOP | g.LEFT);
                break;
            case 2:
                g.drawImage(imgEnemyRight, posX, posY, g.TOP | g.LEFT);
                break;
            case 3:
                g.drawImage(imgEnemyUp, posX, posY, g.TOP | g.LEFT);
                break;
            case 4:
                g.drawImage(imgEnemyDown, posX, posY, g.TOP | g.LEFT);
            default:
                break;
        }
        if (grassPaint)
        {
            canvas.grassPaint = true;
        }
    }
    boolean isMapCollide()
    {
        boolean collFlag = false;
        int collX, collY;
        int i;
        int tileW = canvas.tileW;
        collX = posX - canvas.mapOffsetX;
        collY = posY - canvas.mapOffsetY;
        switch (direction & 0x0f)
        {
            case 1:
                collX = collX - speed;
                if (collX <= 0)
                    collFlag = true;
                else
                {
                    collFlag = false;
                    for (i = (collY / tileW * (canvas.mapWidth / tileW) + collX / tileW); i <= ((collY + frameHeight) / tileW * (canvas.mapWidth / tileW) + collX / tileW); i += (canvas.mapWidth / tileW))
                    {
                        if (canvas.mapInfo[i] == 3)
                        {
                            grassPaint = true;
                        }
                        if (canvas.mapInfo[i] != 0 && canvas.mapInfo[i] != 3)
                        {
                            collFlag = true;
                            break;
                        }
                    }
                }
                break;
            case 2:
                collX = collX + frameWidth + speed;
                if (collX >= canvas.mapWidth)
                    collFlag = true;
                else
                {
                    collFlag = false;
                    for (i = (collY / tileW * (canvas.mapWidth / tileW) + collX / tileW); i <= ((collY + frameHeight) / tileW * (canvas.mapWidth / tileW) + collX / tileW); i += (canvas.mapWidth / tileW))
                    {
                        if (canvas.mapInfo[i] == 3)
                        {
                            grassPaint = true;
                        }
                        if (canvas.mapInfo[i] != 0 && canvas.mapInfo[i] != 3)
                        {
                            collFlag = true;
                            break;
                        }
                    }
                }
                break;
            case 3:
                collY = collY - speed;
                if (collY <= 0)
                    collFlag = true;
                else
                {
                    collFlag = false;
                    for (i = (collY / tileW * (canvas.mapWidth / tileW) + collX / tileW); i <= (collY / tileW * (canvas.mapWidth / tileW) + (collX + frameWidth) / tileW); i++)
                    {
                        if (canvas.mapInfo[i] == 3)
                        {
                            grassPaint = true;
                        }
                        if (canvas.mapInfo[i] != 0 && canvas.mapInfo[i] != 3)
                        {
                            collFlag = true;
                            break;
                        }
                    }
                }
                break;
            case 4:
                collY = collY + frameHeight + speed;
                if (collY >= canvas.mapHeight)
                    collFlag = true;
                else
                {
                    collFlag = false;
                    for (i = (collY / tileW * (canvas.mapWidth / tileW) + collX / tileW); i <= (collY / tileW * (canvas.mapWidth / tileW) + (collX + frameWidth) / tileW); i++)
                    {
                        if (canvas.mapInfo[i] == 3)
                        {
                            grassPaint = true;
                        }
                        if (canvas.mapInfo[i] != 0 && canvas.mapInfo[i] != 3)
                        {
                            collFlag = true;
                            break;
                        }
                    }
                }
                break;
            default:
                break;
        }
        return collFlag;
    }
    boolean isObjCollide(int objX, int objY)
    {
        boolean collFlag = false;
        int collX, collY;
        int i;
        collX = posX;
        collY = posY;
        switch (direction & 0x0f)
        {
            case 1:
                collX = collX - speed;
                break;
            case 2:
                collX = collX + speed;
                break;
            case 3:
                collY = collY - speed;
                break;
            case 4:
                collY = collY + speed;
            default:
                break;
        }
        if (collX < (objX + frameWidth) && (collX + frameWidth) > objX && collY < (objY + frameHeight) && (collY + frameHeight) > objY)
            collFlag = true;
        return collFlag;
    }
    int tankAI()
    {
        int direction_bak;
        direction_bak = direction;
        if ((direction & 0x0f) == 4 | (direction & 0x0f) == 3)
        {
            if ((myrandom.nextInt() & 1) == 0)
            {
                direction = 1;
                if (!isMapCollide())
                    return direction | 0x10;
                direction = 2;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            else
            {
                direction = 2;
                if (!isMapCollide())
                    return direction | 0x10;
                direction = 1;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            if ((direction_bak & 0x0f) == 3)
            {
                direction = 4;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            else
            {
                direction = 3;
                if (!isMapCollide())
                    return direction | 0x10;
            }
        }
        if ((direction & 0x0f) == 2 | (direction & 0x0f) == 1)
        {
            if ((myrandom.nextInt() & 1) == 0)
            {
                direction = 4;
                if (!isMapCollide())
                    return direction | 0x10;
                direction = 3;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            else
            {
               
                direction = 3;
                if (!isMapCollide())
                    return direction | 0x10;
   
                direction = 4;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            if ((direction_bak & 0x0f) == 1)
            {

                direction = 2;
                if (!isMapCollide())
                    return direction | 0x10;
            }
            else
            {
                direction = 1;
                if (!isMapCollide())
                    return direction | 0x10;
            }
        }
        return direction_bak;
    }
}

⌨️ 快捷键说明

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