1 | #!/opt/bin/perl |
1 | #!/usr/bin/perl -I../lib/ |
2 | |
2 | |
3 | use PApp::Util qw(dumpval); # debug only |
3 | #use PApp::Util qw(dumpval); # debug only |
4 | |
4 | |
5 | use Gtk; |
5 | use Gtk; |
6 | use Gtk::Gdk; |
6 | use Gtk::Gdk; |
|
|
7 | use Gtk; |
|
|
8 | #use Gtk::Gdk::ImlibImage; |
|
|
9 | use Gnome; |
|
|
10 | init Gnome "kgsueme"; |
|
|
11 | |
7 | |
12 | |
8 | use KGS::Protocol; |
13 | use KGS::Protocol; |
9 | use KGS::Listener::Debug; |
14 | use KGS::Listener::Debug; |
10 | |
15 | |
11 | use IO::Socket::INET; |
16 | use IO::Socket::INET; |
… | |
… | |
476 | $self->{window}->signal_connect(delete_event => sub { $self->part }); |
481 | $self->{window}->signal_connect(delete_event => sub { $self->part }); |
477 | |
482 | |
478 | $self->{window}->add(my $hpane = new Gtk::HPaned); |
483 | $self->{window}->add(my $hpane = new Gtk::HPaned); |
479 | ::state $hpane, "game::hpane", undef, hpane_position => 500; |
484 | ::state $hpane, "game::hpane", undef, hpane_position => 500; |
480 | |
485 | |
481 | $hpane->add(my $board = new Gtk::Table $self->{size}, $self->{size}, 1); |
486 | $hpane->add(my $canvas = new Gnome::Canvas); |
|
|
487 | $self->{canvas} = $canvas; |
|
|
488 | # $canvas->set_pixels_per_unit(300); |
|
|
489 | $canvas->set_scroll_region(0,0,400,400); |
|
|
490 | $self->{board} = [[]]; |
|
|
491 | # $canvas->style->bg('normal', $canvas->style->white); |
|
|
492 | { |
|
|
493 | my $croot = $canvas->root; |
|
|
494 | my $cgroup = $croot->new($croot, "Gnome::CanvasGroup"); |
|
|
495 | my $w = 400; |
|
|
496 | my $pad = 26; |
|
|
497 | my $box = $cgroup->new($cgroup,"Gnome::CanvasRect", |
|
|
498 | x1 => 0, x2 => $w, |
|
|
499 | y1 => 0, y2 => $w, |
|
|
500 | outline_color => "green", |
|
|
501 | fill_color => "green", |
|
|
502 | width_pixels => 2, |
|
|
503 | ); |
|
|
504 | my $box2 = $cgroup->new($cgroup,"Gnome::CanvasRect", |
|
|
505 | x1 => $pad, x2 => $w - $pad, |
|
|
506 | y1 => $pad, y2 => $w - $pad, |
|
|
507 | outline_color => "brown", |
|
|
508 | fill_color => "brown", |
|
|
509 | width_pixels => 2, |
|
|
510 | ); |
|
|
511 | my @lines; |
|
|
512 | my $x1 = $pad * 2; # == my $y1 = 30; |
|
|
513 | my $x2 = $w - ($pad * 2); # == my $y2 = 270; |
|
|
514 | my $w = $x2 - $x1; |
|
|
515 | my $s = $self->{size} - 1; |
482 | |
516 | |
483 | for my $x (0 .. $self->{size} - 1) { |
517 | for (my $i = 0; $i <= $s; $i++) { # one more iteration for the finishing lines |
484 | for my $y (0 .. $self->{size} - 1) { |
518 | push @lines, |
485 | my $cell = new Gtk::Label; |
519 | $cgroup->new($cgroup,"Gnome::CanvasLine", |
486 | $board->attach_defaults($cell, $x, $x + 1, $y, $y + 1); |
520 | points => [ $x1, $x1 + ($w/$s)*$i, $x1 + $w, $x1 + ($w/$s)*$i ], |
487 | $self->{board}[$x][$y] = $cell; |
521 | fill_color => "darkbrown", |
|
|
522 | width_pixels => 1); |
|
|
523 | push @lines, |
|
|
524 | $cgroup->new($cgroup,"Gnome::CanvasLine", |
|
|
525 | points => [ $x1 + ($w/$s)*$i, $x1, $x1 + ($w/$s)*$i, $x1 + $w ], |
|
|
526 | fill_color => "darkbrown", |
|
|
527 | width_pixels => 1); |
|
|
528 | } |
|
|
529 | $self->{board_gfx}->{lines} = \@lines; |
|
|
530 | my $stones = [[]]; |
|
|
531 | my $wf = ($w/$s); |
|
|
532 | for (my $x = 0; $x < $self->{size}; $x++) { |
|
|
533 | for (my $y = 0; $y < $self->{size}; $y++) { |
|
|
534 | $stones->[$x]->[$y]->[0] = # black stone |
|
|
535 | $cgroup->new($cgroup,"Gnome::CanvasEllipse", |
|
|
536 | x1 => $x1 + $wf*$x - ($wf/2.2), x2 => $x1 + $wf*$x + ($wf/2), |
|
|
537 | y1 => $x1 + $wf*$y - ($wf/2.2), y2 => $x1 + $wf*$y + ($wf/2), |
|
|
538 | fill_color => "black"); |
|
|
539 | $stones->[$x]->[$y]->[0]->hide; |
|
|
540 | $stones->[$x]->[$y]->[1] = # black stone |
|
|
541 | $cgroup->new($cgroup,"Gnome::CanvasEllipse", |
|
|
542 | x1 => $x1 + $wf*$x - ($wf/2.2), x2 => $x1 + $wf*$x + ($wf/2), |
|
|
543 | y1 => $x1 + $wf*$y - ($wf/2.2), y2 => $x1 + $wf*$y + ($wf/2), |
|
|
544 | fill_color => "white"); |
|
|
545 | $stones->[$x]->[$y]->[1]->hide; |
488 | } |
546 | } |
489 | } |
547 | } |
|
|
548 | $self->{board_gfx}->{stones} = $stones; |
|
|
549 | |
|
|
550 | # smooth => 1, |
|
|
551 | # spline_steps => 50 |
|
|
552 | # $line->hide; |
|
|
553 | } |
|
|
554 | $canvas->show(); |
|
|
555 | |
490 | |
556 | |
491 | $hpane->add(my $vpane = new Gtk::VPaned); |
557 | $hpane->add(my $vpane = new Gtk::VPaned); |
492 | ::state $vpane, "game", $self->{name}, vpane_position => 80; |
558 | ::state $vpane, "game", $self->{name}, vpane_position => 80; |
493 | |
559 | |
494 | $vpane->add(my $sw = new Gtk::ScrolledWindow); |
560 | $vpane->add(my $sw = new Gtk::ScrolledWindow); |
… | |
… | |
555 | } |
621 | } |
556 | |
622 | |
557 | sub event_update_tree { |
623 | sub event_update_tree { |
558 | my ($self) = @_; |
624 | my ($self) = @_; |
559 | |
625 | |
|
|
626 | # if (not defined $self->{board_pm}) { |
|
|
627 | # $self->{board_pm} = new Gtk::Gdk::Pixmap ($self->{board}->window, 100, 100, -1); |
|
|
628 | # $self->{board_pm}->draw_rectangle($self->{board}->style->white_gc, 1, 0, 0, 100, 100); |
|
|
629 | # } |
|
|
630 | # my $red = $self->{board}->window->get_colormap->color_alloc( { red => 65000, green => 0, blue => 0 } ); |
|
|
631 | # my $red_gc = new Gtk::Gdk::GC ( $self->{board}->window ); |
|
|
632 | # $red_gc->set_foreground( $red ); |
|
|
633 | # |
|
|
634 | # my $px = $self->{board_pm}; |
|
|
635 | |
560 | for my $x (0 .. $self->{size} - 1) { |
636 | for my $x (0 .. $self->{size} - 1) { |
561 | for my $y (0 .. $self->{size} - 1) { |
637 | for my $y (0 .. $self->{size} - 1) { |
562 | $self->{board}[$x][$y]->set_text(""); |
638 | # $self->{board}[$x][$y] = 0; |
|
|
639 | $self->{board_gfx}->{stones}->[$x]->[$y]->[0]->hide; |
|
|
640 | $self->{board_gfx}->{stones}->[$x]->[$y]->[1]->hide; |
563 | } |
641 | } |
564 | } |
642 | } |
565 | |
643 | |
566 | for (0..$self->{node}) { |
644 | for (0..$self->{node}) { |
567 | while (my ($k, $v) = each %{$self->{tree}[$_]}) { |
645 | while (my ($k, $v) = each %{$self->{tree}[$_]}) { |
568 | if ($k eq "move7") { |
646 | if ($k eq "move7") { |
569 | if ($v->[1] < 255) { |
647 | if ($v->[1] < 255) { |
570 | $self->{board}[$v->[1]][$v->[2]]->set_text(("X", "O", "-")[$v->[0]]); |
648 | # $self->{board_gfx}->{stones}[$x][$y]->[0]->show; |
|
|
649 | ($v->[0] == 0) && |
|
|
650 | $self->{board_gfx}->{stones}->[$v->[1]]->[$v->[2]]->[0]->show; |
|
|
651 | ($v->[0] == 1) && |
|
|
652 | $self->{board_gfx}->{stones}->[$v->[1]]->[$v->[2]]->[1]->show; |
|
|
653 | # $self->{board}[$v->[1]][$v->[2]] = ($v->[0] + 1); # ("X", "O", "-") |
|
|
654 | # 0 1 2 (+1) |
571 | } |
655 | } |
572 | } |
656 | } |
573 | } |
657 | } |
574 | } |
658 | } |
575 | } |
659 | } |