Jeff Goff > Games-Shogi-0.03 > Window

Download:
Games-Shogi-0.03.tar.gz

Dependencies

Annotate this POD

CPAN RT

New  2
Open  0
View/Report Bugs
Module Version: 0.01   Source  

NAME ^

Window - Create a virtual window into a MxN grid of data.

SYNOPSIS ^

  use Window;
  my $vp = Window->new(
   viewport => [3,3], # Define a 3x3 window onto a chessboard
   grid     => [ [qw(R N B K Q B N R)], # Pieces represented as text
                 [qw(P P P P P P P P)],
                 [(undef) x 8], # And blank squares as undef
                 [(undef) x 8], 
                 [(undef) x 8],
                 [(undef) x 8],
                 [qw(p p p p p p p p)],
                 [qw(r n b q k b n r)] ] );
  print $vp->square(0,0); # 'R' is the TR square in the viewport
  $vp->down;
  $vp->right;
  print $vp->square(0,0); # 'P' is now the TR square after moving down and right
  $vp->set_square(0,0,' ');$vp->set_square(0,1,'P'); # Move the pawn

DESCRIPTION ^

Given a two-D array of data, this module creates a smaller window onto the dataset that can be moved around with left(), down() &c methods. Use the square($x,$y) method to get the data in a square relative to the upper-left corner of the window, and view() to get the entire window's worth of data.

In addition, you can place a virtual cursor within the window, and use the curs_left(), curs_down() &c methods to move that cursor within the window. When the cursor reaches a boundary, the window moves, not the cursor.

The left(), right(), up() and down() routines return whether the window was moved or not. The only time the window can't be moved is when it's against a border.

curs_right() &c likewise signal if the window couldn't be moved. The data grid doesn't wrap around, as it doesn't really make sense to wrap around a chessboard.

SEE ALSO ^

perl(1)

AUTHOR ^

Jeffrey Goff, <jgoff@cpan.org>

COPYRIGHT AND LICENSE ^

Copyright 2004 by Jeffrey Goff

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: