13const vector<pair<BoardDirection, vector<BoardDirection>>>
kHorsePaths = {
49 auto side_space = space + side_vector;
64 auto next_step = space + direction;
65 while (next_step.IsOnBoard() && (not
is_occupied(board_map, next_step))) {
67 next_step = next_step + direction;
70 if (next_step.IsOnBoard()) {
71 next_step = next_step + direction;
72 while (next_step.IsOnBoard() && (not
is_occupied(board_map, next_step))) {
73 next_step = next_step + direction;
75 if (next_step.IsOnBoard() &&
90 auto next_step = space + direction;
91 while (next_step.IsOnBoard() && (not
is_occupied(board_map, next_step))) {
93 next_step = next_step + direction;
95 if (next_step.IsOnBoard() &&
109 auto first_step = space + direction.first;
110 if (first_step.IsOnBoard() && (not
is_occupied(board_map, first_step))) {
111 for (
auto direction : direction.second) {
112 auto second_step = first_step + direction;
130 auto first_step = space + direction;
131 if (first_step.IsOnBoard() && (not
is_occupied(board_map, first_step)) &&
132 (first_step.IsInHomelandOf(color))) {
133 auto second_step = first_step + direction;
148 auto destination = space + direction;
149 if (destination.IsInCastleOf(color) && (
get_color(board_map, destination) != color))
164 auto has_flying_move =
true;
167 if (space.
file != other_gen_position.file) {
168 has_flying_move =
false;
170 auto search_start = min(space.
rank, other_gen_position.rank) + 1;
171 auto search_end = max(space.
rank, other_gen_position.rank) - 1;
172 for (
auto rank = search_start; rank <= search_end; rank++) {
174 has_flying_move =
false;
179 if (has_flying_move) {
180 team_moves.
Append(
Move{space, other_gen_position});
191 auto destination = space + direction;
192 if (destination.IsInCastleOf(color) &&
193 (
get_color(board_map, destination) != color)) {
void ElephantMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
static bool ExistsAndPassesColorTest(const BoardMap_t &board_map, const BoardSpace &space, PieceColor moving_piece_color)
void SoldierMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void StandardGeneralMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
static BoardDirection FwdDirection(PieceColor color)
void FlyingGeneralMove(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void HorseMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void AdvisorMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void GeneralMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void ChariotMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
void CannonMoves(const BoardMap_t &board_map, PieceColor color, const BoardSpace &space, MoveCollection &team_moves)
Tracking piece positions and determining legal moves.
BoardSpace get_general_position(const BoardMap_t &board_map, const PieceColor color)
const vector< pair< BoardDirection, vector< BoardDirection > > > kHorsePaths
const vector< BoardDirection > kAllOrthogonalDirections
bool is_occupied(const BoardMap_t &board_map, const BoardSpace &space)
const array< BoardDirection, 2 > kSideDirections
PieceColor opponent_of(PieceColor color)
array< array< GamePiece, kNumFiles >, kNumRanks > BoardMap_t
2-D array of gameboard::GamePiece objects.
PieceColor get_color(const BoardMap_t &board_map, const BoardSpace &space)
const vector< BoardDirection > kAllDiagonalDirections
Definition of gameboard::PieceMoves and related constants.
Descirbes a direction on a gameboard::GameBoard.board_map_.
A pair of coordinate (rank, and file) with properties determined by comparison with values of gameboa...
bool IsInHomelandOf(const PieceColor color) const
A container for multiple gameboard::Move objects.
A gameboard::BoardSpace pair (start and end).