📄 human.java
字号:
{
return weaponId;
}
public void SetWeaponId(int id)
{
weaponId = id;
switch(id)
{
case 0: // '\0'
attPower = DEFAULT_ATT_POWER;
defPower = DEFAULT_DEF_POWER;
break;
case 1: // '\001'
attPower = DEFAULT_ATT_POWER * 2;
defPower = DEFAULT_DEF_POWER + 3;
break;
case 2: // '\002'
attPower = DEFAULT_ATT_POWER * 3;
defPower = DEFAULT_DEF_POWER + 8;
break;
}
}
public int GetAttackPower()
{
return attPower;
}
public int GetDefensePower()
{
return defPower;
}
public void KeyUp()
{
ChangeDirection(0);
SetKeyHold(true);
}
public void KeyDown()
{
ChangeDirection(1);
if(GetType() != 22)
{
SetKeyHold(true);
}
}
public void KeyLeft()
{
ChangeDirection(2);
if(GetType() != 22)
{
SetKeyHold(true);
}
}
public void KeyRight()
{
ChangeDirection(3);
if(GetType() != 22)
{
SetKeyHold(true);
}
}
public void KeyFire()
{
if(GetType() != 22)
{
ChangeAction(3);
}
}
public void SetKeyHold(boolean keyHold)
{
isKeyHold = keyHold;
if(GetType() != 22 && !isKeyHold && (actionId == 1 || actionId == 2))
{
SetAction(0);
}
}
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)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -