我(想)当我希望我的阵列只有2个可用属性时,我会返回对象

时间:2013-07-17 00:52:17

标签: ruby oop blackjack

提出问题可能是最糟糕的方式,但我是新手,并尽力解释我的问题。

我正在实施Ruby Blackjack游戏。你可以看到我在这里的回购/来源:https://bitbucket.org/subem81/blackjack

这是关注的特定部分(保存在“Hand”模块中,使用我认为的mixins包含在Dealer和Player类中):

def show_hand
    if self.class.to_s == 'Dealer'
        self.hand.each do |card|
            card.show_card
        end
    elsif self.class.to_s == 'Player'

    else
        puts "A Random person is showing their hand."
    end

end

为每个Card对象调用show_card()方法。或者我想。我一直在卡对象上没有方法错误。这是错误:

$ ruby blackjack.rb
Welcome to Mike's Blackjack.
blackjack.rb:35:in `block in show_hand': undefined method `show_card' for 
[# <Card:0x007fe504110918 @suit="Spades", @card_type="King">]:Array (NoMethodError)
from blackjack.rb:34:in `each'
from blackjack.rb:34:in `show_hand'
from blackjack.rb:21:in `setup_players'
from blackjack.rb:6:in `initialize'
from blackjack.rb:116:in `new'
from blackjack.rb:116:in `<main>'

1 个答案:

答案 0 :(得分:3)

在Deck.give_card中,您将通过带有参数的pop返回cards_sent。这将返回一个数组。因此,经销商和玩家手中将是一系列卡片。 (不带参数的pop返回单个项目。)

从你的错误:

  

未定义方法`show_card'[#]:数组

您可以更改:

            @dealer.hand << @deck.give_card
            @player.hand << @deck.give_card
            @dealer.hand << @deck.give_card
            @player.hand << @deck.give_card

为:

            @dealer.hand += @deck.give_card
            @player.hand += @deck.give_card
            @dealer.hand += @deck.give_card
            @player.hand += @deck.give_card

或者将您的give_card重命名为give_cards并添加新的give_card:

    def give_card
      @cards.pop
    end