class Robot

Constants

DIRECTIONS
STEP_DIRECTIONS

Attributes

direction[RW]
x[RW]
y[RW]

Public Class Methods

new(x = '0', y = '0', direction = 'NORTH') click to toggle source
# File lib/r3d3/models/robot.rb, line 15
def initialize(x = '0', y = '0', direction = 'NORTH')
  place(x, y, direction)
end

Public Instance Methods

move(board) click to toggle source
# File lib/r3d3/models/robot.rb, line 26
def move(board)
  return if board.forbid_move?(*attempted_move)
  update_position(attempted_move)
end
place(x, y, direction) click to toggle source
# File lib/r3d3/models/robot.rb, line 19
def place(x, y, direction)
  @x = x.to_i
  @y = y.to_i
  @direction = direction
  raise 'Direction is not valid' unless DIRECTIONS.include? @direction
end
report() click to toggle source
# File lib/r3d3/models/robot.rb, line 39
def report
  '%d,%d,%s' % [@x, @y, @direction]
end
turn_left() click to toggle source
# File lib/r3d3/models/robot.rb, line 31
def turn_left
  @direction = DIRECTIONS[current_direction_index - 1]
end
turn_right() click to toggle source
# File lib/r3d3/models/robot.rb, line 35
def turn_right
  @direction = DIRECTIONS[(current_direction_index + 1) % 4]
end

Private Instance Methods

attempted_move() click to toggle source
# File lib/r3d3/models/robot.rb, line 49
def attempted_move
  (Matrix[coordinates] + Matrix[STEP_DIRECTIONS[@direction.to_sym]]).to_a.first
end
coordinates() click to toggle source
# File lib/r3d3/models/robot.rb, line 57
def coordinates
  [@x, @y]
end
current_direction_index() click to toggle source
# File lib/r3d3/models/robot.rb, line 53
def current_direction_index
  DIRECTIONS.find_index(@direction)
end
update_position(new_coordinates) click to toggle source
# File lib/r3d3/models/robot.rb, line 45
def update_position(new_coordinates)
  @x, @y = new_coordinates
end