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

📄 gamecanvas.java

📁 仙境传说手机游戏源码 仅适用于NOKIA 游戏画布选择了KONIA自带的类。
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            {
            default:
                break;

            case 0: // '\0'
                HP += item_value[(itemCursor + itemTop) * 4 + 1];
                if(HP > getMaxHP())
                    HP = (short)getMaxHP();
                break ;

            case 1: // '\001'
                SP += item_value[(itemCursor + itemTop) * 4 + 1];
                if(SP > getMaxSP())
                    SP = (short)getMaxSP();
                break;
            }
            break;

        case 1: // '\001'
            if(itemCursor > 0)
            {
                itemCursor--;
                break;
            }
            if(itemTop > 0)
            {
                itemTop--;
                itemCursor = 0;
            }
            break;

        case 6: // '\006'
            if(itemCursor < 2)
            {
                itemCursor++;
                break;
            }
            if(itemTop + itemCursor < 6)
            {
                itemTop++;
                itemCursor = 2;
            }
            break;
        }
    }
/**
 * 系统菜单
 * @param g
 */
    void drawSystemMenu(Graphics g)
    {
        int i = start_y - 50;
        int j = start_x - 60;
        for(int k = 0; k < 4; k++)
        {
            int l = k;
            if(k == 2 && !isVibration)
                l += 3;
            else
            if(k == 1 && !isSound)
                l += 3;
            drawEnglish(systemMenu[l], j + 15, i + 55 + k * 10, g);
        }

        drawCursor(0, j + 2, i + 56 + systemCursor * 10, g);
    }

    void keySystemMenu(int i)
    {
        switch(getGameAction(i))
        {
        default:
            break;

        case 8: // '\b'
            switch(systemCursor)
            {
            case 0: // '\0'
                save();
                setFieldMessageBox(save_done, start_x - 50, start_y - 8, 100, 16, 3);
                break;

            case 1: // '\001'
                isSound = !isSound;
                saveOption();
                break;

            case 2: // '\002'
                isVibration = !isVibration;
                saveOption();
                break;

            case 3: // '\003'
                RagMerchant.midlet.notifyDestroyed();
                break;
            }
            break;

        case 1: // '\001'
            if(systemCursor > 0)
                systemCursor--;
            break;

        case 6: // '\006'
            if(systemCursor < 3)
                systemCursor++;
            break;
        }
    }

    void drawUI(Graphics g)
    {
        int i = start_x - 64;
        int j = (start_y + 64) - 20;
        drawEnglish(uiText[0], i + 5, j, uiText[0].length, g);
        drawNumber(HP, i + 5 + 30, j, g, 1);
        drawNumber(getMaxHP(), i + 5 + 36, j, g, 0);
        drawEnglish(uiText[1], i + 5, j + 11, uiText[0].length, g);
        drawNumber(SP, i + 5 + 30, j + 11, g, 1);
        drawNumber(getMaxSP(), i + 5 + 36, j + 11, g, 0);
        drawEnglish(uiText[2], i + 5 + 54, j + 11, uiText[2].length, g);
        drawNumber(LEVEL, i + 5 + 72, j + 11, g, 0);
        drawEnglish(uiText[3], i + 5 + 54 + 1, j, uiText[3].length, g);
        if(slots[0] != 0)
            drawEnglish(skill_names[(slots[0] - 1) * 2], i + 5 + 54 + 3 + uiText[3].length * 6, j, g);
        drawEnglish(uiText[4], i + 120, j + 11, uiText[4].length, g);
        drawNumber(ZENY, i + 120, j + 11, g, 1);
        drawEnglish(uiText[7], 3, 3, uiText[7].length, g);
    }

    public void run()
    {
        if(!isVibration)
            try
            {
                Thread.sleep(100L);
            }
            catch(Exception exception) { }
        repaint();
        RagMerchant.display.callSerially(this);
        turn++;
        if(turn > 0x989680)
            turn = 0;
    }

    public void drawImage(Image image, int i, int j, int k, int l, int i1, int j1, 
            Graphics g)
    {
        g.setClip(i, j, i1, j1);
        g.drawImage(image, i - k, j - l, 0);
        g.setClip(0, 0, getWidth(), getHeight());
    }

    public void drawImage(Image image, int i, int j, int k, int l, int i1, int j1, 
            int k1, Graphics g)
    {
        DirectGraphics directgraphics = DirectUtils.getDirectGraphics(g);
        g.setClip(i, j, i1, j1);
        if(k1 == 0)
            directgraphics.drawImage(image, i - k, j - l, 0, k1);
        else
            directgraphics.drawImage(image, (i - image.getWidth()) + i1 + k, j - l, 0, k1);
        g.setClip(0, 0, getWidth(), getHeight());
    }
 
    void drawChar(Graphics g)
    {
        Image image = imgs[14];
        switch(action)
        {
        case 0: // '\0'
            if((getMaxHP() > HP || getMaxSP() > SP) && turn % 30 == 0)
                action = 9;
            // fall through

        case 1: // '\001'
            image = imgs[14];
            if(action == 0)
                plAniTurn = 0;
            else
                switch(dir)
                {
                case 0: // '\0'
                    if(availableMoveTile(player_X, player_Y, -4, 0))
                        player_X -= 4;
                    break;

                case 1: // '\001'
                    if(availableMoveTile(player_X, player_Y, 4, 0))
                        player_X += 4;
                    break;

                case 2: // '\002'
                    if(availableMoveTile(player_X, player_Y, 0, -4))
                        player_Y -= 4;
                    break;

                case 3: // '\003'
                    if(availableMoveTile(player_X, player_Y, 0, 4))
                        player_Y += 4;
                    break;
                }
            break;

        case 4: // '\004'
            image = imgs[15];
            break;

        case 5: // '\005'
            image = imgs[14];
            break;

        case 6: // '\006'
            image = imgs[15];
            break;

        case 7: // '\007'
            image = imgs[15];
            break;

        case 8: // '\b'
            image = imgs[15];
            break;

        case 9: // '\t'
            image = imgs[14];
            if(turn % 5 == 0)
            {
                if(getMaxHP() > HP)
                    HP += LEVEL;
                if(getMaxSP() > SP)
                    SP += LEVEL;
                if(getMaxHP() < HP)
                    HP = (short)getMaxHP();
                if(getMaxSP() < SP)
                    SP = (short)getMaxSP();
                if(getMaxHP() == HP && getMaxSP() == SP)
                    action = 0;
            }
            break;
        }
        if(action < 4)
        {
            drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 19 * (dir * 3 + plAniTurn), 0, 19, 29, g);
            plAniTurn++;
            if(plAniTurn > 2)
                plAniTurn = 0;
        } else
        if(action == 4)
        {
            drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (dir * 2 + plAniTurn), 0, 27, 32, g);
            if(plAniTurn == 1)
                switch(dir)
                {
                case 0: // '\0'
                    drawImage(imgs[16], ((start_x - 64) + player_X) - 10 - 15, ((start_y - 65) + player_Y) - 20, 20 * dir, 0, 20, 25, g);
                    break;

                case 1: // '\001'
                    drawImage(imgs[16], (((start_x - 64) + player_X) - 10) + 15, ((start_y - 65) + player_Y) - 20, 20 * dir, 0, 20, 25, g);
                    break;

                case 2: // '\002'
                    drawImage(imgs[16], ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 25 - 10, 20 * dir, 0, 20, 25, g);
                    break;

                case 3: // '\003'
                    drawImage(imgs[16], ((start_x - 64) + player_X) - 10, (((start_y - 65) + player_Y) - 25) + 10, 20 * dir, 0, 20, 25, g);
                    break;
                }
            plAniTurn++;
            if(plAniTurn > 1)
            {
                isColledgeAttack();
                plAniTurn = 0;
                action = 0;
            }
        } else
        if(action == 5)
        {
            drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 19 * (dir * 3), 0, 19, 29, g);
            drawImage(imgs[17], ((start_x - 64) + player_X) - 21, ((start_y - 65) + player_Y) - 29 - 27, (plAniTurn % 2) * 42, 0, 42, 27, g);
            plAniTurn++;
            if(plAniTurn > 5)
            {
                isCrazyColledge(0);
                plAniTurn = 0;
                action = 0;
            }
        } else
        if(action == 6)
        {
            drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (2 * plAniTurn + 1), 0, 27, 32, g);
            switch(plAniTurn)
            {
            case 0: // '\0'
                drawImage(imgs[18], ((start_x - 64) + player_X) - 12 - 14, ((start_y - 64) + player_Y) - 24, 24, 0, 24, 24, g);
                break;

            case 1: // '\001'
                drawImage(imgs[18], (((start_x - 64) + player_X) - 12) + 14, ((start_y - 64) + player_Y) - 24, 0, 0, 24, 24, g);
                break;

            case 3: // '\003'
                drawImage(imgs[18], ((start_x - 64) + player_X) - 12, ((start_y - 64) + player_Y) - 10, 48, 0, 24, 24, g);
                break;
            }
            plAniTurn++;
            if(plAniTurn > 3)
            {
                isCrazyColledge(1);
                plAniTurn = 0;
                action = 0;
            }
        } else
        if(action == 7)
        {
            drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (8 + dir), 0, 27, 32, g);
            plAniTurn++;
            if(plAniTurn > 1)
            {
                plAniTurn = 0;
                action = 0;
            }
        } else
        if(action == 8)
        {
            drawImage(image, ((start_x - 64) + player_X) - 14, ((start_y - 65) + player_Y) - 32, 27 * (8 + plAniTurn), 0, 27, 32, g);
            plAniTurn++;
            if(plAniTurn > 4)
            {
                plAniTurn = 0;
                action = 0;
                HP = (short)(getMaxHP() / 2);
                SP = (short)(getMaxSP() / 2);
                EXP -= EXP / 10;
                setVillageMode();
            }
        } else
        if(action == 9)
            drawImage(image, ((start_x - 64) + player_X) - 10, ((start_y - 65) + player_Y) - 29, 228, 0, 19, 29, g);
        NextField();
    }

    void isCrazyColledge(int i)
    {
        for(int j = 0; j < 3; j++)
        {
            if(monsterAction[j] == -1 || Math.abs(player_X - monsterX[j]) >= 50 || Math.abs(player_Y - monsterY[j]) >= 50)
                continue;
            play(0);
            int k = 0;
            if(i == 0)
                k = getSkillValue(0, false);
            else
                k = getSkillValue(2, false);
            if(k <= 0)
                k = 1;
            addNumberEffect(k, monsterX[j], monsterY[j] - 20);
            monsterHp[j] -= k;
            if(monsterHp[j] < 0)
            {
                ZENY += getMonLevel(monsterNo[j]) * 3;
                monsterAction[j] = -1;
                putExp(getMonExp(monsterNo[j]));
                getRandomItem(monsterNo[j]);
            } else
            {
                monsterAction[j] = 0;
            }
        }

    }
//-------------------------¥玩家攻击¥---------------------------
    //只要在一定区域内 矩形区域 攻击都有效
    void isColledgeAttack()//TODO
    {
        for(int i = 0; i < 3; i++)
        {
            if(monsterAction[i] == -1 || Math.abs(player_X - monsterX[i]) >= 20 || Math.abs(player_Y - monsterY[i]) >= 20)
                continue;
            play(0);
            int j = 0; //攻击力
            if(getRandom(100) < getCritical()) //暴击
            {
                j = getAtkMax(); //最大值
            } else
            {
                j = getAtkMin() + (getAtkMax() - getAtkMin()) / 2;
                j -= getMonDef(monsterNo[i]);
            }
            
            if(j < 0)
                j = 1;
            
            if(getRandom(100) < getMonFlee(monsterNo[i]))
            {
                addNumberEffect(0, monsterX[i], monsterY[i] - 20);
                continue;
            }
            addNumberEffect(j, monsterX[i], monsterY[i] - 20);
            monsterHp[i] -= j;
            if(monsterHp[i] < 0)
            {
                ZENY += getMonLevel(monsterNo[i]) * 3;
                monsterAction[i] = -1;
                putExp(getMonExp(monsterNo[i]));
                getRandomItem(monsterNo[i]);
            } else
            {
                monsterAction[i] = 0;
            }
        }

    }

    void NextField()
    {
        if(MAPX == 0 && player_X < 5 && dir == 0 && action == 1)
        {
            current_state = 2;
            setVillageMode();
            return;
        }
        if(player_X < 0)
        {
            MAPX--;
            player_X = 128;
            initMon();
        }
        if(player_X > 128)
        {
            MAPX++;
            player_X = 0;
            initMon();
        }
        if(player_Y < 0)
        {
            MAPY--;
            player_Y = 128;
            initMon();
        }
        if(player_Y > 128)
        {
            MAPY++;
            player_Y = 0;
            initMon();
        }
    }
    void no_keyChar(int i)
    {
    	switch(getGameAction(i))
        {
        case 2: // '\002'
        case 4:         
        case 6: // '\006

⌨️ 快捷键说明

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