Добавьте MOVES
, который говорит, как двигаться в зависимости от того, как вы столкнулись.
MOVES = {
north: [0, 1],
south: [0, -1],
east: [1, 0],
west: [-1,0]
}
def move
move = MOVES.fetch(@facing)
@position[0] += move[0]
@position[1] += move[1]
end
MOVES.fetch(@facing)
используется вместо MOVES[@facing]
, поэтому возникнет ошибка, если для этой стороны не будет хода.
Вы также можете сделать это с помощью оператора case
, но это делает move
простым и управляемым данными. Вы можете добавить больше направлений, таких как northeast: [1,1]
. И если вы сделаете это переменной экземпляра, вы можете настроить способ перемещения отдельных роботов.
# Define `moves` and `moves=` to get and set `@moves`
attr_accessor :moves
def initialize(attr = {})
...
# Initialize `moves` with either Robot.new(moves: {...})
# or the default MOVES
@moves ||= attr[:moves] || MOVES
...
end
def move
move = moves.fetch(@facing)
@position[0] += move[0]
@position[1] += move[1]
end