【发布时间】:2014-03-09 04:37:09
【问题描述】:
所以我没有要求任何人为我解决这个问题,但我确实需要一些帮助。我对面向对象编程很陌生,但它开始对我有意义。以下是迄今为止我为战争纸牌游戏所拥有的代码。目前我并不关心套装,尽管我知道如果需要的话如何添加它们。基本上,我的下一步是弄清楚如何向每个玩家发 26 张牌。
这段代码现在所做的是使用 Fisher-Yates 算法对牌组进行洗牌,并输出一个包含现在洗牌的牌组的字符串。我认为这会返回一个数组,因为我使用的是“to_a”方法,但我不认为是这样。
然后我如何将这套牌发给每个玩家?我需要牌桌或球员的班级吗?任何朝着正确方向的帮助都会很棒。再次,请不要为我解决它。我想尽可能地为自己解决这个问题。 编辑:使用 1.9.3,如果有用的话。
class Card
VALUE = %w(2 3 4 5 6 7 8 9 10 J Q K A)
attr_accessor :rank
def initialize(id)
self.rank = VALUE[id % 13]
end
end
class Deck
attr_accessor :cards
def initialize
self.cards = (0..51).to_a.shuffle.collect { |id| Card.new(id) }
end
end
class Array
def shuffle!
each_index do |i|
r = rand(length-i) + i
self[r], self[i] = self[i], self[r]
end
end
def shuffle
dup.shuffle!
end
end
d = Deck.new
d.cards.each do |card|
print "#{card.rank} "
end
【问题讨论】: