Самое простое - просто обновить
puts "point #{card_value[:card]}"
до
puts "point #{card_value[random_card.to_sym]}"
Причина в том, что card_value[:card]
пытается получить из хеша card_value ключ карты, который неСуществовать.
Ваша функция random_card
возвращает "случайное" строковое значение из массива cards, определенного в его теле, и, будучи строкой, вы получите ту же ошибку, что и ключи в card_value
:символов, поэтому вам нужно преобразовать этот результат в символ.
Ответ на красивое дополнение dx7.
Вы можете просто объявить хеш CARD_VALUES, содержащий имена карт иточек, которые вы можете затем набрать с помощью Array#sample
, чтобы избежать добавления бесполезной переменной экземпляра для карты и необходимости передавать ее в качестве аргумента метода при вызове random_card
:
CARD_VALUES = { two: 2, three: 3, four: 4, five: 5, six: 6, seven: 7, eight: 8, nine: 9, ten: 10,
jack: 10, queen: 10, king: 10, ace: 11 }
def random_card
CARD_VALUES.to_a.sample
end
def move
loop do
puts '"hit" or "stick"'
input = gets.chomp
if input == 'hit'
card, point = random_card
puts "card: #{card}"
puts "point: #{point}"
end
break if input == 'stick'
end
end
move