2012-10-04 108 views
-1

我试图做一个酒杯仿真,下面是代码...NoMethodError:未定义的方法“打”为

one_suit = [2,3,4,5,6,7,8,9,10,10,10,10,11]; #the value of the cards for blackjack 
full_deck = one_suit*4; #clubs, diamonds, hearts and spades 
$deck = full_deck; #start off the game with a full deck 

class Player 
    attr_accessor :ace_count 
    attr_accessor :hand_value 

    def initialize(ace_count,hand_value) 
    @ace_count = ace_count; 
    @hand_value = hand_value; 
    end 

    def self.hit 
    choice_of_card = rand($deck.length); #choose a random card out of the deck 
    drawn_card = $deck[choice_of_card]; #draw that random card from the deck 
    if drawn_card != 0 #if there is a card there 
    $deck[choice_of_card] = 0; #remove that card from the deck by making the space blank 
    if drawn_card == 11 #if you draw an ace 
     self.ace_count += 1; 
    end 
    self.hand_value += drawn_card ; 
    else hit; #if there is no card at that space then redraw (recursion) 
    end 
    end 

end 

player1 = Player.new(0,0); 
player1.hit; 

然而,当我运行它,我得到以下的输出:

NoMethodError: undefined method `hit' for # (root) at C:\Users\Ernst\Documents\JRuby\blackjack.rb:30

我在做什么错?该方法在类中定义。

回答

2

命中是一个类的方法。

如何用对象调用它?

当您编写self。方法时,它被定义为一个类方法。

要写入对象或实例方法只是

使用def method .. end

你的情况

def hit 
## remove `self` identifier from the attributes. 
## e.g. ace_count += 1; 
end 

如果你想调用类的方法,你可以使用

Player.hit不是player_obj.hit

但我想你的需要是调用对象/实例方法,你可以通过删除self标识符来完成。

+0

非常感谢! –

+0

希望你明白这个错误。 –

相关问题