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