【问题标题】:Deck of cards that deals a number of cards to a number of players向许多玩家发牌的一副牌
【发布时间】:2017-10-30 22:52:16
【问题描述】:

我建立了一副纸牌:

class Card
  attr_accessor :rank, :suit

  def initialize(rank, suit)
    @rank = rank
    @suit = suit
  end

  def output_card
    puts "#{self.rank} of #{self.suit}"
  end
end

class Deck
  def initialize
      @cards = []
      @ranks = ["Ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "Jack", "Queen", "King"]
      @suits = [:hearts, :spades, :diamonds, :clubs]
      @suits.each do |suit|
        @ranks.each do |rank|
          @cards << Card.new(rank, suit)
      end
    end
  end

  def shuffle
    @cards.shuffle!
  end

  def deal
    @cards.shift
  end

  def output_deck
    @cards.each do |card|
      card.output_card
    end
  end
end

deck = Deck.new
deck.shuffle
deck.deal
deck.output_deck
puts "Show top card:"
deck.deal.output_card

我正在努力添加Dealer 类以将指定数量的牌发给指定数量的玩家。

如果有人能解释一下,我将不胜感激。

【问题讨论】:

  • 这个问题似乎有点像家庭作业......尽管如此,如果您详细说明您无法理解的内容,它将有所帮助。要求解释 OOP 及其在这种情况下的适用性太宽泛了。缩小问题范围,我们可以尝试给你一个更有用的答案。如果您是 OOP 新手,并且不确定如何使用该术语来询问它,请使用您更熟悉的其他编程风格的术语。
  • 再说一次,我对一般的编码很陌生,虽然这本身就是家庭作业,但它不是为了成绩或任何类似的事情。这只是我的导师额外分配的东西(做一个在线训练营),直到星期五我才有机会再次见到他,所以我希望在此期间有人能帮助我,这样我就可以进入实际课程.我和他们在一起的时间非常有限,所以我认为这是一个寻求帮助的好地方。对不起,如果我不这样做的话。

标签: ruby oop


【解决方案1】:
class Player
  attr_accessor :name, :cards
  def initialize(name)
    @name = name
    @cards = []
  end
end

class HoldEmPoker
  def cards_per_player
    2
  end
end

class Dealer
  def initialize(deck, game)
    @deck = deck
    @game = game
  end

  def deal_to(player)
    @game.cards_per_player.times do 
      player.cards << @deck.deal
    end
  end
end


p1 = Player.new("Negreanu")
p2 = Player.new("Ivey")
p3 = Player.new("Hellmuth")
players = [p1, p2, p3]
deck = Deck.new
deck.shuffle
game = HoldEmPoker.new
dealer = Dealer.new(deck, game)
players.each { |p| dealer.deal_to(p) }
p1.cards #=> an array with two Card objects

如果需要,您可以在 Dealer 类中添加 deal 方法

def deal(players)
  players.each do |player|
    @game.cards_per_player.times do 
      player.cards << @deck.deal
    end
  end
end

players = [...]
dealer.deal(players)

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2021-02-07
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多