class TresBot::Robot

Attributes

current_position[RW]
facing[RW]
is_on_the_table[RW]

Public Class Methods

new() click to toggle source
# File lib/tres_bot.rb, line 12
def initialize
  self.current_position = [0,0]
  self.facing = 'NORTH'
  self.is_on_the_table = false
end

Public Instance Methods

compass(dir) click to toggle source
# File lib/tres_bot.rb, line 34
def compass(dir)
  dir = dir.downcase
  axis = ['north','south'].include?(dir) ? 'y':'x'
  operator = ['north','east'].include?(dir) ? '+' : '-'
  [axis,operator]
end
left() click to toggle source
# File lib/tres_bot.rb, line 29
def left
  c = ::CircularList::List.new(['NORTH','EAST','SOUTH','WEST'])
  self.facing = c.fetch_previous(c.index(self.facing))
end
move() click to toggle source
# File lib/tres_bot.rb, line 41
def move
  calibration = self.compass(self.facing)
  axis = calibration[0]
  operator = calibration[1]
  if axis == 'x'
    unless (self.current_position[0] == 0 && operator == '-') || (self.current_position[0] == 4 && operator == '+')
      self.current_position[0]=self.current_position[0].to_i.send(operator,1)
    end
  else
    unless (self.current_position[1] == 0 && operator == '-') || (self.current_position[1] == 4 && operator == '+')
      self.current_position[1]=self.current_position[1].to_i.send(operator,1)
    end
  end
end
place(position) click to toggle source
# File lib/tres_bot.rb, line 18
def place(position)
  self.is_on_the_table  = true
  self.current_position = [position[0],position[1]]
  self.facing           = position[2].upcase
end
report() click to toggle source
# File lib/tres_bot.rb, line 56
def report
  rep = "#{self.current_position.join(', ')}, #{self.facing}"
  puts rep
  rep
end
right() click to toggle source
# File lib/tres_bot.rb, line 24
def right
  c = ::CircularList::List.new(['NORTH','EAST','SOUTH','WEST'])
  self.facing = c.fetch_next(c.index(self.facing))
end