| Games-Solitaire-Verify documentation | Contained in the Games-Solitaire-Verify distribution. |
Games::Solitaire::Verify::Column - a class wrapper for Solitaire columns that are composed of a sequence of cards.
Version 0.0101
use Games::Solitaire::Verify::Column;
# Initialise a column
my $column = Games::Solitaire::Verify::Column->new(
{
string => ": KH QS 5C",
},
);
# Prints 3
print $column->len();
my $queen_card = $column->pos(1);
Returns an integer representing the number of cards in the column.
Returns the card (a Games::Solitaire::Verify::Card object) at position $idx in Column. $idx starts at 0.
Returns the top card.
Returns a clone of the column.
Appends the column $column_with_more_cards to $base_column .
Appends a single card to the top of the column.
Pops a card from the top of the column and returns it.
Converts to a string.
Shlomi Fish, <shlomif at iglu.org.il>
Please report any bugs or feature requests to bug-games-solitaire-verifysolution-move at rt.cpan.org, or through
the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Games-Solitaire-Verify. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Games::Solitaire::Verify::Column
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Games-Solitaire-Verify
Copyright 2008 Shlomi Fish.
This program is released under the following license: MIT/X11 ( http://www.opensource.org/licenses/mit-license.php ).
| Games-Solitaire-Verify documentation | Contained in the Games-Solitaire-Verify distribution. |
package Games::Solitaire::Verify::Column; use warnings; use strict;
our $VERSION = '0.0901'; use base 'Games::Solitaire::Verify::Base'; use Games::Solitaire::Verify::Exception; use Games::Solitaire::Verify::Card; __PACKAGE__->mk_acc_ref([qw( _cards )]);
sub _card_num_normalize { my $arg = shift; if (ref($arg) eq "") { return +{ map { $_ => $arg } (qw(t non_t)) }; } else { return $arg } } sub _from_string { my ($self, $str) = @_; if ($str !~ s{\A:(?: )?}{}) { Games::Solitaire::Verify::Exception::Parse::Column::Prefix->throw( error => "String does not start with \": \"", ); } # Ignore trailing whitespace, so we don't have -1. my @cards = split(/ +/, $str); $self->_cards( [ map { Games::Solitaire::Verify::Card->new( {string => $_ } ) } @cards ] ); return; } sub _init { my ($self, $args) = @_; if (exists($args->{string})) { return $self->_from_string($args->{string}); } elsif (exists($args->{cards})) { $self->_cards($args->{cards}); return; } else { die "Cannot init - no 'string' or 'cards' specified." } }
sub len { my $self = shift; return scalar(@{$self->_cards()}); }
sub pos { my $self = shift; my $idx = shift; return $self->_cards->[$idx]; }
sub top { my $self = shift; return $self->pos(-1); }
sub clone { my $self = shift; my $new_col = Games::Solitaire::Verify::Column->new( { cards => [ map { $_->clone() } @{$self->_cards()} ], } ); return $new_col; }
sub append { my ($self, $more_cards) = @_; my $more_copy = $more_cards->clone(); push @{$self->_cards()}, @{$more_copy->_cards()}; }
sub push { my ($self, $card) = @_; push @{$self->_cards()}, $card; }
sub pop { my $self = shift; return pop(@{$self->_cards()}); }
sub to_string { my $self = shift; return ":" . ($self->len() ? $self->_non_zero_cards_string() : " " # We need the single trailing space for # Freecell Solver compatibility ); } sub _non_zero_cards_string { my $self = shift; return join("", (map { " " . $self->pos($_)->to_string() } (0 .. ($self->len()-1)) ) ); }
1; # End of Games::Solitaire::Verify::Move