0) { // Get the next arg, which may be a coord or an array. $arg = array_shift($args); if(is_array($arg)) // If head is an array, flatten. $args = array_merge($arg, $args); else // Not an array, just add to our list. $coords[] = $arg; } // Set the points. $ct = 2*(int)(count($coords)/2); for($i = 0; $i < $ct; $i += 2) { $x = $coords[$i]; $y = $coords[$i + 1]; if(0 <= $x && $x < $this->width && 0 <= $y && $y < $this->height) $this->points["$x,$y"] = $setto; } } // Set a list of points. function set() { $pts = func_get_args(); $this->set_items(1, $pts); } // Clear a list of points. function clear() { $pts = func_get_args(); $this->set_items(0, $pts); } // Construct of a given size, with optional extra points. function __construct($x, $y) { // Set up internal variables. $this->width = $x; $this->height = $y; $this->points = array(); // Apply any additional points. $pts = func_get_args(); array_shift($pts); array_shift($pts); $this->set_items(1, $pts); } // Generate the grid as a table. function gen($tab = "", $td = "") { $dot = ''; $blank = ''; echo "\n"; for($r = 0; $r < $this->height; ++$r) { print ""; for($c = 0; $c < $this->width; ++$c) if($this->points["$c,$r"] == 1) echo ""; else echo ""; print "\n"; } print "
$dot$blank
"; } // Append another grid to the right of this one. The height of // the result will be the maximum of the two input heights. function append($og) { // Fix up the dimensions. $oldwidth = $this->width; $this->width += $og->width; if($this->height < $og->height) $this->height = $og->height; // Add the points. foreach(array_keys($og->points) as $pt) { if($og->points[$pt] != 1) continue; list($x, $y) = explode(',', $pt); $this->set($x + $oldwidth, $y); } } } // Classes to represent the digits in dot grids. class zero_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 4,1, 0,2, 4,2, 0,3, 4,3, 0,4, 4,4, 1,5, 2,5, 3,5); } } class one_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 2,1, 2,2, 2,3, 2,4, 1,5, 2,5, 3,5); } } class two_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 4,1, 3,2, 2,3, 1,4, 0,5, 1,5, 2,5, 3,5, 4,5); } } class three_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 4,1, 2,2, 3,2, 4,3, 0,4, 4,4, 1,5, 2,5, 3,5); } } class four_grid extends point_grid { function __construct() { parent::__construct(5, 6, 0,0, 4,0, 0,1, 4,1, 0,2, 4,2, 0,3, 1,3, 2,3, 3,3, 4,3, 4,3, 4,4, 4,5); } } class five_grid extends point_grid { function __construct() { parent::__construct(5, 6, 0,0, 1,0, 2,0, 3,0, 4,0, 0,1, 0,2, 1,2, 2,2, 3,2, 4,3, 0,4, 4,4, 1,5, 2,5, 3,5); } } class six_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 0,2, 1,2, 2,2, 3,2, 0,3, 4,3, 0,4, 4,4, 1,5, 2,5, 3,5); } } class seven_grid extends point_grid { function __construct() { parent::__construct(5, 6, 0,0, 1,0, 2,0, 3,0, 4,0, 4,1, 4,2, 3,3, 2,4, 2,5); } } class eight_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 4,1, 1,2, 2,2, 3,2, 0,3, 4,3, 0,4, 4,4, 1,5, 2,5, 3,5); } } class nine_grid extends point_grid { function __construct() { parent::__construct(5, 6, 1,0, 2,0, 3,0, 0,1, 4,1, 1,2, 2,2, 3,2, 4,2, 4,3, 4,4, 1,5, 2,5, 3,5); } } // A grid to represent a number class grid_number extends point_grid { // Returns the grid for the digit. function dig_grid($digit) { switch($digit) { case '0': return new zero_grid(); case '1': return new one_grid(); case '2': return new two_grid(); case '3': return new three_grid(); case '4': return new four_grid(); case '5': return new five_grid(); case '6': return new six_grid(); case '7': return new seven_grid(); case '8': return new eight_grid(); case '9': return new nine_grid(); default: // Bad digit --- blanks. return new point_grid(5, 6); } } // Construct the grid showing the number. function __construct($num) { // Separator. $sep = new point_grid(1, 1); // First digit. parent::__construct(0,0); $this->append($this->dig_grid($num[0])); // Other digits (with separator). $len = strlen($num); for($i = 1; $i < $len; ++$i) { $this->append($sep); $this->append($this->dig_grid($num[$i])); } } } ?>