Первым делом вы назначаете пустой массив для @coordinates
при инициализации, поэтому измените его следующим образом:
class Hero < Character
attr_accessor :lives, :coordinates
def initialize (lives, coordinates = [])
@lives = lives
@coordinates = coordinates # assign the value of the parameter
end
def get_direction
puts "Press up/down and left/right keys to start moving your hero"
next_move = gets.chomp.downcase
if next_move == 'left'
@coordinates = [0, -1]
elsif next_move == 'right'
@coordinates = [0, 1]
elsif next_move == 'up'
@coordinates = [-1, 0]
elif next_move == 'down'
@coordinates = [1, 0]
end
end
end
Затем вам нужно создать экземпляр объекта Hero, передав параметры для инициализации:
hero = Hero.new('something', [:x,:y,:z])
И теперь вы можете вызвать метод:
p hero.coordinates #=> [:x, :y, :z]
Во второй части вопроса я могу предложить вам взглянуть на
Вектор класс для перемещения и сравнения, может быть, вы можете найти полезные:
require 'matrix'
position = Vector[1, 2]
move = Vector[4, 6]
new_position = position + move #=> Vector[5, 8]
p new_position.magnitude #=> 9.433981132056603 (distance from origin 0, 0)