Я пытаюсь создать класс ruby для игры под названием times up. По сути, для начала необходимо выполнить следующие функции:Элементы массива refresh/rollback класса Ruby
Каждый экземпляр класса - это игра.
В каждой игре есть набор слов, которые вводят игроки.
класс должен позволить получить случайный элемент из массива слов и впоследствии удалить этот элемент из игры.
Когда все слова вышли из «шляпы», игра должна быть способна обновить массив до его исходного содержимого, имитируя перевод слов обратно в шляпу для следующего раунда.
Именно этот последний момент, что у меня возникли проблемы с .. Я пытался создать фиктивный массив или базовый массив, который не модифицируется, а затем просто установить опустели массив в базовой массив в конце раунд, но это только приводит к тому, что я удаляю элементы из базового массива во втором раунде и оставляю два пустых массива в конце второго раунда: (как мне создать копию, которая не будет изменена?
Вот мой код:
class TimesUp
def initialize
@hat = []
@basehat = []
end
def NewWord(word)
@hat.push(word)
@basehat.push(word)
end
def grab
if @hat.empty?
puts "End of round!"
else
l = @hat.length
word = rand(l)
puts @hat[word]
@hat.delete_at(word)
end
end
def printout
puts @hat
end
# here is where i try to set the game array to the 'base' array.
def refresh
@hat = @basehat
@basehat = @basehat
end
end
Вы явно устанавливаете две ссылки на один и тот же объект. Вам, вероятно, нужно обмануть или просто воссоздать его из списка слов. –
Попробуйте что-нибудь вроде 'loop do; @hat = basehat.dup; <игра в игру>; <разрыв, когда надоело играть>; end'. –