/* * File: Piece.hpp * Author: amr * * Created on July 30, 2025, 9:21 PM */ #ifndef PIECE_HPP #define PIECE_HPP #pragma once #include #include #include #include #include "Board.hpp" class Board; enum PieceType { PAWN, BISHOP, KNIGHT, ROOK, QUEEN, KING, EMPTY }; enum PieceColour { PIECE_WHITE, PIECE_BLACK, PIECE_EMPTY }; enum Rank { R1 = 0, R2 = 1, R3 = 2, R4 = 3, R5 = 4, R6 = 5, R7 = 6, R8 = 7 }; enum File { A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7 }; struct Square { Rank rank; File file; bool isValid() const { return rank >= 0 && rank < 8 && file >= 0 && file < 8; } }; struct Move { Square from; Square to; }; class Piece { protected: PieceColour colour; public: // methods Piece(PieceColour pColour) : colour(pColour) {} virtual ~Piece(); virtual std::vector getLegalMoves(const Square &from, const Board &board) const; PieceColour getColour() const { return colour; } }; class King : public Piece { King(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const Square &from, const Board &board) const override; }; class Rook : public Piece { Rook(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const square &from, const Board &board) const override; }; class Queen : public Piece { Queen(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const square &from, const Board &board) const override; }; class Knight: public Piece { Knight(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const square &from, const Board &board) const override; }; class Bishop : public Piece { Bishop(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const square &from, const Board &board) const override; }; class Pawn : public Piece { Pawn(PieceColour colour) : Piece(colour) {} virtual std::vector getLegalMoves(const square &from, const Board &board) const override; }; #endif // PIECE_HPP