//置玩家行走方向和当前面向相同
MonDir = 1
Else
KeyDown 37, 1
MonDir = -1
EndIf
Return JudgeMoveDir
//停止移动
Sub StopMove
FindBallState = 0
NearMon = 0
KeyUp 39, 1
KeyUp 37, 1
Delay 30
Return StopMove
//移动到蓝球
Sub MoveToBall
//蓝自动回到大于90%时不再找蓝球回蓝
VBSCall FindColorEx( MaxMpX, MpY, MaxMpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)
If FindBallX > 0
FindBallState = 0
BallFloor = 0
EndIf
If GameState < 0
//判断是否要找蓝球回蓝
VBSCall FindColorEx( MpX, MpY, MpX, MpY, MpColor, 0, 0.9, FindBallX, FindBallY)
If FindBallX < 0 and FindBallState = 0
FindBallState = 1
EndIf
If FindBallState <> 0
Gosub GetBallInfo
Gosub StepToFloor
EndIf
EndIf
Return MoveToBall
//得到层与层之间的关系
Sub StepToFloor
If BallX > 0 and PlayerX > 0
GameState = -2
FloorDis = BallFloor - PlayerFloor
//如果玩家高度高于怪物,先移动到怪物的下面
If FloorDis < 0 and (FindBallState = 1 or tempFloorDis <> FloorDis)
tempFloorDis = FloorDis
FindBallState = 2
Gosub JudgeMoveBallDir
ElseIf FloorDis = 0
Gosub JudgeMoveBallDir
//已吃到蓝球,蓝球位置置0
If Abs(BallX - PlayerX) < 40
BallFloor = 0
EndIf
ElseIf FloorDis > 0
tempLeftDis = 0 : tempRightDis = 0
//处理找蓝球加蓝时可能会导致的一个问题
If BallFloor = 1
If BallX > PlayerX
tempLeftDis = 250 : tempRightDis = 0
Else
tempLeftDis = 0 : tempRightDis = -250
EndIf
EndIf
If PlayerFloor = 3.5
tempTopDis = 40: tempButtomDis = 60: tempXDis = 150
Else
tempTopDis = -90: tempButtomDis = 0: tempXDis = 65
EndIf
Gosub JudgeFloorPos
EndIf
ElseIf FindBallState = 2
Gosub StopMove
EndIf
Return StepToFloor
//得到层与层之间的关系
Sub JudgeFloorPos
//没有在第一层,则找到第一层相对于玩家的位置 从中间左右判断上一层相对于玩家的位置
VBSCall FindColorEx(GameLeft + tempLeftDis, PlayerY + tempTopDis, PlayerX, PlayerY + tempButtomDis, FloorColor, 2, 0.8, FloorX1, FloorY1)
VBSCall FindColorEx(PlayerX, PlayerY + tempTopDis, GameRight + tempRightDis, PlayerY + tempButtomDis, FloorColor, 0, 0.8, FloorX2, FloorY2)
If FloorX1 < 0 and FloorX2 < 0
KeyDown KeyNum, 1
ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX >= PlayerX - FloorX1)) or (FloorX1 > 0 and FloorX2 < 0)
KeyUp 39, 1
KeyDown 37, 1
MonDir = -1
ElseIf (FloorX1> 0 and FloorX2 > 0 and (FloorX2 - PlayerX < PlayerX - FloorX1)) or (FloorX1 < 0 and FloorX2 > 0)
KeyUp 37, 1
KeyDown 39, 1
MonDir = 1
EndIf
If Abs(FloorX1 - PlayerX) < tempXDis or ABS(FloorX2 - PlayerX) < tempXDis
KeyPress 32, 1
Delay 500
EndIf
Return JudgeFloorPos
//向目标移动
Sub JudgeMoveBallDir
KeyUp 39, 1
KeyUp 37, 1
If BallX > PlayerX
KeyDown 39, 1
//置玩家行走方向和当前面向相同