我的建议是将deck数组传递给一个方法并返回一个带有[player1,player2,deck]的数组。如果您只是从卡片组的“顶部”绘制,您可以使用shift 将第一个元素从数组中取出。
长期解决方案
deck = [[2,"spades"],[3,"hearts"],[6,"diamonds"],[10,"clubs"],[8,"hearts"],[9,"clubs"]]
def drawTwo(arr)
if arr.count >= 4
player_one = [deck.shift, deck.shift]
player_two = [deck.shift, deck.shift]
return [player_one, player_two, deck]
else
return "Not enough cards in deck, please provide a new deck"
end
end
round = drawTwo(deck)
player_one = round[0]
player_two = round[1]
deck = round[2]
puts "Player one: #{player_one}"
puts "Player two: #{player_two}"
puts "Deck: #{deck}"
我试图写得非常详细,并没有过多地混淆这段代码,所以它应该读起来很容易解释。
你可以像这样重写它来让它更短一点,我只是想让它可以理解发生了什么:
浓缩解决方案
deck = [[2,"spades"],[3,"hearts"],[6,"diamonds"],[10,"clubs"],[8,"hearts"],[9,"clubs"]]
def drawTwo(arr)
arr.count >= 4 ? [[arr.shift, arr.shift], [arr.shift, arr.shift]] : raise "Not enough cards..."
end
player_one, player_two = drawTwo(deck)
puts "Player one: #{player_one}"
puts "Player two: #{player_two}"
puts "Deck: #{deck}"
当您第一次生成卡片组时,请务必包含deck.shuffle。
另外,我不知道你用什么来生成套牌,但因为我玩得很开心:
生成洗牌后的牌组
def newShuffledDeck
ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
suits = ["hearts", "spades", "clubs", "diamonds"]
deck = ranks.product(suits)
deck.shuffle
end