我无法让这个工作.我得到的错误是:
114''numberstash':未定义方法'cards'代表nil: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
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么我得到上述错误?
你使用的二十一点中的任何地方player,你的意思是@player,例如Blackjack#initialize:
@player = Player.new()
Run Code Online (Sandbox Code Playgroud)
并且Blackjack#numberstash:
puts @player.cards
Run Code Online (Sandbox Code Playgroud)
@识别实例变量,访问的事物种类attr_accessor.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |