MC logo

Box Class

  Ruby Example Code

<<Ruby Classes box.rb Inheritance>>
# Box drawing class.
class Box
  # Initialize to given size, and filled with spaces.
  def initialize(w,h)
    @wid = w
    @hgt = h
    @fill = ' '
  end

  # Change the fill.
  def fill(f)
    @fill = f
    return self
  end

  # Rotate 90 degrees.
  def flip
    @wid, @hgt = @hgt, @wid
    return self
  end
  
  # Generate (print) the box
  def gen
    line('+', @wid - 2, '-')
    (@hgt - 2).times { line('|', @wid - 2, @fill) }
    line('+', @wid - 2, '-')
  end
  
  # For printing
  def to_s
    fill = @fill
    if fill == ' '
      fill = '(spaces)'
    end
    return "Box " + @wid.to_s + "x" + @hgt.to_s + ", filled: " + fill
  end

private
  # Print one line of the box.
  def line(ends, count, fill)
    print ends;
    count.times { print fill }
    print ends, "\n";
  end
end

# Create some boxes.
b1 = Box.new(10, 4)
b2 = Box.new(5,12).fill('$')
b3 = Box.new(3,3).fill('@')

print "b1 = ", b1, "\nb2 = ", b2, "\nb3 = ", b3, "\n\n"

# Print some boxes.
print "b1:\n";
b1.gen

print "\nb2:\n";
b2.gen

print "\nb3:\n";
b3.gen

print "\nb2 flipped and filled with #:\n";
b2.fill('#').flip.gen
print "\nb2 = ", b2, "\n"
<<Ruby Classes Inheritance>>