#--------------------------------------------------------------------------
# ● 向左下移动
#--------------------------------------------------------------------------
def move_lower_left(turn_enabled = true,x=-1,y=1)
turn_1
# 没有固定面向的场合
unless @direction_fix
# 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
@direction = 1
end
# 下→左、左→下 的通道可以通行的情况下
for i in 0 ... @move_speed
if passable?(x,y,1)
# 更新坐标
@real_x += x
@real_y += y
# 增加步数
increase_steps
end
end
end
网上实现此功能的办法:
# 下→左、左→下 的通道可以通行的情况下
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
这样虽说是可以了,但是,也不能说一条走不通就不让动啊,所以还需要分别判定两个方向的路径:
# 下→左、左→下 的通道可以通行的情况下
if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) and
(passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 更新坐标
@x -= 1
@y += 1
# 增加步数
increase_steps
# 下→左能够通行的情况下
elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
# 向下移动后向左移动
move_down
move_left
# 左→下能够通行的情况下
elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 向左移动后向下移动
move_left
move_down
end
我自己综合了一下之后:
def move_lower_left(turn_enabled = true,x=-1,y=1)
turn_1
# 没有固定面向的场合
unless @direction_fix
# 朝向是右的情况下适合的面是左面、朝向是上的情况下适合的面是下面
@direction = 1
end
for i in 0 ... @move_speed
if passable?(x,y,1)
# 更新坐标
@real_x += x
@real_y += y
# 增加步数
increase_steps
# 左→下能够通行的情况下
elsif (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
# 向左移动后向下移动
@real_x += x
@real_y += y
increase_steps
# 下→左能够通行的情况下
elsif (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4))
# 向下移动后向左移动
@real_y += y
@real_x += x
increase_steps
end
end
end