# 判断人物朝向
case $game_player.direction
when 2
row += 1
when 4
col -= 1
when 6
col += 1
when 8
row -= 1
end
# 箱子
box = get_character(0)
# 地图上的这个位置不能通行的情况下
unless $game_map.passable?(box.x+col, box.y+row, 0)
return
end
# 遍历所有事件
for event in $game_map.events.values
# 首先排除自己
if event.id != box.id
# 1.判断箱子后方是否存在将要触发的事件
if event.x == box.x+col && event.y == box.y+row
# 2.判断是否可以通过
if event.through
break
else
return
end
end
else
next
end
end
# 更新人物位置
case $game_player.direction
when 2
$game_player.move_down
when 4
$game_player.move_left
when 6
$game_player.move_right
when 8
$game_player.move_up
end
# 遍历所有事件,判断移动后的箱子是否到达目的地
for event in $game_map.events.values
# 首先排除自己
if event.id != box.id
# 1.判断箱子所在位置是否存在事件
if event.x == box.x && event.y == box.y
# 2.判断该事件的目的地信息
if event.destination
box.is_arrive = true
break
else
return
end
end
end
end
# 如果方法可以执行到这里,说明这次移动触发了到达目的地事件
num = 0
# 遍历所有事件,统计到达目的地的箱子数量
for event in $game_map.events.values
if event.is_arrive
num +=1
end
end
# 判断到达目的地的箱子数量和通关所需的数量是否一致
if num != 0 && num == $pass_num
print "通关(打印信息会暂停动画效果,并非BUG.)"
end