您可以使用0到51之间的数字来轻松确保唯一的卡。
该
Array#shuffle方法基于Knuth-Fisher-
Yates混洗算法。http://en.wikipedia.org/wiki/Fisher–Yates_shuffle
测试class Card RANKS = %w(2 3 4 5 6 7 8 9 10 J Q K A) SUITS = %w(Spade Heart Club Diamond) attr_accessor :rank, :suit def initialize(id) self.rank = RANKS[id % 13] self.suit = SUITS[id % 4] endendclass Deck attr_accessor :cards def initialize # shuffle array and init each Card self.cards = (0..51).to_a.shuffle.collect { |id| Card.new(id) } endend# people with Ruby 1.9 (or 1.8.7 with backports) can safely ignore this duck punchclass Array # knuth-fisher-yates shuffle algorithm def shuffle! n = length for i in 0...n r = rand(n-i)+i self[r], self[i] = self[i], self[r] end self end def shuffle dup.shuffle! endend
输出d = Deck.newd.cards.each do |card| puts "#{card.rank} #{card.suit}"end
6 Spade5 Heart2 Heart8 Heart8 Diamond7 ClubJ Diamond4 ClubK Spade5 DiamondJ Heart8 Spade10 Club4 Diamond9 Heart7 Diamond3 DiamondK Diamond7 SpadeQ Diamond9 Diamond6 HeartA Heart9 ClubA Spade5 ClubJ ClubQ Spade2 Club2 SpadeQ HeartA Diamond10 Spade10 DiamondQ Club3 ClubA ClubK Club6 Club10 Heart2 Diamond3 SpadeK Heart5 Spade9 Spade7 Heart4 SpadeJ Spade3 Heart4 Heart8 Club6 Diamond
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)