+ my $nb = $board->make_move($from_row, $from_col, $to_row, $to_col);
+ my $side = ($piece eq lc($piece)) ? 'k' : 'K';
+
+ return !in_check($nb, $side);
+}
+
+my %pieces_against_side = (
+ k => { K => 1, Q => 1, R => 1, N => 1, B => 1, P => 1 },
+ K => { k => 1, q => 1, r => 1, n => 1, b => 1, p => 1 },
+);
+
+# Returns whether the given side (given as k or K for black and white) is in check.
+sub in_check {
+ my ($board, $side) = @_;
+ my ($kr, $kc) = _find_piece($board, $side);
+
+ # check all pieces for the possibility of threatening this king