/* * File: Piece.cpp * Author: amr * * Created on July 30, 2025, 9:21 PM */ #include "Piece.hpp" Piece::~Piece() { return; } // because the Piece class is instantiated in another class using // unique_ptr, non-pure virtual functions apparently *must* // have definitions, or the linker freaks out // so this is just a stub that does nothing. it doesn't matter // because only the derived class versions should be called. std::vector Piece::getLegalMoves(const Square &from, const Board &board) const { std::vector moveList; return moveList; } std::vector King::getLegalMoves(const Square &from, const Board &board) const { std::vector moveList; } std::vector Rook::getLegalMoves(const Square &from, const Board &board) const { std::vector moveList; const int directions[8][2] = { {-1, 0}, // Up {1, 0}, // Down {0, -1}, // Left {0, 1} // Right }; for (auto& dir : directions) { int r = from.rank + dir[0]; int f = from.file + dir[1]; while (r >= 0 && r < 8 && f >= 0 && f < 8) { const auto& target = board[r][f]; if (!target) { moves.push_back({from, {r, f}}); } else if (target->color != this->color) { moves.push_back({from, {r, f}}); break; } else { break; } r += dir[0]; f += dir[1]; } } // calculate legal moves somehow return moveList; }