# $Id: boarddata.pir 38115 2009-04-15 14:41:32Z fperrad $ =head1 TITLE boarddata.pir - a tetris board data class =head1 SYNOPSIS # create the board data data = new "BoardData" data."new"( 10, 20 ) # fill the board data."fill"( 0 ) =head1 CLASS INFORMATION This is the base class of the Board class. =cut .namespace ["Tetris::BoardData"] .sub __onload :load $P0 = get_class "Tetris::BoardData" unless null $P0 goto END newclass $P0, "Tetris::BoardData" addattribute $P0, "data" addattribute $P0, "width" addattribute $P0, "height" END: .end =head1 FUNCTIONS =over 4 =item data = data."init"( width, height ) Initializes the BoardData object. =over 4 =item parameter C<width> The width of the board to create. =item parameter C<height> The height of the board to create. =back Returns the created data object. =cut .sub init :method .param int w .param int h .local pmc data .local pmc temp .local int i # create the data array new data, 'ResizablePMCArray' setattribute self, 'data', data # calculate the array size set i, w mul i, h # resize the array set data, i # store the width new temp, 'Integer' set temp, w setattribute self, 'width', temp # store the height new temp, 'Integer' set temp, h setattribute self, 'height', temp .end =back =head1 METHODS =over 4 =item data."fill"( val ) Fill the data array with the specified value =over 4 =item parameter C<val> The value the board will be filled with. =back This method returns nothing. =cut .sub fill :method .param int val .local pmc data .local int i getattribute data, self, 'data' # get data size set i, data # fill the data WHILE: dec i if i < 0 goto END set data[i], val branch WHILE END: .end .sub __get_integer :method getattribute $P0, self, 'data' $I0 = $P0 .return ($I0) .end .sub __get_integer_keyed :method .param pmc key getattribute $P0, self, 'data' $I0 = key $I1 = $P0 if $I0 < $I1 goto OK print "error: out of bounds (" print $I0 print "; " print $I1 print ")!\n" sleep 0.1 OK: $I0 = $P0[$I0] .return ($I0) .end .sub __set_integer_keyed :method .param pmc key .param int val getattribute $P0, self, 'data' $P0[key] = val .end .sub __set_integer_native :method .param int val getattribute $P0, self, 'data' $P0 = val .end .sub __push_integer :method .param int val getattribute $P0, self, 'data' push $P0, val .end =item width = data."width"( self ) Returns the width (number of blocks in one row) of the board. =cut .sub width :method getattribute $P0, self, 'width' $I0 = $P0 .return ($I0) .end =item height = data."height"() Returns the height (number of blocks in one column) of the board. =cut .sub height :method getattribute $P0, self, 'height' $I0 = $P0 .return ($I0) .end =item (width, height) = data."dimensions"() Returns the width and height of the board. =cut .sub dimensions :method .local int w .local int h .local pmc temp getattribute $P0, self, 'width' w = $P0 getattribute $P0, self, 'height' h = $P0 .return (w, h) .end =back =head1 AUTHOR Jens Rieks E<lt>parrot at jensbeimsurfen dot deE<gt> is the author and maintainer. Please send patches and suggestions to the Perl 6 Internals mailing list. =head1 COPYRIGHT Copyright (C) 2004-2008, Parrot Foundation. =cut # Local Variables: # mode: pir # fill-column: 100 # End: # vim: expandtab shiftwidth=4 ft=pir: