我正在尝试进行二十一点模拟,下面是代码......
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:#(root)at的未定义方法`hit' C:\ Users \用户恩斯特\文件\ JRuby的\ blackjack.rb:30
我做错了什么?该方法在类中定义。
答案 0 :(得分:2)
hit是一种类方法。
如何用对象调用它?
当您编写 self .method时,它被定义为类方法。
仅编写对象或实例方法
使用def method
.. end
在你的情况下
def hit
## remove `self` identifier from the attributes.
## e.g. ace_count += 1;
end
如果要调用类方法,可以使用
Player.hit
和不 player_obj.hit
但我想你需要调用对象/实例方法,你可以通过删除self
标识符来做。