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   157574 use strict;
  11         16  
  11         379  
4 11     11   39 use warnings;
  11         22  
  11         530  
5              
6 11     11   881 use Object::Proto::Sugar -types;
  11         22818  
  11         61  
7 11     11   8621 use List::Util qw//;
  11         31  
  11         215  
8 11     11   3221 use Game::Cribbage::Deck::Card;
  11         72  
  11         482  
9              
10             has deck => (
11             is => 'rw',
12             isa => ArrayRef,
13             default => []
14             );
15              
16              
17             sub BUILD {
18 40     40 0 276996 return $_[0]->reset();
19             }
20              
21             sub cards {
22 2     2 1 15 return $_[0]->deck;
23             }
24              
25             sub reset {
26 43     43 1 1446 $_[0]->shuffle();
27 43         113 $_[0];
28             }
29              
30             sub shuffle {
31 85     85 1 914 my $i = 0;
32 85         90 my @DECK;
33 85         126 for my $suit (qw/H S D C/) {
34 340         396 for ('A', 2 .. 10, 'J', 'Q', 'K') {
35 4420         3796 $i++;
36 4420         10098 push @DECK,
37             Game::Cribbage::Deck::Card->new(
38             suit => $suit,
39             symbol => $_,
40             id => $i
41             );
42             }
43             }
44 85         1538 $_[0]->deck([List::Util::shuffle @DECK]);
45 85         224 $_[0];
46             }
47              
48             sub draw {
49 31     31 1 1670 shift @{$_[0]->deck}
  31         65  
50             }
51              
52             sub force_draw {
53 2     2 1 596 my ($self, $card) = @_;
54            
55 2         4 my $i = 0;
56 2         4 for (@{$self->deck}) {
  2         5  
57 28 100 100     86 if ($_->suit eq $card->{suit} && $_->symbol =~ m/^$card->{symbol}$/) {
58 2         4 last;
59             } else {
60 26         29 $i++;
61             }
62             }
63              
64 2         3 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 1422 $_[0]->deck->[$_[1]];
75             }
76              
77             sub card_exists {
78 3     3 1 1744 my ($self, $card) = @_;
79              
80             my ($suit, $sym) = ref($card) eq 'HASH'
81             ? ($card->{suit}, $card->{symbol})
82 3 100       17 : ($card->suit, $card->symbol);
83 3         4 for (@{$self->deck}) {
  3         7  
84 116 100 100     323 if ($_->suit eq $suit && $_->symbol =~ m/^$sym$/) {
85 2         12 return 1;
86             }
87             }
88              
89 1         5 return 0;
90             }
91              
92             sub generate_card {
93             return Game::Cribbage::Deck::Card->new(
94 1     1 1 2 %{ $_[1] }
  1         8  
95             );
96             }
97              
98             1;
99              
100             __END__