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

📄 human.java

📁 又是一款j2me 游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    public int GetPosX()
    {
        int myPosX = GetCenterLocationX();
        myPosX /= 30;
        return myPosX;
    }

    public int GetPosY()
    {
        int myPosY = (super.curLoc.GetY() + super.curLoc.GetHeight()) - 3;
        myPosY /= 30;
        return myPosY;
    }

    public int GetObjectId()
    {
        int myPosX = GetPosX();
        int myPosY = GetPosY();
        return Room.GetObjectId(myPosX, myPosY);
    }

    public boolean IsDoorUnlock(int doorLocX, int doorLocY)
    {
        int keyId = Map.GetDoorLockId(doorLocX, doorLocY);
        if(keyId == -1)
            return true;
        for(int i = 3; i < itemStock.length; i++)
            if(GetItem(i) == keyId)
            {
                Map.UnlockDoorId(Map.GetMapId(), doorLocX, doorLocY);
                String str[] = {
                    "You unlock the door", "with " + Map.GetItemInfo(keyId)
                };
                SetMessage(str, 20);
                return true;
            }

        return false;
    }

    public boolean OpenTheDoor(int newDoorId, int x, int y)
    {
        if(IsDoorUnlock(x, y))
        {
            Room.SetObjectId(newDoorId, x, y);
            return true;
        }
        int keyId = Map.GetDoorLockId(x, y);
        if(keyId == 20)
        {
            String newMsg[] = {
                "Door is locked. I cannot", "open this door with key."
            };
            SetMessage(newMsg, 30);
        } else
        if(keyId != -1)
        {
            String newMsg[] = {
                "Door is locked.", "I need to find " + Map.GetItemInfo(keyId)
            };
            SetMessage(newMsg, 30);
        }
        return false;
    }

    public int MoveToDirection(int dis, boolean changeRoomData)
    {
        int canMoveDis = 0;
        isMoving = true;
        switch(super.direction)
        {
        case 0: // '\0'
            canMoveDis = CheckCollision(dis, 0, changeRoomData);
            MoveY(-canMoveDis);
            legArea.MoveY(-canMoveDis);
            return canMoveDis;

        case 1: // '\001'
            canMoveDis = CheckCollision(dis, 1, changeRoomData);
            MoveY(canMoveDis);
            legArea.MoveY(canMoveDis);
            return canMoveDis;

        case 2: // '\002'
            canMoveDis = CheckCollision(dis, 2, changeRoomData);
            MoveX(-canMoveDis);
            legArea.MoveX(-canMoveDis);
            return canMoveDis;

        case 3: // '\003'
            canMoveDis = CheckCollision(dis, 3, changeRoomData);
            MoveX(canMoveDis);
            legArea.MoveX(canMoveDis);
            return canMoveDis;
        }
        return -1;
    }

    public int MoveOppositeDirection(int dis, boolean changeRoomData)
    {
        int canMoveDis = 0;
        isMoving = true;
        switch(super.direction)
        {
        case 0: // '\0'
            canMoveDis = CheckCollision(dis, 1, changeRoomData);
            MoveY(canMoveDis);
            legArea.MoveY(canMoveDis);
            return canMoveDis;

        case 1: // '\001'
            canMoveDis = CheckCollision(dis, 0, changeRoomData);
            MoveY(-canMoveDis);
            legArea.MoveY(-canMoveDis);
            return canMoveDis;

        case 2: // '\002'
            canMoveDis = CheckCollision(dis, 3, changeRoomData);
            MoveX(canMoveDis);
            legArea.MoveX(canMoveDis);
            return canMoveDis;

        case 3: // '\003'
            canMoveDis = CheckCollision(dis, 2, changeRoomData);
            MoveX(-canMoveDis);
            legArea.MoveX(-canMoveDis);
            return canMoveDis;
        }
        return -1;
    }

    public boolean IsObstruction(int toX, int toY)
    {
        int fromX = GetCenterLocationX();
        int dis = fromX - toX;
        if(dis < 0)
        {
            dis = -dis;
            int canMoveDis = CheckCollision(dis, 3, false);
            if(canMoveDis >= dis)
            {
                int fromY = GetLegLocationY();
                dis = fromY - toY;
                if(dis < 0)
                {
                    dis = -dis;
                    canMoveDis = CheckCollision(dis, 1, false);
                    return canMoveDis < dis;
                } else
                {
                    canMoveDis = CheckCollision(dis, 0, false);
                    return canMoveDis < dis;
                }
            }
        } else
        {
            int canMoveDis = CheckCollision(dis, 2, false);
            if(canMoveDis >= dis)
            {
                int fromY = GetLegLocationY();
                dis = fromY - toY;
                if(dis < 0)
                {
                    dis = -dis;
                    canMoveDis = CheckCollision(dis, 1, false);
                    return canMoveDis < dis;
                } else
                {
                    canMoveDis = CheckCollision(dis, 0, false);
                    return canMoveDis < dis;
                }
            }
        }
        return true;
    }

    public int CheckCollision(int moveOffset, int direct, boolean changeRoomData)
    {
        int widthOffset = super.curLoc.GetWidth() / 2 - 2;
        int heightOffset = super.curLoc.GetHeight() - 3;
        int curPosX = GetCenterLocationX();
        curPosY = super.curLoc.GetY() + heightOffset;
        try
        {
            switch(direct)
            {
            default:
                break;

            case 0: // '\0'
            {
                int minX = curPosX - widthOffset;
                int maxX = curPosX + widthOffset;
                int leftPosX = minX / 30;
                int rightPosX = maxX / 30;
                int posY1 = curPosY / 30;
                int leftRoomData = Room.GetObjectId(leftPosX, posY1);
                int rightRoomData = Room.GetObjectId(rightPosX, posY1);
                int objPosY = (posY1 + 1) * 30;
                int leftDisY = objPosY - Room.GetObstructionDistance(leftRoomData, direct);
                int rightDisY = objPosY - Room.GetObstructionDistance(rightRoomData, direct);
                int moveTo = curPosY - moveOffset;
                if(moveTo <= rightDisY && curPosY >= rightDisY && rightRoomData != -1)
                {
                    int objPosX = Room.GetObstructionDistance(rightRoomData, 3);
                    int lWidth = 30 - Room.GetObstructionDistance(rightRoomData, 2);
                    int rWidth = objPosX;
                    int width = lWidth - rWidth;
                    if(width > 0)
                    {
                        objPosX += rightPosX * 30;
                        int leftBound = objPosX;
                        int rightBound = objPosX + width;
                        if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
                            return curPosY - rightDisY;
                    }
                }
                if(moveTo <= leftDisY && curPosY >= leftDisY && leftPosX != rightPosX && leftRoomData != -1)
                {
                    int objPosX = Room.GetObstructionDistance(leftRoomData, 3);
                    int lWidth = Room.GetObstructionDistance(leftRoomData, 2);
                    int rWidth = 30 - objPosX;
                    int width = rWidth - lWidth;
                    if(width > 0)
                    {
                        objPosX += leftPosX * 30;
                        int leftBound = objPosX;
                        int rightBound = objPosX + width;
                        if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
                            return curPosY - leftDisY;
                    }
                }
                int posY2 = moveTo / 30;
                if(posY1 != posY2)
                    while(--posY1 >= posY2)
                    {
                        leftRoomData = Room.GetObjectId(leftPosX, posY1);
                        rightRoomData = Room.GetObjectId(rightPosX, posY1);
                        leftDisY = (objPosY -= 30) - Room.GetObstructionDistance(leftRoomData, direct);
                        rightDisY = objPosY - Room.GetObstructionDistance(rightRoomData, direct);
                        if(changeRoomData && (GetType() == 20 || GetType() == 21) && leftPosX == rightPosX)
                        {
                            int rData = Room.GetRoomData(leftPosX, posY1);
                            if(Room.IsCloseDoorYId(rData))
                            {
                                OpenTheDoor(rData + 1, leftPosX, posY1);
                            } else
                            {
                                newItem = Map.GetItemId(leftPosX, posY1);
                                if(newItem == 17 || newItem == 18)
                                {
                                    Map.SetItemId(newItem, leftPosX, posY1);
                                    SetAction(10);
                                    String newItemMsg[] = {
                                        Map.GetItemName(newItem), Map.GetItemInfo(newItem)
                                    };
                                    SetMessage(newItemMsg, 30);
                                    if(newItem == 17)
                                        GameManager.ShowEvent(30);
                                    else
                                    if(newItem == 18)
                                        GameManager.ShowEvent(31);
                                } else
                                if(newItem != -1)
                                {
                                    boolean canSaveItem = false;
                                    if(newItem < 3)
                                    {
                                        SetNewWeapon(newItem);
                                        canSaveItem = true;
                                    } else
                                    {
                                        canSaveItem = AddNewItem(newItem);
                                    }
                                    if(!canSaveItem)
                                        Map.SetItemId(newItem, leftPosX, posY1);
                                    SetAction(10);
                                    if(Room.IsCloseTreasureId(rData) && canSaveItem)
                                        Room.SetRoomData(rData + 1, leftPosX, posY1);
                                    String newItemMsg[] = {
                                        Map.GetItemName(newItem), Map.GetItemInfo(newItem)
                                    };
                                    SetMessage(newItemMsg, 30);
                                    if(newItem == 0)
                                        GameManager.ShowEvent(3);
                                    else
                                    if(newItem == 7)
                                        Map.SetEventId(7, 11, 4, 7);
                                    else
                                    if(newItem == 8)
                                        Map.SetEventId(8, 12, 8, 2);
                                    else
                                    if(newItem == 9)
                                        Map.SetEventId(10, 14, 5, 6);
                                    else
                                    if((newItem == 14 || newItem == 16 || newItem == 15) && HasItemId(14) && HasItemId(16) && HasItemId(15))
                                    {
                                        Map.UnlockDoorId(3, 7, 0);
                                        GameManager.ShowEvent(98);
                                    }
                                } else
                                if(Room.IsExaminableId(rData))
                                    SetAction(9);
                            }
                        }
                        if(rightRoomData != -1)
                        {
                            int objPosX = Room.GetObstructionDistance(rightRoomData, 3);
                            int lWidth = 30 - Room.GetObstructionDistance(rightRoomData, 2);
                            int rWidth = objPosX;
                            int width = lWidth - rWidth;
                            if(width > 0)
                            {
                                objPosX += rightPosX * 30;
                                int leftBound = objPosX;
                                int rightBound = objPosX + width;
                                if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
                                    return curPosY < rightDisY || moveTo > rightDisY ? moveOffset : curPosY - rightDisY;
                            }
                        }
                        if(leftPosX != rightPosX && leftRoomData != -1)
                        {
                            int objPosX = Room.GetObstructionDistance(leftRoomData, 3);
                            int lWidth = Room.GetObstructionDistance(leftRoomData, 2);
                            int rWidth = 30 - objPosX;
                            int width = rWidth - lWidth;
                            if(width > 0)
                            {
                                objPosX += leftPosX * 30;
                                int leftBound = objPosX;
                                int rightBound = objPosX + width;
                                if(minX < rightBound && maxX > leftBound || minX > leftBound && maxX < rightBound || minX < leftBound && maxX > leftBound || minX < rightBound && maxX > rightBound)
                                    return curPosY < leftDisY || moveTo > leftDisY ? moveOffset : curPosY - leftDisY;
                            }
                        }
                        if(Room.IsCornerWallId(leftRoomData))
                            return leftDisY < moveTo ? moveOffset : curPosY - leftDisY;
                        if(Room.IsCornerWallId(rightRoomData))
                            return rightDisY < moveTo ? moveOffset : curPosY - rightDisY;
                    }
                break;
            }

            case 1: // '\001'
            {
                int minX = curPosX - widthOffset;
                int maxX = curPosX + widthOffset;
                int leftPosX = minX / 30;
                int rightPosX = maxX / 30;
                int posY1 = curPosY / 30;
                int leftRoomData = Room.GetObjectId(leftPosX, posY1);
                int rightRoomData = Room.GetObjectId(rightPosX, posY1);
                int objPosY = posY1 * 30;
                int leftDisY = objPosY + Room.GetObstructionDistance(leftRoomData, direct);
                int rightDisY = objPosY + Room.GetObstructionDistance(rightRoomData, direct);
                int moveTo = curPosY + moveOffset;

⌨️ 快捷键说明

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