Код:
def run_path
return if moving?
step = @map[@x,@y]
if step == 1
@map = nil
@runpath = false
return
end
dir = rand(2)
dirs = []
dirs.push(6) if @map[@x+1, @y] == step - 1 && step != 0
dirs.push(4) if @map[@x-1, @y] == step - 1 && step != 0
dirs.push(2) if @map[@x, @y+1] == step - 1 && step != 0
dirs.push(8) if @map[@x, @y-1] == step - 1 && step != 0
case dir
when 0
if dirs.size == 2 && diagonal_passable?(@x,@y,dirs[0],dirs[1])
move_diagonal(dirs[0],dirs[1])
dirs.delete_at(0)
dirs.delete_at(0)
else
dir = dirs.delete_at(rand(dirs.size))
move_straight(6) if @map[@x+1,@y] == step - 1 && step != 0
move_straight(2) if @map[@x,@y+1] == step - 1 && step != 0
move_straight(4) if @map[@x-1,@y] == step - 1 && step != 0
move_straight(8) if @map[@x,@y-1] == step - 1 && step != 0
end
when 1
if dirs.size == 2 && diagonal_passable?(@x,@y,dirs[0],dirs[1])
move_diagonal(dirs[0],dirs[1])
dirs.delete_at(0)
dirs.delete_at(0)
else
dir = dirs.delete_at(rand(dirs.size))
move_straight(8) if @map[@x,@y-1] == step - 1 && step != 0
move_straight(4) if @map[@x-1,@y] == step - 1 && step != 0
move_straight(2) if @map[@x,@y+1] == step - 1 && step != 0
move_straight(6) if @map[@x+1,@y] == step - 1 && step != 0
end
end
end
Социальные закладки