… | |
… | |
276 | |
276 | |
277 | $suicide += $self->capture ($own, $x, $y); |
277 | $suicide += $self->capture ($own, $x, $y); |
278 | |
278 | |
279 | ${ $_->[5] } ||= !(@capture || $suicide); |
279 | ${ $_->[5] } ||= !(@capture || $suicide); |
280 | |
280 | |
|
|
281 | if ($suicide) { |
|
|
282 | $self->{board}[$x][$y] = 0 |
|
|
283 | |
281 | if (!$suicide && @capture == 1) { |
284 | } elsif (!$suicide && @capture == 1) { |
282 | # possible ko. now check liberties on placed stone |
285 | # possible ko. now check liberties on placed stone |
283 | |
286 | |
284 | my $libs; |
287 | my $libs; |
285 | |
288 | |
286 | $libs++ if $x > 0 && !($board->[$x-1][$y] & $opp); |
289 | $libs++ if $x > 0 && !($board->[$x-1][$y] & $opp); |
… | |
… | |
315 | sub is_valid_move { |
318 | sub is_valid_move { |
316 | my ($self, $colour, $x, $y, $may_suicide) = @_; |
319 | my ($self, $colour, $x, $y, $may_suicide) = @_; |
317 | |
320 | |
318 | my $board = $self->{board}; |
321 | my $board = $self->{board}; |
319 | |
322 | |
320 | return if $board->[$x][$y] & (MARK_B | MARK_W | MARK_KO); |
323 | return if $board->[$x][$y] & (MARK_B | MARK_W | MARK_KO) |
|
|
324 | && !($board->[$x][$y] & MARK_GRAYED); |
321 | |
325 | |
322 | if ($may_suicide) { |
326 | if ($may_suicide) { |
323 | return 1; |
327 | return 1; |
324 | } else { |
328 | } else { |
325 | my ($own, $opp) = $colour == COLOUR_BLACK |
329 | my ($own, $opp) = $colour == COLOUR_BLACK |