use v6; use strict; use Blackjack::Card; class Blackjack::Deck { has @.ranks = [ flat < A J Q K >, 2..10 ]; has @.suits = < Hearts Spades Diamonds Clubs >; has %.suit_color = flat self.suits Z flat < red black magenta blue >; has @.cards; method shuffle() { for self.ranks -> $rank { my $val = 10; if $rank ~~ /\d+/ { $val = $rank.Int(); } elsif $rank eq "A" { $val = 1|11; } for self.suits -> $suit { self.cards.push( Blackjack::Card.new(:$rank, :$suit, :$val, suit_color => self.suit_color{ $suit } )); } } self.cards = self.cards.pick( * ); } method pick() { if self.cards.elems == 0 { self.shuffle; } return self.cards.shift; } }