diff --git a/include/BitBoard.h b/include/BitBoard.h index 058e48b..b398753 100644 --- a/include/BitBoard.h +++ b/include/BitBoard.h @@ -32,6 +32,8 @@ class BitBoard return r[index]; } + static const uint32_t whiteKingSpots = 0x00041041; + static const uint32_t blackKingSpots = 0x82000820; /* Class member variables */ const uint32_t m_blackPieces = 0x41C71C3; @@ -70,7 +72,9 @@ class BitBoard int const getIndex(uint32_t piece); void addJumps(std::vector &moves); - std::vector generateImmediateJumps(uint32_t piece); + void generateAllJumps(BitBoard board, Move move, uint32_t piece, std::vector &moves); + BitBoard boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo); + std::vector generateImmediateJumps(uint32_t piece); void addNewMove(uint32_t start, uint32_t end, std::vector &moves); public: diff --git a/src/BitBoard.cpp b/src/BitBoard.cpp index 7aee00a..addc157 100644 --- a/src/BitBoard.cpp +++ b/src/BitBoard.cpp @@ -39,7 +39,7 @@ void BitBoard::addJumps(std::vector &moves) // grab the specific piece uint32_t piece = (m_isBlacksTurn) ? m_blackPieces & 1< immediateJumps = generateImmediateJumps(piece); if (immediateJumps.size() == 0) { - if (move.length > 1) moves.push_back(move); // If no more jumps add move to list of moves + if (move.length() > 1) moves.push_back(move); // If no more jumps add move to list of moves } else { for (uint32_t x : immediateJumps) { - move.add(getIndex(x)); + move.addMove(getIndex(x)); generateAllJumps(boardMove(board, piece, x), move, x, moves); move.removeLast(); } @@ -61,7 +61,25 @@ void BitBoard::generateAllJumps(BitBoard board, Move move, uint32_t piece, std:: BitBoard BitBoard::boardMove(BitBoard &board, uint32_t piece, uint32_t moveTo) { + // Constructor needs black, white, and kings locations so just derive those and instantiate new board object + uint32_t white, black, kings; + + // First figure out if a piece has been take + int pieceLoc = getIndex(piece); + int moveLoc = getIndex(moveTo); + int diff = std::abs((double)pieceLoc - moveLoc); + int avg = (int)((pieceLoc + moveLoc) / 2); + if (m_isBlacksTurn) { + if (diff == 2 || diff == 14) white = m_whitePieces & ~(1< BitBoard::generateImmediateJumps(uint32_t piece) @@ -127,6 +145,7 @@ std::string const BitBoard::player() std::vector const BitBoard::actions() { std::vector moves; + addJumps(moves); return moves; } diff --git a/src/Move.cpp b/src/Move.cpp index 488e0cc..0751327 100644 --- a/src/Move.cpp +++ b/src/Move.cpp @@ -20,7 +20,7 @@ void Move::removeLast() bool Move::isEmpty() { - return moves.isEmpty(); + return moves.empty(); } int Move::length() {