Goo-Canvas
view release on metacpan or search on metacpan
bin/perlmine.pl view on Meta::CPAN
print "row, col: (", join(", ", $cell->coords), ")\n";
}
my $boom;
my $table = $canvas->{table};
if ( $ev->button == 1 ) { # left button
$boom = $table->open($cell->coords);
}
elsif ( $ev->button == 2) { # middle button
$boom = $table->open_others($cell->coords);
} elsif ( $ev->button == 3 ) { # right button
$table->set_flag($cell->coords);
set_count_label($table->flag_count);
}
if ( $boom ) {
stop_game();
}
if ( $table->unopen_count == $table->mines ) {
win();
}
return FALSE;
}
sub set_count_label {
my ($cnt) = @_;
$count_label->set_markup(sprintf("<span weight=\"bold\" size=\"large\" foreground=\"blue\">%3d/%d</span>", $cnt, $Config{mines}));
}
sub set_timer_label {
$timer_label->set_markup(sprintf("<span weight=\"bold\" size=\"large\" foreground=\"red\">%3d</span>", $elapse_time));
}
sub set_level {
my ($wid, $data) = @_;
$Config{rows} = $data->[0];
$Config{cols} = $data->[1];
$Config{mines} = $data->[2];
if ( $Config{mines} > $Config{rows} * $Config{cols} ) {
warn "Mines more than cells of the table!\n";
$Config{mines} = 0.1 * $Config{rows} * $Config{cols};
}
setup_canvas();
start_game();
return FALSE;
}
sub stop_game {
$game_status = STOP;
Glib::Source->remove($timer);
$image_but->set_image(Gtk2::Image->new_from_file($image{'sad'}));
}
sub win {
if ( $DEBUG ) {
print "You win!\n";
}
$game_status = STOP;
Glib::Source->remove($timer);
$image_but->set_image(Gtk2::Image->new_from_file($image{'win'}));
return;
my $new_entry = [$Config{name} || getlogin || getpwuid($<) || 'Nobody', $elapse_time];
my ($idx, $new_iter);
if ( $#$history > 8 ) {
$#$history = 8;
}
push @$history, $new_entry;
$idx = $#$history;
my $dia = Gtk2::Dialog->new(
'Rank', undef, # $window,
['modal', 'destroy-with-parent'],
'gtk-ok' => 'ok',
);
my $vbox = $dia->vbox;
my $store = Gtk2::ListStore->new( qw/Glib::String Glib::Int/ );
foreach ( 0..$#$history ) {
my $iter = $store->append();
$store->set($iter,
0, $history->[$_][0],
1, $history->[$_][1],
);
if ( $idx == $_ ) {
$new_iter = $iter;
}
}
my $treeview = Gtk2::TreeView->new($store);
my $col = Gtk2::TreeViewColumn->new();
$col->set_title('name');
my $ren = Gtk2::CellRendererText->new;
$ren->set_property('editable' => TRUE);
$ren->{'renderer_number'} = 0;
$ren->signal_connect(
edited => sub {
my ($cell, $path_string, $new_text) = @_;
$new_entry->[0] = $new_text;
$store->set($new_iter, 0, $new_text);
$cell->set_property('editable' => FALSE);
return FALSE;
}
);
$col->pack_start($ren, FALSE);
$col->add_attribute($ren, text=>0);
$treeview->append_column($col);
my $col2 = Gtk2::TreeViewColumn->new();
$col2->set_title('score');
my $ren2 = Gtk2::CellRendererText->new;
$col2->pack_start($ren2, FALSE);
$col2->add_attribute($ren2, text=>1);
$treeview->append_column($col2);
$vbox->pack_start($treeview, FALSE, FALSE, 0);
$dia->show_all;
$treeview->set_cursor($store->get_path($new_iter), $col, TRUE);
$dia->signal_connect(
response => sub {
$dia->destroy;
return FALSE;
}
);
( run in 2.491 seconds using v1.01-cache-2.11-cpan-5a3173703d6 )