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

📄 battle.java~11~

📁 这是个功能比较多的RPG 但是也存在比较多的BUG 有待完善中
💻 JAVA~11~
📖 第 1 页 / 共 2 页
字号:
            case 0: //骷髅怪
                enimyX = enimy0PosFrame[enimyNowFrame][0];    //进攻时怪物移动,改变坐标
                enimyY = enimy0PosFrame[enimyNowFrame][1];
                g.setClip(enimyX, enimyY, 64, 64);
                g.drawImage(img_Emeny, enimyX - enimy0Frame[enimyNowFrame] * 64, enimyY, 0);
                break;
            case 1: //铁人怪
                enimyX = enimy1PosFrame[enimyNowFrame][0];    //进攻时怪物移动,改变坐标
                enimyY = enimy1PosFrame[enimyNowFrame][1];
                g.setClip(enimyX, enimyY, 64, 64);
                g.drawImage(img_Emeny, enimyX - enimy1Frame[enimyNowFrame] * 64, enimyY, 0);
                break;
            case 2: //火龙怪
                enimyX = enimy2PosFrame[enimyNowFrame][0];    //进攻时怪物移动,改变坐标
                enimyY = enimy2PosFrame[enimyNowFrame][1];
                g.setClip(enimyX, enimyY, 80, 80);
                g.drawImage(img_Emeny, enimyX - enimy2Frame[enimyNowFrame] * 80, enimyY, 0);
                break;
        }
        g.setClip(5, 0, 45, 45);
        g.drawImage(img_Emeny, 5 - enimyID * 45, 0, 0);  //画怪物头像
        g.setClip(0, 0, 176, 208);
    }

    //-----------------------------
    //画战斗菜单
    //-----------------------------
    public void DrawMenu(Graphics g)
    {
        if (canSelect)  //该回合战斗画面还没结束时不能选择
        {
            switch (pointer)
            {
                case 1:     //攻击
                    g.setClip(73, 168, 40, 20);
                    g.drawImage(mc.image.img_BattleMenu, 73, 168, 0);
                    g.setClip(0, 0, 176, 208);
                    break;
                case 2:     //特技
                    g.setClip(120, 168, 40, 20);
                    g.drawImage(mc.image.img_BattleMenu, 120 - 40, 168, 0);
                    g.setClip(0, 0, 176, 208);
                    break;
                case 3:     //道具
                    g.setClip(82, 188, 40, 20);
                    g.drawImage(mc.image.img_BattleMenu, 82 - 80, 188, 0);
                    g.setClip(0, 0, 176, 208);
                    break;
                case 4:     //逃跑
                    g.setClip(130, 188, 40, 20);
                    g.drawImage(mc.image.img_BattleMenu, 130 - 120, 188, 0);
                    g.setClip(0, 0, 176, 208);
                    break;
            }
        }
    }

    //-----------------------------
    //绘图部分
    //-----------------------------
    public void paint(Graphics g)
    {
        //清屏
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, 176, 208);

        g.drawImage(mc.image.img_BattleBG, 0, 0, 0);
        DrawMenu(g);
        DrawBlood(g);
        if (enimyAttack)  //敌人先进攻时,先画主角,再画敌人,实现遮挡
        {
            DrawPlayer(g);
            DrawEnimy(g);
        }
        else    //否则就让主角遮挡敌人
        {
            DrawEnimy(g);
            if (!isEscaped)   //没逃跑时才画主角
                DrawPlayer(g);
        }

        //显示提示信息
        if (selectEscape && !canEscape)     //选择了逃跑时,逃跑失败,提示信息
        {
            if (timeForShowText-- > 0)
            {
                g.setClip(0, 0, 176, 208);
                g.setColor(textColor);
                g.drawString(text, 30, 150, 0);  //显示逃跑失败
            }
            else
            {
                enimyAttack  = true;   //敌人开始进攻
                selectEscape = false;
            }
        }
        else if (selectMagic && noMoreMP)      //选择了特技,不够 MP 时,提示信息
        {
            if (timeForShowText-- > 0)
            {
                g.setClip(0, 0, 176, 208);
                g.setColor(textColor);
                g.drawString(text, 30, 150, 0);  //显示不够MP时
            }
            else
            {
                selectMagic = false;
                noMoreMP    = false;
            }
        }
        else if (enimyAttack)      //当主角攻击时(显示提示信息时,已是敌人进攻时候)
        {
            if (timeForShowText-- > 0)
            {
                g.setClip(0, 0, 176, 208);
                g.setColor(textColor);
                g.drawString(text, 100, 80, 0);  //显示“MISS”或扣除的生命值,或提示信息
            }
        }
        else    //当敌人攻击时(显示提示信息时,已是敌人进攻完了的时候)
        {
            if (timeForShowText-- > 0)
            {
                g.setClip(0, 0, 176, 208);
                g.setColor(textColor);
                g.drawString(text, 20, 70, 0);  //显示“MISS”或扣除的生命值,或提示信息
            }
        }

        if (succeed != 0 || isEscaped) //战斗胜利或失败时,或者已经逃跑时
        {

            int tmpX[] = {0, 0, 176, 176};
            int tmpY[] = {0, 208, 208, 0};

            tmpX[0] = 15;
            tmpX[1] = 15;
            tmpX[2] = 160;
            tmpX[3] = 160;
            tmpY[0] = 52;
            tmpY[1] = 155;
            tmpY[2] = 155;
            tmpY[3] = 52;
        }

        if (succeed == 1)  //战斗胜利
        {
            g.setClip(0, 0, 176, 208);
            g.setColor(59, 186, 252);
            g.drawString("Battle Success!", 36, 78, 0);
            g.setColor(255, 255, 0);
            g.drawString("Battle Success!", 36, 76, 0);

            g.setColor(0, 255, 0);
            g.drawString("Got Exp: " + gotExp, 50, 100, 0);
            if (playerExp >= playerLv * 100)        //达到升级所需经验值时
            {
                isLevelUp = true;
                playerLv++;   //升级!
                playerExp   = 0;
                playerHP    = playerLv * 100;
                playerMaxHP = playerHP;
                playerMP    = playerLv * 50;
                playerMaxMP = playerMP;
            }
            if (isLevelUp)
            {
                g.drawString("Level Up!!!", 50, 120, 0);    //显示升级了!
            }
            else
            {
                int tmp = playerLv * 100 - playerExp;
                g.drawString("Next LvUp Exp: " + tmp, 20, 120, 0);    //显示还需多少经验值升级
            }

            timeBeforeExit--;
            if (timeBeforeExit <= 0)  //结束战斗
            {
                exitBattle = true;
                isLevelUp  = false;
            }
        }
        else if (succeed == 2)    //战斗失败
        {
            g.setClip(0, 0, 176, 208);
            g.setColor(59, 186, 252);
            g.drawString("Battle Failure...", 36, 78, 0);
            g.setColor(255, 255, 0);
            g.drawString("Battle Failure...", 34, 76, 0);
            timeBeforeExit--;
            if (timeBeforeExit <= 0)
            {
                //战斗失败,回到主菜单
                timeBeforeExit = 0;
            }
        }

        if (isEscaped)    //如果逃跑成功时
        {
            g.setClip(0, 0, 176, 208);
            g.setColor(59, 186, 252);
            g.drawString("Escape Succeeded!", 20, 78, 0);
            g.setColor(255, 255, 0);
            g.drawString("Escape Succeeded!", 20, 76, 0);

            g.setColor(0, 255, 0);
            g.drawString("Got Exp: 0", 50, 100, 0);
            int tmp = playerLv * 100 - playerExp;
            g.drawString("Next LvUp Exp: " + tmp, 20, 120, 0);    //显示还需多少经验值升级

            timeBeforeExit--;
            if (timeBeforeExit <= 0)  //结束战斗
            {
                exitBattle = true;
            }
        }
    }

    //-----------------------------
    // 返回是否战斗失败
    //-----------------------------
    public boolean isDead()
    {
        if (succeed == 2 && timeBeforeExit <= 0)
            return true;
        else
            return false;
    }

    //-----------------------------
    // 返回是否该离开战斗画面
    //-----------------------------
    public boolean isFinished()
    {
        return exitBattle;
    }

    //-----------------------------
    // 返回主角级别
    //-----------------------------
    public int getPlayerLevel()
    {
        return playerLv;
    }

    //-----------------------------
    // 返回主角生命值
    //-----------------------------
    public int getPlayerHP()
    {
        return playerHP;
    }

    //-----------------------------
    // 返回主角体力值
    //-----------------------------
    public int getPlayerMP()
    {
        return playerMP;
    }

    //-----------------------------
    // 返回主角经验值
    //-----------------------------
    public int getPlayerExp()
    {
        return playerExp;
    }

    //-----------------------------
    //按键处理
    //-----------------------------
    public void keyPressed(int n)
    {
        if (!canSelect)
            return;
        switch (n)
        {
            //向上
            case 3:
                if (pointer == 3)   //若光标在“道具”上,光标指去“攻击”
                    pointer = 1;
                else if (pointer == 4)  //若光标在“逃跑”上,光标指去“特技”
                    pointer = 2;
                break;
            //向下
            case 1:
                if (pointer == 1)   //若光标在“攻击”上,光标指去“道具”
                    pointer = 3;
                else if (pointer == 2)  //若光标在“特技”上,光标指去“逃跑”
                    pointer = 4;
                break;
            //向左
            case 4:
                if (pointer == 2)   //若光标在“特技”上,光标指去“攻击”
                    pointer = 1;
                else if (pointer == 4)  //若光标在“逃跑”上,光标指去“道具”
                    pointer = 3;
                break;
            //向右
            case 2:
                if (pointer == 1)   //若光标在“攻击”上,光标指去“特技”
                    pointer = 2;
                else if (pointer == 3)  //若光标在“道具”上,光标指去“逃跑”
                    pointer = 4;
                break;
            //确定
            case 5:
                selectItem = pointer;
                pointer    = 1;   //下一回合光标在“攻击”上
                canSelect  = false;
                break;
        }
    }

}

⌨️ 快捷键说明

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