boxes.each do |box|
      case touching?(box)
        when :left
          if @moving_right and pushingright < 2
            box.move(speed, :right, screen, offset_x, offset_y, width, height)
            @x += speed if @movable_right
            @pushed = true
          else
            @pushed = false
          end
        when :right
          if  @moving_left and pushingleft < 2
            box.move(speed, :left, screen, offset_x, offset_y, width, height)
            @x -= speed if @movable_left
            @pushed = true
          else
            @pushed = false
          end
        when :top
          if @moving_down and pushingdown < 2
            box.move(speed, :down, screen, offset_x, offset_y, width, height)
            @y += speed if @movable_down
            @pushed = true
          else
            @pushed = false
          end
        when :bottom
          if @moving_up and pushingup < 2
            box.move(speed, :up, screen, offset_x, offset_y, width, height)
            @y -= speed if @movable_up
            @pushed = true
          else
            @pushed = false
          end
        when nil
          @pushed = false
      end  
      @message1 = @arial12.render("pushed: " + @pushed.to_s + " ", true,  [0, 0, 0])
      @message2 = @arial12.render("touching?: " + touching?(box).to_s + " ", true,  [0, 0, 0])
      @message1.blit(screen, [200,200])
      @message2.blit(screen, [200,220])
      box.move(speed, :not, screen, offset_x, offset_y, width, height)
    end
    if @pushed == false
      @x += speed if @moving_right && @movable_right && !@right_edge 
      @x -= speed if @moving_left && @movable_left && !@left_edge 
      @y += speed if @moving_down  && @movable_down && !@bottom_edge
      @y -= speed if @moving_up && @movable_up && !@top_edge
      boxes.call(:move, speed, :not, screen, offset_x, offset_y, width, height)
    end    
    @rect.center = [@x - offset_x, @y - offset_y]
    
  end
  
  def touching?(touchee)
    if @y + 8 == touchee.y - 8 #top
      if @x + 8 == touchee.x - 8  #left
        return :topleft
      elsif @x - 8 == touchee.x + 8 #right
        return :topright
      elsif @x < touchee.x + 16 and @x > touchee.x - 16 #same x axis
        return :top
      end
    elsif @y - 8 == touchee.y + 8 #bottom
      if  @x + 8 == touchee.x - 8 #left
        return :bottomleft
      
      elsif @x - 8 == touchee.x + 8 #rigth
        return :bottomright
      elsif @x < touchee.x + 16 and @x > touchee.x - 16 #same x axis
        return :bottom
      end  
    elsif @y < touchee.y + 16 and @y > touchee.y - 16 #same y axis
      if @x + 8 == touchee.x - 8 #left
        return :left
      elsif @x - 8 == touchee.x + 8 #right 
        return :right
      end
    else
      return nil
    end
  end
  
  def checkbump(screen, speed, width, height)
    @y - 8 < speed ? @top_edge = true : @top_edge = false
    @y + 8 > (height * 16) - speed ? @bottom_edge = true : @bottom_edge = false
    @x - 8 < speed ? @left_edge = true : @left_edge = false
    @x + 8 > (width * 16)  - speed ? @right_edge = true : @right_edge = false
  end
  
end