File Coverage

blib/lib/Game/Cribbage/Deck.pm
Criterion Covered Total %
statement 49 49 100.0
branch 6 6 100.0
condition 6 6 100.0
subroutine 14 14 100.0
pod 8 9 88.8
total 83 84 98.8


line stmt bran cond sub pod time code
1             package Game::Cribbage::Deck;
2              
3 11     11   163321 use strict;
  11         14  
  11         339  
4 11     11   38 use warnings;
  11         20  
  11         564  
5              
6 11     11   912 use Object::Proto::Sugar -types;
  11         23193  
  11         81  
7 11     11   8275 use List::Util qw//;
  11         16  
  11         235  
8 11     11   3124 use Game::Cribbage::Deck::Card;
  11         73  
  11         528  
9              
10             has deck => (
11             is => 'rw',
12             isa => ArrayRef,
13             default => []
14             );
15              
16              
17             sub BUILD {
18 40     40 0 281664 return $_[0]->reset();
19             }
20              
21             sub cards {
22 2     2 1 14 return $_[0]->deck;
23             }
24              
25             sub reset {
26 43     43 1 1500 $_[0]->shuffle();
27 43         118 $_[0];
28             }
29              
30             sub shuffle {
31 85     85 1 952 my $i = 0;
32 85         97 my @DECK;
33 85         121 for my $suit (qw/H S D C/) {
34 340         415 for ('A', 2 .. 10, 'J', 'Q', 'K') {
35 4420         3893 $i++;
36 4420         9937 push @DECK,
37             Game::Cribbage::Deck::Card->new(
38             suit => $suit,
39             symbol => $_,
40             id => $i
41             );
42             }
43             }
44 85         1652 $_[0]->deck([List::Util::shuffle @DECK]);
45 85         223 $_[0];
46             }
47              
48             sub draw {
49 31     31 1 1718 shift @{$_[0]->deck}
  31         64  
50             }
51              
52             sub force_draw {
53 2     2 1 581 my ($self, $card) = @_;
54            
55 2         3 my $i = 0;
56 2         4 for (@{$self->deck}) {
  2         6  
57 55 100 100     134 if ($_->suit eq $card->{suit} && $_->symbol =~ m/^$card->{symbol}$/) {
58 2         9 last;
59             } else {
60 53         65 $i++;
61             }
62             }
63              
64 2         4 my $force = splice @{$self->deck}, $i, 1;
  2         6  
65              
66             #if ($card->{used}) {
67             # $force->used = 1;
68             #}
69              
70 2         6 return $force;
71             }
72              
73             sub get {
74 1     1 1 1453 $_[0]->deck->[$_[1]];
75             }
76              
77             sub card_exists {
78 3     3 1 1654 my ($self, $card) = @_;
79              
80             my ($suit, $sym) = ref($card) eq 'HASH'
81             ? ($card->{suit}, $card->{symbol})
82 3 100       15 : ($card->suit, $card->symbol);
83 3         4 for (@{$self->deck}) {
  3         8  
84 104 100 100     250 if ($_->suit eq $suit && $_->symbol =~ m/^$sym$/) {
85 2         7 return 1;
86             }
87             }
88              
89 1         3 return 0;
90             }
91              
92             sub generate_card {
93             return Game::Cribbage::Deck::Card->new(
94 1     1 1 2 %{ $_[1] }
  1         10  
95             );
96             }
97              
98             1;
99              
100             __END__