diff --git a/include/BitBoard.h b/include/BitBoard.h index ebbe1ae..7f8f290 100644 --- a/include/BitBoard.h +++ b/include/BitBoard.h @@ -23,6 +23,7 @@ class BitBoard uint32_t m_kings = 0; bool m_isBlacksTurn = true; + bool m_wasKinged = false; public: /* Static bit masks */ @@ -75,13 +76,14 @@ class BitBoard public: BitBoard(); - BitBoard(uint32_t black, uint32_t white, uint32_t kings, bool isBlacksTurn); + BitBoard(uint32_t black, uint32_t white, uint32_t kings, bool isBlacksTurn, bool wasKinged); BitBoard(const BitBoard &board); uint32_t getBlackPieces() { return m_blackPieces; }; uint32_t getWhitePieces() { return m_whitePieces; }; uint32_t getKings () { return m_kings; }; bool getIsBlacksTurn() { return m_isBlacksTurn; }; + bool getWasKinged() { return m_wasKinged; } std::string player() const; vmup actions() const; diff --git a/src/BitBoard.cpp b/src/BitBoard.cpp index 7bc5813..07316ab 100644 --- a/src/BitBoard.cpp +++ b/src/BitBoard.cpp @@ -95,7 +95,7 @@ void BitBoard::generateAllJumps(BitBoard board, mup &move, uint32_t piece, vmup if (move->isEmpty()) move->addMove(getIndex(piece)); // Add start position std::vector immediateJumps = generateImmediateJumps(board, piece); - if (immediateJumps.size() == 0) { + if (immediateJumps.size() == 0 || board.getWasKinged()) { if (move->length() > 1) { mup newMove(new Move(*move)); moves.push_back(std::move(newMove)); // If no more jumps add move to list of moves @@ -115,6 +115,7 @@ BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo) c uint32_t white = board.m_whitePieces; uint32_t black = board.m_blackPieces; uint32_t kings = board.m_kings; + bool wasKinged = false; // First figure out if a piece has been take int pieceLoc = getIndex(piece); @@ -127,15 +128,17 @@ BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo) c if (diff == 2 || diff == 14) white &= ~(1< BitBoard::generateImmediateJumps(BitBoard &board, uint32_t piece) const @@ -200,8 +203,8 @@ std::string BitBoard::pieceToString(int piece) const BitBoard::BitBoard() {}; -BitBoard::BitBoard(uint32_t black, uint32_t white, uint32_t kings, bool isBlacksTurn) : -m_blackPieces(black), m_whitePieces(white), m_kings(kings), m_isBlacksTurn(isBlacksTurn) {} +BitBoard::BitBoard(uint32_t black, uint32_t white, uint32_t kings, bool isBlacksTurn, bool wasKinged) : +m_blackPieces(black), m_whitePieces(white), m_kings(kings), m_isBlacksTurn(isBlacksTurn), m_wasKinged(wasKinged) {} BitBoard::BitBoard(const BitBoard &board) {