Я тестирую однопользовательскую программу блэкджека.Я создал метод score
, который преобразует имена карт в целые числа, а затем возвращает общий счет из массива hand
.
def random_card
cards = ["two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten",
"jack", "queen", "king", "ace"]
cards[rand(13)]
end
hand = ["four", "queen", "ace", "seven"]
def score(hand)
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
}
p hand
final_score = 0
i = 0
while i < hand.length
hand[i] = values[hand[i]]
i += 1
end
hand.each do |card|
final_score += card
end
if final_score <= 21
puts "You scored: " + final_score.to_s
else
puts "You busted with: " + final_score.to_s
end
end
Проблема заключается в передаче массива методу;он работает, когда он локальный, но передача массива в качестве аргумента либо дает 0 для 1 ArgumentError , либо, если я использую опцию splat, пустой массив.
hand
необходимобыть глобальным, чтобы другие методы могли получить к нему доступ, например, метод random_card
, который в конечном итоге будет генерировать руку.
Когда hand
находится внутри score
, p hand
показывает полный массив, аоценка 32
.Там, где он есть, отображается пустой массив, и результат равен 0
.
Как передать массив и сохранить сохраненные значения?