my $dst_piece = $board->[$to_row][$to_col];
# White short castling (regular or Chess960 king-takes-rook)
- if ($move eq 'e1g1' || $dst_piece eq 'R') {
+ if ($move eq 'e1g1' || ($dst_piece eq 'R' && $to_col > $from_col)) {
# king
$nb->[7][$from_col] = '-';
- $nb->[7][6] = $piece;
-
- # rook
$nb->[7][$to_col] = '-';
+ $nb->[7][6] = 'K';
$nb->[7][5] = 'R';
return $nb;
}
# White long castling (regular or Chess960 king-takes-rook)
- if ($move eq 'e1c1' || $dst_piece eq 'R') {
- # king
+ if ($move eq 'e1c1' || ($dst_piece eq 'R' && $to_col < $from_col)) {
$nb->[7][$from_col] = '-';
- $nb->[7][2] = $piece;
-
- # rook
$nb->[7][$to_col] = '-';
+ $nb->[7][2] = 'K';
$nb->[7][3] = 'R';
return $nb;
my $dst_piece = $board->[$to_row][$to_col];
# Black short castling (regular or Chess960 king-takes-rook)
- if ($move eq 'e8g8' || $dst_piece eq 'r') {
- # king
- $nb->[0][$from_col] = '-';
- $nb->[0][6] = $piece;
-
- # rook
+ if ($move eq 'e8g8' || ($dst_piece eq 'r' && $to_col > $from_col)) {
$nb->[0][$from_col] = '-';
+ $nb->[0][$to_col] = '-';
+ $nb->[0][6] = 'k';
$nb->[0][5] = 'r';
return $nb;
}
# black long castling
- if ($move eq 'e8c8' || $dst_piece eq 'r') {
+ if ($move eq 'e8c8' || ($dst_piece eq 'r' && $to_col < $from_col)) {
# king
$nb->[0][$from_col] = '-';
- $nb->[0][2] = $piece;
-
- # rook
$nb->[0][$to_col] = '-';
+ $nb->[0][2] = 'k';
$nb->[0][3] = 'r';
return $nb;