我无法让这个工作。我得到的错误是:
114 in'numbertash':nil的未定义方法'cards':Nilclass(无方法错误)。
这是一个二十一点游戏。我花了几个小时试图修复这段代码,包括制作一堆测试脚本来解决这个问题。但是,我没有运气。这适用于我的测试脚本,但它不适用于当前脚本:
class Card
attr_accessor :suit, :value
def initialize(suit, value)
@suit = suit
@value = value
end
def to_s
"#{value} of #{suit}"
end
end
class Deck
attr_accessor :cards
def initialize(number_of_decks)
@cards = []
num = number_of_decks
counter = 0
while counter < num
['H','C', 'S', 'D'].product(['2','3','4','5','6','7','8','9','10','J','K','Q','A']).each do |arr|
@cards << Card.new(arr[0], arr[1])
end
counter += 1
end
end
end
class Player
attr_accessor :cards, :testvalue
def initialize
@cards = []
end
end
class Dealer
attr_accessor :cards
@cards = []
end
class Blackjack
attr_accessor :deck, :player, :dealer
def calculate arr
new = arr.map { |e| e[1] }
sum = 0
ace = 0
new.each { |value|
if value == 'A'
sum += 1
ace = 1
elsif value.to_i == 0
sum += 10
else
sum += value.to_i
end
}
if ace = 1 && sum + 10 <= 21
ace = 0
sum = sum + 10
end
end
def initialize
deck = Deck.new(4)
#@deck = @deck.shuffle
player = Player.new()
dealer = Dealer.new()
end
def dealcards
#puts 'dealcards'
#player.cards << deck.cards.pop
#dealer.cards << deck.cards.pop
end
def start
#dealcards
#player_turn
#dealer_turn
#compare?
#play again?
numberstash
end
def numberstash
#player.cards << deck.cards.pop
puts player.cards
#dealer.cards << deck.cards.pop
end
end
game = Blackjack.new()
game.start
我的问题是,为什么我会收到上述错误?
答案 0 :(得分:5)
您使用player
的二十一点中的任何地方,您的意思是@player
,例如在Blackjack#initialize
中:
@player = Player.new()
和Blackjack#numberstash
:
puts @player.cards
@
标识实例变量,attr_accessor
访问的事物种类。