use strict; use Tk; use Tk::Button; use Tk::Canvas; use Tk::Photo; use Tk::Splashscreen; #use fileoprn; require Tk::Splash; ##################### my @filearray; opendir( DIR, 'images' ) or die "Can't open images DIR $!"; while ( my $entry = readdir( DIR ) ) { my $type = ( -d "images\\$entry" ) ? "dir" : "file"; push @filearray, "images\\$entry" if (($type eq "file") && ($entry =~ /\.gif$/)); #print "$type\t$entry\t@filearray\n"; } closedir( DIR ); @filearray = (@filearray,@filearray); #################### fisher_yates_shuffle(\@filearray); unshift @filearray, "NIL"; #foreach (@filearray) {print $_,"\n";}; my @arranged_gifs; my $top = new MainWindow(); my $loop_cntr=0; my $state_of_button=-1; my $prev_x = undef; my $prev_y = undef; my $number_of_clicks=0; my $prev_clicked_button=undef; my $button_width= 10; my $button_height= 3; foreach my $x (1..10) { for my $y (1..7) { $loop_cntr++; $arranged_gifs[$x][$y]= $filearray[$loop_cntr]; #print "$loop_cntr:$x:$y:-".$arranged_gifs[$x][$y]."\t".$filearray[$loop_cntr]."\n"; my $button = $top->Button(-width => $button_width,-background=>'yellow', -height =>$button_height,-command=>sub{click_button($x,$y,\$top->gridSlaves(-row=>$x,-column=>$y), \$prev_clicked_button)}); $button->configure(-text=>'Hey'); $button->grid(-row =>$x , -column =>$y); } } sub click_button($$$){ my ($myx,$myy,$clicked_button,$prev_clicked_button)=@_; if (!${$clicked_button}->cget(-image)) { $number_of_clicks++; my $mywait; my $image = $top->Photo(-format => 'gif' , -file=>$arranged_gifs[$myx][$myy]); ${$clicked_button}->configure(-width => 50, -height =>40, -image=>$image); if ($number_of_clicks == 1) { print "Hello\n"; ${$prev_clicked_button} = ${$clicked_button}; } if ($number_of_clicks == 2) { print "pair\n"; #sleep(2); $number_of_clicks=0; print "#".$arranged_gifs[$myx][$myy]."#". $arranged_gifs[$prev_x][$prev_y]."\n"; if ($arranged_gifs[$myx][$myy] ne $arranged_gifs[$prev_x][$prev_y]) { ${$prev_clicked_button} -> after (250, [\&hide, ${$prev_clicked_button} ]); ${$clicked_button} -> after (250, [\&hide, ${$clicked_button}]); } else { print "Got it\n"; } } $prev_x = $myx; $prev_y = $myy; } } sub hide { shift -> configure (-width => $button_width, -height =>$button_height, -state=>'normal',-image => undef); } sub fisher_yates_shuffle { my $array = shift; my $i; for ($i = @$array; --$i; ) { my $j = int rand ($i+1); next if $i == $j; @$array[$i,$j] = @$array[$j,$i]; } } MainLoop;