File Coverage

blib/lib/Game/Cribbage/Deck.pm
Criterion Covered Total %
statement 18 18 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 24 24 100.0


line stmt bran cond sub pod time code
1             package Game::Cribbage::Deck;
2              
3 7     7   148517 use strict;
  7         18  
  7         296  
4 7     7   41 use warnings;
  7         19  
  7         488  
5              
6 7     7   693 use Rope;
  7         13881  
  7         47  
7 7     7   4839 use Rope::Autoload;
  7         3735  
  7         59  
8 7     7   742 use List::Util qw//;
  7         27  
  7         217  
9 7     7   2178 use Game::Cribbage::Deck::Card;
  7         19  
  7         5505  
10              
11             property deck => (
12             initable => 1,
13             writeable => 1,
14             configurable => 0,
15             enumerable => 1,
16             );
17              
18             function cards => sub {
19             return $_[0]->deck;
20             };
21              
22             function INITIALISED => sub {
23             return $_[0]->reset();
24             };
25              
26             function reset => sub {
27             $_[0]->shuffle();
28             $_[0];
29             };
30              
31             function shuffle => sub {
32             my $i = 0;
33             my @DECK;
34             for my $suit (qw/H S D C/) {
35             for ('A', 2 .. 10, 'J', 'Q', 'K') {
36             $i++;
37             push @DECK,
38             Game::Cribbage::Deck::Card->new(
39             suit => $suit,
40             symbol => $_,
41             id => $i
42             );
43             }
44             }
45             $_[0]->deck = [List::Util::shuffle @DECK];
46             $_[0];
47             };
48              
49             function draw => sub {
50             shift @{$_[0]->deck}
51             };
52              
53             function force_draw => sub {
54             my ($self, $card) = @_;
55            
56             my $i = 0;
57             for (@{$self->deck}) {
58             if ($_->suit eq $card->{suit} && $_->symbol =~ m/^$card->{symbol}$/) {
59             last;
60             } else {
61             $i++;
62             }
63             }
64              
65             my $force = splice @{$self->deck}, $i, 1;
66              
67             #if ($card->{used}) {
68             # $force->used = 1;
69             #}
70              
71             return $force;
72             };
73              
74             function get => sub {
75             $_[0]->deck->[$_[1]];
76             };
77              
78             function card_exists => sub {
79             my ($self, $card) = @_;
80              
81             for (@{$self->deck}) {
82             if ($_->suit eq $card->{suit} && $_->symbol =~ m/^$card->{symbol}$/) {
83             return 1;
84             }
85             }
86              
87             return 0;
88             };
89              
90             function generate_card => sub {
91             return Game::Cribbage::Deck::Card->new(
92             %{ $_[1] }
93             );
94             };
95              
96             1;
97              
98             __END__