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

📄 mygamecanvas.java.bak

📁 游戏学院《天下武王》教学实例
💻 BAK
📖 第 1 页 / 共 4 页
字号:
            int xx = 8,
                     yy = 30;
            int interval = 50;
            g.drawString(ResourceLoader.StringResource[20], xx, yy, 0);
            g.drawString(myPlayer.rank + "", xx + interval, yy, 0);
            g.drawString(ResourceLoader.StringResource[21], xx, yy + 15, 0);
            g.drawString(myPlayer.exp + "", xx + interval, yy + 15, 0);
            g.drawString(ResourceLoader.StringResource[22], xx, yy + 30, 0);
            g.drawString(myPlayer.nextExp + "", xx + interval, yy + 30, 0);
            g.drawString("HP", xx, yy + 45, 0);
            g.drawString(myPlayer.hp + "", xx + interval, yy + 45, 0);
            g.drawString("MP", xx, yy + 60, 0);
            g.drawString(myPlayer.mp + "", xx + interval, yy + 60, 0);

            Property w = (Property) curLevel.properties.get(new Integer(
                    myPlayer.curWeaponID));
            Property d = (Property) curLevel.properties.get(new Integer(
                    myPlayer.curDefendID));

            g.drawString(ResourceLoader.StringResource[32], xx, yy + 75, 0);
            g.drawString(myPlayer.attackPoint + "", xx + interval, yy + 75, 0);

            g.drawString(ResourceLoader.StringResource[33], xx, yy + 90, 0);
            g.drawString(myPlayer.defendPoint + "", xx + interval, yy + 90, 0);

            g.drawString(ResourceLoader.StringResource[35], xx, yy + 105, 0);
            g.drawString(myPlayer.money + "", xx + interval, yy + 105, 0);

            g.drawString(ResourceLoader.StringResource[27], xx, yy + 120, 0);

            if (w != null) {
                g.drawString(w.name + "(AP:" + w.addAttackPoint + ",DP:"
                             + w.addDefendPoint + ")", xx + interval, yy + 120,
                             0);
            }

            g.drawString(ResourceLoader.StringResource[28], xx, yy + 135, 0);

            if (d != null) {
                g.drawString(d.name + "(AP:" + d.addAttackPoint + ",DP:"
                             + d.addDefendPoint + ")", xx + interval, yy + 135,
                             0);
            }
            paintMenu(g, ResourceLoader.StringResource[3], 66, 193, true);

            break;
        case 1:
            type = ResourceLoader.StringResource[27]; //武器
            drawBelongs(1, g);
            break;
        case 2:
            type = ResourceLoader.StringResource[36]; //药品
            drawBelongs(2, g);
            break;
        case 3:
            type = ResourceLoader.StringResource[28]; //护具
            drawBelongs(3, g);
            break;
        case 4:
            type = ResourceLoader.StringResource[37]; //技能
            drawBelongs(4, g);
            break;
        }
        g.drawString(type, 63, 0, Graphics.TOP | Graphics.HCENTER);

    }

    private void drawLoadingLevel(Graphics g) {
        g.drawImage(ResourceLoader.menu[0], width / 2, height / 2,
                    Graphics.HCENTER | Graphics.VCENTER);
        g.setColor(255, 255, 255);
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,
                               Font.SIZE_LARGE));
        g.drawString(ResourceLoader.StringResource[26], width / 2, 90,
                     Graphics.HCENTER | Graphics.TOP);
    }

    /**
     *
     */
    private void drawAbout(Graphics g) {

        g.drawImage(ResourceLoader.menu[0], 0, 0, 0);
        g.drawImage(ResourceLoader.menu[3], width / 2, 35, Graphics.HCENTER
                    | Graphics.TOP);
        g.setColor(255, 255, 255);
        g.drawString(ResourceLoader.StringResource[17], width / 2, 50,
                     Graphics.HCENTER | Graphics.TOP);
        g.drawString(ResourceLoader.StringResource[18], width / 2, 80,
                     Graphics.HCENTER | Graphics.TOP);

        g.drawString(ResourceLoader.StringResource[19], width / 2, 110,
                     Graphics.HCENTER | Graphics.TOP);
    }

    /**
     *
     */
    private void drawHelp(Graphics g) {
        // TODO 自动生成方法存根
        g.drawImage(ResourceLoader.menu[0], 0, 0, 0);

        g.setColor(255, 255, 255);
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                               Font.SIZE_SMALL));
        g.drawString(ResourceLoader.StringResource[16], width / 2, 10,
                     Graphics.HCENTER | Graphics.TOP);
        g.drawString(ResourceLoader.StringResource[43], width / 2, 30,
                     Graphics.HCENTER | Graphics.TOP);
        g.drawString(ResourceLoader.StringResource[44], width / 2, 50,
                     Graphics.HCENTER | Graphics.TOP);
        g.drawString(ResourceLoader.StringResource[45], width / 2, 70,
                     Graphics.HCENTER | Graphics.TOP);

    }

    /**
     *
     */
    private void drawMainMenu(Graphics g) {
        // TODO 自动生成方法存根
        
        System.out.println("start menu draw");
        g.setColor(255, 255, 255);
        g.drawImage(ResourceLoader.menu[0], width / 2, 0, Graphics.HCENTER
                    | Graphics.TOP);
        g.drawImage(ResourceLoader.menu[9], width / 2, 0, Graphics.HCENTER
                    | Graphics.TOP);
       /*
        this.paintMenu(g, ResourceLoader.StringResource[11], width / 2, 80,
                       curMenuIndex == 0);
        if (hasStored) {
            this.paintMenu(g, ResourceLoader.StringResource[12], width / 2, 96,
                           curMenuIndex == 1);
            this.paintMenu(g, ResourceLoader.StringResource[13], width / 2,
                           112, curMenuIndex == 2);
            this.paintMenu(g, ResourceLoader.StringResource[14], width / 2,
                           128, curMenuIndex == 3);
            this.paintMenu(g, ResourceLoader.StringResource[15], width / 2,
                           144, curMenuIndex == 4);
        } else {

            this.paintMenu(g, ResourceLoader.StringResource[13], width / 2, 96,
                           curMenuIndex == 1);
            this.paintMenu(g, ResourceLoader.StringResource[14], width / 2,
                           112, curMenuIndex == 2);
            this.paintMenu(g, ResourceLoader.StringResource[15], width / 2,
                           128, curMenuIndex == 3);
        }*/
        
         System.out.println("start menu draw ends");
    }

    public void constructsFightMap() {

        fightLayerManager = new LayerManager();

        fightLayerManager.append(myPlayer
                                 .getSprite(Player.STATUS_BEFORE_ATTACK));
        fightLayerManager.append(this.ranEnemy.sprite);

        fightBackGround = engine.getRandomFightBg();
        fightLayerManager.append(fightBackGround);

        this.beforeFightHp = myPlayer.hp;
        this.beforeFightMp = myPlayer.mp;
        this.beforeFightExp = myPlayer.exp;
        this.beforeFightMoney = myPlayer.money;
        this.beforeFightHp_npc = this.ranEnemy.hp;
        curMenuIndex = 0;
    }

    /**
     *
     */
    private void drawFightScene(Graphics g) {
        fightLayerManager.paint(g, 0, 0);

        g.drawImage(ResourceLoader.menu[11], 0, 208, Graphics.LEFT
                    | Graphics.BOTTOM);
        g.drawImage(ResourceLoader.menu[10], 176, 0, Graphics.RIGHT
                    | Graphics.TOP);
        g.setColor(255, 255, 255);
        g.drawString("HP:", 7, 175, 0);
        g.drawString("MP:", 7, 195, 0);

        g.drawString(this.ranEnemy.name, 120, 5, 0);
        //
        g.setColor(255, 0, 0);
        g.drawRect(130, 22, 30, 5);
        g.fillRect(130, 22, this.ranEnemy.hp * 30 / this.beforeFightHp_npc, 5);

        g.drawRect(30, 177, 30, 5);

        g.drawRect(30, 197, 30, 5);

        g.fillRect(30, 177, myPlayer.hp * 30 / this.beforeFightHp, 5);
        g.fillRect(30, 197, myPlayer.mp * 30 / this.beforeFightMp, 5);
        if (!popSkill) {

            g
                    .drawImage(ResourceLoader.menu[12], 73 + curMenuIndex * 33,
                               172, 0);

        } else {
            g.drawImage(ResourceLoader.menu[13], 0, 0, 0);
            Vector skills = myPlayer.skillVec;

            int x = 42;
            int y = 20;
            g.setColor(255, 255, 255);
            if (skills.size() > 0) {
                Skill skill = null;
                for (int i = 0; i < skills.size(); i++) {
                    skill = (Skill) skills.elementAt(i);
                    paintMenu(g, skill.name, x + 5, y, curMenuIndex2 == i);

                    y += 16;

                }

            }

        }

    }

    /**
     *
     */
    private void drawGameOver(Graphics g) {
        g.drawImage(ResourceLoader.menu[3], getWidth() / 2, 60,
                    Graphics.HCENTER | Graphics.TOP);
        g.setColor(255, 255, 255);
        g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
                               Font.SIZE_SMALL));
        g.drawString(ResourceLoader.StringResource[23], width / 2, 90,
                     Graphics.HCENTER | Graphics.TOP);

    }

    /*
     * (non-Javadoc)
     *
     * @see org.gamecollege.j2me.rpg.RPGGameCanvas#tick()
     */
    protected void tick() {

        if (getGameStatus() == STATUS_WALKING) {

            Map map = this.curLevel.curMap;
            int mapWidth = map.cols * curLevel.tileWidth;
            int mapHeight = map.rows * curLevel.tileHeight;
            Sprite walkSprite = myPlayer.getSprite(Player.STATUS_WALK);
            //防止英雄走出地图
            if (walkSprite.getX() < 0
                || walkSprite.getX() + walkSprite.getWidth() > mapWidth) {
                myPlayer.undoMove();
            }
            if (walkSprite.getY() < 0
                || walkSprite.getY() + walkSprite.getHeight() > mapHeight) {
                myPlayer.undoMove();
            }
            //地图障碍
            TiledLayer ctl = map.collisionArea;
            if (walkSprite.collidesWith(ctl, true)) {
                myPlayer.undoMove();
            }

            //碰到NPC和道具
            Vector objs = map.rpgObjects;
            for (int i = 0; i < objs.size(); i++) {
                RPGObject obj = (RPGObject) objs.elementAt(i);
                if (obj.sprite.collidesWith(walkSprite, true)) {

                    if (obj instanceof NPC) {
                        handleCrashNpc((NPC) obj);
                    } else if (obj instanceof Property) {
                        Property p = (Property) obj;
                        handleCrashProperty(p);
                    }
                }
            }

            //碰到连接区,地图转移
            Enumeration e = curLevel.links.elements();
            while (e.hasMoreElements()) {
                Linker linker = (Linker) e.nextElement();
                if (linker.belongMapID == map.mapNo
                    && linker.crashHero(myPlayer, curLevel.tileWidth,
                                        curLevel.tileHeight)) {
                    curLevel.changeMap(linker, myPlayer);
                    break;
                }
            }

            //视窗移动,ox,oy为主角中心位置
            int ox = walkSprite.getX() + walkSprite.getWidth() / 2 - width / 2;
            int oy = walkSprite.getY() + walkSprite.getHeight() / 2 -
                     height / 2;

            if (ox < 0) {
                ox = 0;
            }

            if (oy < 0) {
                oy = 0;
            }

            if (ox + width > mapWidth) {
                ox = mapWidth - width;
            }
            if (oy + height > mapHeight) {
                oy = mapHeight - height;
            }
            lm.setViewWindow(ox, oy, width, height);

            //取下一条消息
            if (System.currentTimeMillis() - lastPopMsgTime > 1000) {

                this.curMessage = this.popMessage();
                lastPopMsgTime = System.currentTimeMillis();

            }
        } else if (gameStatus == STATUS_FIGHT_OVER) {
            synchronized (engine) {
                if (System.currentTimeMillis() - lastFightOverTime > 2000) {
                    //升级了
                    if (myPlayer.exp >= myPlayer.nextExp) {
                        myPlayer.nextExp = myPlayer.exp * 3 / 2;
                        myPlayer.rank++;
                    }
                    //学会技能了
                    if (ranSkill != null) {
                        myPlayer.skillVec.addElement(ranSkill);
                    }
                    ranSkill = null;
                    this.ranEnemy = null;
                    myPlayer.attackStatus = -1;
                    if (curLevel.isCompleted()) {
                        myPlayer = new Player(ResourceLoader.StringResource[0]);
                        ranSkill = null;
                        this.ranEnemy = null;
                        this.setGameStatus(STATUS_MISSION_OVER);
                    } else {
                        this.setGameStatus(STATUS_WALKING);
                    }

                }

            }

        } else if (gameStatus == STATUS_GAME_OVER
                   && System.currentTimeMillis() - lastGameOverTime > 2000) {
            this.setGameStatus(STATUS_MAIN_MENU);
        }

    }

    private void handleCrashNpc(NPC npc) {
        switch (npc.type) {
        //对话类NPC
        case 1:

            //改变可对话NPC的朝向
            changeNpcDirect(npc, myPlayer);

            //主角undo
            myPlayer.undoMove();

            //在对话队列里面加入谈话内容
            for (int i = 0; i < npc.talkContents.size(); i++) {
                String t = (String) npc.talkContents.elementAt(i);

                int index = t.indexOf('_');

                String nt = t.substring(0, index).trim();
                String pt = t.substring(index + 1).trim();
                //第一次碰上
                if (!npc.isAgainCrash) {

                    if (!nt.equals("null")) {
                        String temp = nt;
                        if (nt.startsWith("$")) {
                            temp = nt.substring(1);
                        }
                        pushMessage(npc.name + ":" + temp);
                    }
                    if (!pt.equals("null")) {
                        pushMessage(myPlayer.name + ":" + pt);
                    }
                } else {
                    //非第一次碰上
                    if (nt.startsWith("$")) {
                        pushMessage(npc.name + ":" + nt.substring(1));
                        if (!pt.equals("null")) {
                            pushMessage(myPlayer.name + ":" + pt);
                        }
                    }
                }
            }

            npc.isAgainCrash = true;
            break;
            //武器护具贩卖型NPC
        case 2:
            changeNpcDirect(npc, myPlayer);
            myPlayer.undoMove();
            this.saleType = 1;
            this.weaponVec = npc.weaponVec;
            this.jacketVec = npc.jacketVec;

            setGameStatus(STATUS_POPMENU_CONFIRM);
            break;
        case 3:

            //药品贩卖类型NPC
            changeNpcDirect(npc, myPlayer);
            myPlayer.undoMove();
            this.saleType = 2;
            this.medicVec = npc.medicVec;

            setGameStatus(STATUS_POPMENU_CONFIRM);
            break;
        case 4:
            break;
        case 5:
            break;

        }

    }

    private void changeNpcDirect(NPC npc, Player player) {
        if (npc.type == 1) {
            int dir = Tools.comparePos(player.getSprite(Player.STATUS_WALK),
                                       npc.sprite);
            //英雄在NPC的左边
            if (dir == Canvas.LEFT) {

⌨️ 快捷键说明

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