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 )