在ruby中使用.slice和.shift

在ruby中使用.slice和.shift,ruby,multidimensional-array,slice,Ruby,Multidimensional Array,Slice,我想让这场纸牌游戏继续下去。它应该允许用户设置玩家数量,并向每个玩家分发两张牌 我把这副牌切成两副,这样 @deck = [["2","hearts"], ["A","spades"]], [["J", "clubs"], ["K","hearts"]] 我试图通过shift弹出牌组中的第一副牌来分发下一副牌,然后重复我的次数。我认为这很接近工作-我将感谢任何帮助这一点 @cards=["2","3","4","5","6","7","8","9","10","Jack

我想让这场纸牌游戏继续下去。它应该允许用户设置玩家数量,并向每个玩家分发两张牌

我把这副牌切成两副,这样

@deck = [["2","hearts"], ["A","spades"]],
        [["J", "clubs"], ["K","hearts"]]
我试图通过shift弹出牌组中的第一副牌来分发下一副牌,然后重复我的次数。我认为这很接近工作-我将感谢任何帮助这一点

    @cards=["2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"]*4
    @suits = ["hearts", "spades", "clubs", "diamonds"]*13
    @deck = []

    puts "how many players are there?"
    number_of_players = gets.chomp.to_i


    @deck << [@cards,@suits].transpose.shuffle.each_slice(2)

      1.upto(number_of_players) do |n|
        @deck.shift
        puts "player #{n} cards are: #{@deck}"

      end
@卡片=[“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”、“王牌”]*4
@套装=[“红桃”、“黑桃”、“梅花”、“钻石”]*13
@甲板=[]
输入“有多少玩家?”
玩家数量=gets.chomp.to\u i

@最好使用
p
print语句调试程序,或者安装
pry
gem并使用
binding.pry
设置断点,以便调试程序。
pry
中最强大的命令是
ls
$
,第一个命令打印类和对象的所有方法,第二个命令打印方法的源代码。这个问题是重复的-只需使用
。每个片段(2)。按照我在那里建议的(玩家数量)
,然后循环返回结果。是的,我使用了其中的一部分-我只是在将它与我的.upto循环集成时遇到了问题。根据你的建议,这是采取适当数量的卡,但不分配给球员。你知道为什么吗?班次没有按计划进行?我认为它基本上会对我的切片进行迭代。另外,我还不熟悉堆栈溢出,所以我没有意识到我可以编辑原始帖子。感谢帮助@akuhn
每个_slice
返回一个不支持
shift
的枚举数:(使用
shift(2)
删除2张卡等
@deck = [@cards,@suits].transpose.shuffle.each_slice(2).to_a
@initial = @deck.shift(number_of_players)

@initial.each.with_index(1) do |cards, n|
  puts "player #{n} cards are: #{cards}"
end

#⇒ player 1 cards are: [["5", "diamonds"], ["7", "spades"]]
#  player 2 cards are: [["7", "clubs"], ["10", "hearts"]]
#  player 3 cards are: [["9", "spades"], ["Queen", "spades"]]

puts "Left pairs in the deck: #{@deck.count}"
#⇒ 23 # for 3 players, it’s 26 - number_of_players