//置玩家行走方向和当前面向相同 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 //置玩家行走方向和当前面向相同