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

📄 npcs.java

📁 一个关于J2ME的确游戏
💻 JAVA
字号:
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Graphics;
import java.io.IOException;

public class Npcs extends Actor {

    private long delayMS, burnTime;
    private int oldX, oldY, addY;
    private int i, iState;
    private int barFill, energyX;
    private long time1;
    private Image image1, image2, image3;
    private SpriteClip spriteClip;

    public Npcs(PigWorld pWorld) {
        super(pWorld);

        try {
            image1 = Image.createImage("/images/npc.png");
            image2 = Image.createImage("/images/boss.png");
            image3 = Image.createImage("/images/daoju.png");

        } catch (IOException e) {
            e.printStackTrace();

        }

        spriteClip = new SpriteClip();

    }

    public void init(int type, int state, int startX, int startY,
                     int director, int speedX, int speedY) {
        switch (type) {
        case Actor.NPC:
            spriteClip.init(image1, 16);

            spriteClip.setArray(0, 23, 35, 117, 0, 2, 0); //等待状态
            spriteClip.setArray(1, 23, 35, 117, 36, 2, 0);
            spriteClip.setArray(2, 28, 36, 99, 210, 2, 0);
            spriteClip.setArray(3, 27, 20, 102, 71, 2, 0);
            spriteClip.setArray(4, 27, 20, 102, 91, 2, 0);
            spriteClip.setArray(5, 33, 58, 0, 83, 2, 0); //着火状态
            spriteClip.setArray(6, 33, 58, 0, 141, 2, 0);
            spriteClip.setArray(7, 33, 60, 0, 200, 2, 0);
            spriteClip.setArray(8, 27, 28, 101, 112, 2, 0);
            spriteClip.setArray(9, 27, 28, 101, 140, 2, 0);
            spriteClip.setArray(10, 23, 36, 110, 170, 0, 0); //捆绑状态
            spriteClip.setArray(11, 23, 36, 133, 170, 0, 0);
            spriteClip.setArray(12, 23, 30, 156, 180, 0, 0);
            spriteClip.setArray(13, 39, 75, 39, 0, 0, 0); //降落伞状态
            spriteClip.setArray(14, 39, 83, 0, 0, 0, 0);
            spriteClip.setArray(15, 39, 55, 78, 0, 0, 0);
            burnTime = System.currentTimeMillis();
            break;
        case Actor.BOSS:
            spriteClip.init(image2, 7);

            spriteClip.setArray(0, 40, 40, 0, 120, 3, 0); //  boss_UP
            spriteClip.setArray(1, 40, 40, 0, 40, 3, 0); //  boss_DOWN
            spriteClip.setArray(2, 40, 40, 0, 0, 3, 0); //   boss_LEFT
            spriteClip.setArray(3, 40, 40, 0, 80, 3, 0); //  boss_RIGHT
            spriteClip.setArray(4, 40, 40, 161, 0, 1, 0); // boss_gongji_huo
            spriteClip.setArray(5, 40, 40, 161, 44, 1, 0); // boss_gongji_yan
            spriteClip.setArray(6, 40, 40, 161, 94, 1, 0); // boss_gongji_jiguang

            energyMax = 1000;
            energy = energyMax;
            barFill = 50;
            energyX = energyMax / barFill;
            break;
        case daoju:
            spriteClip.init(image3, 10);

            spriteClip.setArray(0, 18, 20, 0, 0, 0, 0); //  daoju_bao
            spriteClip.setArray(1, 20, 20, 18, 0, 0, 0); // daoju_smallyao
            spriteClip.setArray(2, 20, 20, 38, 0, 0, 0); //daoju_middleyao
            spriteClip.setArray(3, 20, 20, 58, 0, 0, 0); //daoju_bigyao
            spriteClip.setArray(4, 20, 20, 78, 0, 0, 0); // daoju_mianju
            spriteClip.setArray(5, 20, 20, 98, 0, 0, 0); // daoju_lengjing
            spriteClip.setArray(6, 20, 20, 138, 0, 0, 0); // daoju_key
            spriteClip.setArray(7, 20, 20, 158, 0, 0, 0); //  daoju_miehuo
            spriteClip.setArray(8, 20, 20, 178, 0, 0, 0); //daoju_qingxin
            spriteClip.setArray(9, 20, 20, 118, 0, 0, 0);

            time1 = System.currentTimeMillis();
            break;

        }

        spriteClip.setState(state, 200);
        setSize(spriteClip.w, spriteClip.h);

        super.init(type, state, startX, startY, director, speedX, speedY);

    }


    public void cycle() {
        super.cycle();
        if (type == NPC) {
            if (System.currentTimeMillis() - delayMS > 1000) {
                delayMS = System.currentTimeMillis();

                switch (state) {
                case 0:
                    state = 1;
                    break;
                case 1:
                    state = 0;
                    break;
                case 3:
                    state = 4;
                    break;
                case 4:
                    state = 3;
                    break;
                case 5:
                    state = 6;
                    break;
                case 6:
                    state = 5;
                    break;
                case 8:
                    state = 9;
                    break;
                case 9:
                    state = 8;
                    break;

                }
                spriteClip.state = state;
            }

            if (oldX != 0 && oldY != 0) {

                addGoods(oldX, oldY, 0, 0);
                oldX = 0;
                oldY = 0;

            }

            if (state >= 10 && state <= 12) {

                if (i > 10) {
                    switch (state) {
                    case 10:
                        state = 13;
                        break;
                    case 11:
                        state = 14;
                        break;
                    case 12:
                        state = 15;
                        break;
                    }
                    spriteClip.setState(state, 200);
                    setSize(spriteClip.w, spriteClip.h);
                    i = 0;
                }
                i++;

            }

            if (state >= 0 && state <= 4) {
                if (System.currentTimeMillis() - burnTime > 12000) {

                    switch (state) {
                    case 0:
                    case 1:
                        state = 5;
                        break;
                    case 2:
                        state = 7;
                        break;
                    case 3:
                    case 4:
                        state = 8;
                        break;
                    }
                    spriteClip.setState(state, 200);
                    if (speedY == 0) {
                        speedY = 2;
                    }

                }
            }
        }

        if (type == BOSS) {

            if (energy > 0) {
                if (i < fireTime) {
                    isFire = false;

                } else {
                    isFire = true;
                }

                if (isFire) {

                    if (iState == 0) {
                        iState = getRand(4, 6);

                        spriteClip.setState(iState, 200);
                        speedX = 0;
                    }
                    if (i == fireTime + 4) {
                        int startX = (imageW - 20) / 2;
                        switch (iState) {
                        case 4:
                            world.getBulletFromPool().init(Actor.BULLET, 1,
                                    x + startX, y + imageH / 2,
                                    Actor.DOWN, 0, 6);

                            break;
                        case 5:
                            world.getBulletFromPool().init(Actor.BULLET, 2,
                                    x + startX, y + imageH / 2,
                                    Actor.DOWN, 0, 6);

                            break;
                        case 6:
                            world.getBulletFromPool().init(Actor.BULLET, 3,
                                    x + (imageW - 10) / 2,
                                    y + imageH / 2,
                                    Actor.DOWN, 0, 0);

                            break;
                        }
                    }
                    if (i > fireTime + 8) {

                        iState = 0;
                        i = 0;
                        speedX = 3;

                    }

                } else {
                    resetState();

                }

                i++;
            } else {
                direction = Actor.UP;
                resetState();
                speedX = 0;
                speedY = 5;
                isFire = false;

            }

        }

        if (type == daoju) {
            if (state == 9) {

                if (System.currentTimeMillis() - time1 > 800) {
                    release = true;
                }
            }
        }

        if (release) {
            world.releaseNpc(this);

        }

    }

    public void render(Graphics g, int offsetX, int offsetY) {
        spriteClip.drawClip(g, x + offsetX, y + offsetY - addY);

        if (type == Actor.BOSS) {
            barFill = energy / energyX;
            g.setColor(255, 0, 0);
            g.setClip(x + offsetX - 5, y + offsetY - 5, 51, 3);
            g.fillRect(x + offsetX - 5, y + offsetY - 5, barFill, 3);

        }

    }

    public void onCollision(Actor a) {
        if (a == null) {
            return;
        }
        if (type == NPC) {
            if (state >= 0 && state <= 4 && a.state == 9) {

                if (pointInRect(a.x, a.y, x, y, imageW, imageH)) {

                    if (oldX == 0 && oldY == 0) {
                        oldX = x;
                        oldY = y + 5;
                    }
                    switch (state) {
                    case 0:
                    case 1:
                        state = 10;
                        break;
                    case 2:
                        state = 11;
                        break;
                    case 3:
                    case 4:
                        state = 12;
                        addY = 10;
                        break;

                    }
                    spriteClip.setState(state, 200);
                    if (speedY == 0) {
                        speedY = 2;
                    }
                    crash = false;
                    PigCanvas.getGameScreen().setGoodsBao( -1);
                    PigCanvas.getGameScreen().setPersonCount(1);
                }

            }
        }
        if (type == daoju) {
            if (a.type == FLYPIG) {
                if (state >= 0 && state <= 8) {
                    if (pointInRect(x + imageW / 2, y + imageH / 2, a.x,
                                    a.y, a.imageW, a.imageH)) {
                        if (state == 0) {
                            PigCanvas.getGameScreen().setGoodsBao(1);
                        } else {
                            PigCanvas.getGameScreen().setGoods(state);
                        }
                        crash = false;
                        world.releaseNpc(this);

                    }
                }
            }
        }

    }

    public void addGoods(int startX, int startY, int speedX, int speedY) {

        int iRandGoods = getRand(1, 8);
        world.getNpcFromPool().init(Actor.daoju, iRandGoods, startX, startY,
                                    Actor.DOWN, speedX, speedY);
    }

    public void resetState() {

        switch (direction) {
        case UP:
            state = 0;
            break;
        case DOWN:
            state = 1;
            break;
        case LEFT:
            state = 2;
            break;
        case RIGHT:
            state = 3;
            break;

        }
        spriteClip.state = state;
        setSize(spriteClip.w, spriteClip.h);

    }

}

⌨️ 快捷键说明

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