【发布时间】:2014-05-16 22:24:43
【问题描述】:
我正在用 Ruby 编写一个纸牌游戏框架,但我发现了一个问题。我做了一个洗牌方法,可以混合卡片,效果很好。但是我叫 Deck#shuffle 而不是 Deck#shuffle!它让牌组一直洗牌,这是我不想要的。
我还觉得奇怪的是,当我添加 :riffle 作为参数时,然后 shuffle 不会让牌组保持我想要的洗牌。
对于如何防止 Deck#shuffle 修改牌组的任何帮助,我将不胜感激。谢谢!
这是我的代码(其中的一部分,如果有人也需要我,我可以发布其余部分):
class Deck
def initialize
@cards = []
(1..4).each { |suit|
(1..13).each { |rank|
@cards << Card.new(rank, suit)
}
}
end
def size
@deck.length
end
def shuffle!(type = :random, precision = 100)
case type
when :random
@cards.shuffle!
when :riffle, :farro
i = 0
first, second = cut
@cards = []
while size != 52
pile = (i.even? ? first : second)
if pile.empty?
pile = (pile == first ? second : first)
end
add_card(pile.pop)
i += 1 if (1..precision) === rand(1..100)
end
else
warn "Invalid shuffle method."
end
end
def shuffle(type = :random, precision = 100)
dup.shuffle!(type, precision)
end
def add_card(card)
@cards << card
end
end
deck = Deck.new
deck.shuffle
p deck.cards.map(&:to_a)
【问题讨论】: