function reachable_squares() { #Array of square where the piece can move to $squares = array(); $csq = $this->get_current_square(); $hdist = abs(Board::horz_distance("a1", $csq)); $vdist = abs(Board::vert_distance("a1", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, -$dist); $sq = Board::add_vert_distance($sq, -$dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("h1", $csq)); $vdist = abs(Board::vert_distance("h1", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, $dist); $sq = Board::add_vert_distance($sq, -$dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("a8", $csq)); $vdist = abs(Board::vert_distance("a8", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, -$dist); $sq = Board::add_vert_distance($sq, $dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("h8", $csq)); $vdist = abs(Board::vert_distance("h8", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, $dist); $sq = Board::add_vert_distance($sq, $dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); #Removes current position square $squares = preg_grep("/^{$csq}\$/", $squares, PREG_GREP_INVERT); return $squares; }
function reachable_squares() { #Array of square where the piece can move to $squares = array(); $csq = $this->get_current_square(); $tsq = Board::add_vert_distance($csq, 2); if ($tsq) { $sq = Board::square_right_of($tsq); if ($sq) { $squares[] = $sq; } $sq = Board::square_left_of($tsq); if ($sq) { $squares[] = $sq; } } $tsq = Board::add_vert_distance($csq, -2); if ($tsq) { $sq = Board::square_right_of($tsq); if ($sq) { $squares[] = $sq; } $sq = Board::square_left_of($tsq); if ($sq) { $squares[] = $sq; } } $tsq = Board::add_horz_distance($csq, 2); if ($tsq) { $sq = Board::square_up_from($tsq); if ($sq) { $squares[] = $sq; } $sq = Board::square_down_from($tsq); if ($sq) { $squares[] = $sq; } } $tsq = Board::add_horz_distance($csq, -2); if ($tsq) { $sq = Board::square_up_from($tsq); if ($sq) { $squares[] = $sq; } $sq = Board::square_down_from($tsq); if ($sq) { $squares[] = $sq; } } return $squares; }
function reachable_squares() { #Array of square where the piece can move to $squares = array(); $csq = $this->get_current_square(); $sq1 = Board::square_left_of($csq); if ($sq1) { $squares[] = $sq1; $sq2 = Board::square_up_from($sq1); if (defined($sq2)) { $squares[] = $sq2; } $sq2 = Board::square_down_from($sq1); if (defined($sq2)) { $squares[] = $sq2; } } $sq1 = Board::square_right_of($csq); if ($sq1) { $squares[] = $sq1; $sq2 = Board::square_up_from($sq1); if ($sq2) { $squares[] = $sq2; } $sq2 = Board::square_down_from($sq1); if ($sq2) { $squares[] = $sq2; } } $sq1 = Board::square_up_from($csq); if ($sq1) { $squares[] = $sq1; } $sq1 = Board::square_down_from($csq); if ($sq1) { $squares[] = $sq1; } $sq1 = Board::add_horz_distance($csq, 2); if ($sq1 && !$this->moved()) { $squares[] = $sq1; } $sq1 = Board::add_horz_distance($csq, -2); if ($sq1 && !$this->moved()) { $squares[] = $sq1; } return $squares; }
function reachable_squares() { #Array of square where the piece can move to $squares = array(); $csq = $this->get_current_square(); $x = Board::horz_distance("a4", $csq); $y = Board::vert_distance("d1", $csq); $row_start = 'a' . ($y + 1); $row_end = 'h' . ($y + 1); $col_start = chr(ord('a') + $x) . '1'; $col_end = chr(ord('a') + $x) . '8'; $row = Board::squares_in_line($row_start, $row_end); $col = Board::squares_in_line($col_start, $col_end); $squares = array_merge($squares, $row, $col); $hdist = abs(Board::horz_distance("a1", $csq)); $vdist = abs(Board::vert_distance("a1", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, -$dist); $sq = Board::add_vert_distance($sq, -$dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("h1", $csq)); $vdist = abs(Board::vert_distance("h1", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, $dist); $sq = Board::add_vert_distance($sq, -$dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("a8", $csq)); $vdist = abs(Board::vert_distance("a8", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, -$dist); $sq = Board::add_vert_distance($sq, $dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); $hdist = abs(Board::horz_distance("h8", $csq)); $vdist = abs(Board::vert_distance("h8", $csq)); $dist = $hdist > $vdist ? $vdist : $hdist; $sq = Board::add_horz_distance($csq, $dist); $sq = Board::add_vert_distance($sq, $dist); $squares = array_merge($squares, Board::squares_in_line($csq, $sq)); #Removes current position square $squares = preg_grep("/^{$csq}\$/", $squares, PREG_GREP_INVERT); return $squares; }