diff --git a/Board.hpp b/Board.hpp index 6ce56fb..a721708 100644 --- a/Board.hpp +++ b/Board.hpp @@ -19,9 +19,7 @@ enum Players { PL_WHITE, PL_BLACK }; struct Square; class Board { -private: - std::vector>> boardGrid; - +friend class Piece; public: Board(); virtual ~Board(); @@ -32,6 +30,9 @@ public: bool isEmpty(Square square) const; uint64_t serialBoard = 0xFFFF00000000FFFF; // opening position void deserializeBoard(uint64_t incomingBoard); + // this should be protected, but even when Piece is declared as a friend, + // accessing it in Piece.cpp threw an error + std::vector>> boardGrid; }; #endif // BOARD_HPP diff --git a/Piece.cpp b/Piece.cpp index 32f566f..cce8eae 100644 --- a/Piece.cpp +++ b/Piece.cpp @@ -34,7 +34,7 @@ std::vector King::getLegalMoves(const Square &from, const Board &board) co {0, -1}, // Left {0, 1} // Right }; - + return moveList; } std::vector Rook::getLegalMoves(const Square &from, const Board &board) const { @@ -50,14 +50,16 @@ std::vector Rook::getLegalMoves(const Square &from, const Board &board) co int f = from.file + dir[1]; while (r >= 0 && r < 8 && f >= 0 && f < 8) { - const auto& target = board[r][f]; - + const auto& target = board.boardGrid[r][f]; + auto ra = static_cast (r); + auto fi = static_cast (f); + Square targetSquare = {ra, fi}; if (!target) { - moves.push_back({from, - {r, f}}); - } else if (target->color != this->color) { - moves.push_back({from, - {r, f}}); + moveList.push_back({from, + targetSquare}); + } else if (target->getColour() != this->colour) { + moveList.push_back({from, + targetSquare}); break; } else { break; @@ -70,3 +72,27 @@ std::vector Rook::getLegalMoves(const Square &from, const Board &board) co return moveList; } + +std::vector Queen::getLegalMoves(const Square &from, const Board &board) const { + std::vector moveList; + + return moveList; +} + +std::vector Knight::getLegalMoves(const Square &from, const Board &board) const { + std::vector moveList; + + return moveList; +} + +std::vector Bishop::getLegalMoves(const Square &from, const Board &board) const { + std::vector moveList; + + return moveList; +} + +std::vector Pawn::getLegalMoves(const Square &from, const Board &board) const { + std::vector moveList; + + return moveList; +} \ No newline at end of file diff --git a/Piece.hpp b/Piece.hpp index 456e2bd..9987444 100644 --- a/Piece.hpp +++ b/Piece.hpp @@ -16,61 +16,99 @@ #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 }; +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; + Rank rank; + File file; + bool isValid() const { return rank >= 0 && rank < 8 && file >= 0 && file < 8; } }; + struct Move { Square from; Square to; }; + class Piece { +friend class Board; protected: - PieceColour colour; + PieceColour colour; + bool hasMoved = false; 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; } + 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) {} +public: + + 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; +public: + + 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; +public: + + 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 Knight : public Piece { +public: + + 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; +public: + + 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; +public: + + Pawn(PieceColour colour) : Piece(colour) { + } + virtual std::vector getLegalMoves(const Square &from, const Board &board) const override; }; #endif // PIECE_HPP diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index a00406b..5295c65 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -66,7 +66,7 @@ false - false + true @@ -280,7 +280,7 @@ false - false + true @@ -425,7 +425,7 @@ - +