-
- # TODO: en passant
- if ($piece eq 'p') {
- # black pawn
- if ($to_col == $from_col && $to_row == $from_row + 1) {
- return ($dest_piece eq '-');
- }
- if ($to_col == $from_col && $from_row == 1 && $to_row == 3) {
- my $middle_piece = $board->[2][$to_col];
- return ($dest_piece eq '-' && $middle_piece eq '-');
- }
- if (abs($to_col - $from_col) == 1 && $to_row == $from_row + 1) {
- return ($dest_piece ne '-');
- }
- return 0;
- }
- if ($piece eq 'P') {
- # white pawn
- if ($to_col == $from_col && $to_row == $from_row - 1) {
- return ($dest_piece eq '-');
- }
- if ($to_col == $from_col && $from_row == 6 && $to_row == 4) {
- my $middle_piece = $board->[5][$to_col];
- return ($dest_piece eq '-' && $middle_piece eq '-');
- }
- if (abs($to_col - $from_col) == 1 && $to_row == $from_row - 1) {
- return ($dest_piece ne '-');
- }
- return 0;
+ if (lc($piece) eq 'k') {
+ return (abs($from_row - $to_row) <= 1 && abs($from_col - $to_col) <= 1);