#!/usr/bin/perl -w use strict; use SVG; my $columns=4; my $rows=4; my $size=4; # create an SVG object my $svg= SVG->new(width=>(($columns*400+100)/$size),height=>(($rows*400+100)/$size)); my $ratio = 1/$size; our $scale = $svg->group( transform => "scale($ratio)" ); sub box { my ($random_value, $x, $y)= @_; my $center = int(($random_value % 4))+1; my $corner = int(($random_value % (52*4))/4)+1; my $edge = int($random_value/(52*4))+1; my $temp; my $tile = $scale->group( transform => "translate($x,$y)" ); $tile->use('-href'=>"tiles.svg#t$center"); $temp = $tile->group(); $temp->use('-href'=>"tiles.svg#t$edge",transform=>"translate(0,-100)"); $temp->use('-href'=>"tiles.svg#t$corner",transform=>"translate(-100,-100)"); $temp = $tile->group(transform => 'rotate(90)' ); $temp->use('-href'=>"tiles.svg#t$edge",transform=>"translate(0,-100)"); $temp->use('-href'=>"tiles.svg#t$corner",transform=>"translate(-100,-100)"); $temp = $tile->group(transform => 'rotate(180)' ); $temp->use('-href'=>"tiles.svg#t$edge",transform=>"translate(0,-100)"); $temp->use('-href'=>"tiles.svg#t$corner",transform=>"translate(-100,-100)"); $temp = $tile->group(transform => 'rotate(270)' ); $temp->use('-href'=>"tiles.svg#t$edge",transform=>"translate(0,-100)"); $temp->use('-href'=>"tiles.svg#t$corner",transform=>"translate(-100,-100)"); } my $x; my $y; my $random_value; my %seen; for ($x=0; $x<$columns; $x++) { for ($y=0; $y<$rows; $y++) { do { $random_value = int(rand(52*52*4)); } while (exists $seen{ $random_value }); $seen{$random_value} = "X"; box($random_value,$x*400+250,$y*400+250); } } my $out = $svg->xmlify; print $out;