Код:
	
  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
 
Социальные закладки