# Copyright 2006 Michael Lewis # Distributed under the terms of the GNU General Public License v2 require "Hand" class Deck # Pass it -1 to have an infinite sized deck def initialize( nDecks ) @nDecks = nDecks @deck = Array.new @usedDeck = Array.new ( nDecks == -1 ? 1 : nDecks * 4 ).times do @deck << 11 4.times { @deck << 10 } (2..9).each { |value| @deck << value } end end def to_s @deck.join ", " end def shuffle if !( @nDecks == -1 ) @deck = @deck + @usedDeck @usedDeck.clear newDeck = Array.new while !@deck.empty? newDeck << @deck.slice!( rand( @deck.length ) ) end @deck = newDeck end return end def deal( hand ) if @nDecks == -1 hand.add_card @deck[ rand( 13 ) ] else hand.add_card @deck.pop end return end def reclaim_cards( hand ) if !( @nDecks == -1 ) @usedDeck = @usedDeck + hand end hand.clear return end def cards_left if @nDecks == -1 return 9999 else return @deck.length end end end