void Board8x8::generateCandidateMoves(MoveList & moveList) { for (uint index = 0; index < 64; index++) { uint row = index >> 3; uint col = index & 7; PieceType pieceType = mPieceType[index]; if (mWhiteToMove) { switch (pieceType) { case WhitePawn: generateWhitePawnMoves(row, col, moveList); break; case WhiteKnight: generateKnightMoves(row, col, moveList); break; case WhiteBishop: generateBishopMoves(row, col, moveList); break; case WhiteRook: generateRookMoves(row, col, moveList); break; case WhiteQueen: generateBishopMoves(row, col, moveList); generateRookMoves(row, col, moveList); break; case WhiteKing: generateKingMoves(row, col, moveList); break; default: break; } } else { switch (pieceType) { case BlackPawn: generateBlackPawnMoves(row, col, moveList); break; case BlackKnight: generateKnightMoves(row, col, moveList); break; case BlackBishop: generateBishopMoves(row, col, moveList); break; case BlackRook: generateRookMoves(row, col, moveList); break; case BlackQueen: generateBishopMoves(row, col, moveList); generateRookMoves(row, col, moveList); break; case BlackKing: generateKingMoves(row, col, moveList); break; default: break; } } } }
void ChessBoard::generateMoves(int sq, Moves& mvs) { int pc = m_data[sq]; if (!pc) return; switch (pieceType(pc)) { case PIECE_KING: generateKingMoves(*this, sq, mvs); break; case PIECE_ADVISOR: generateAdvisorMoves(*this, sq, mvs); break; case PIECE_BISHOP: generateBishopMoves(*this, sq, mvs); break; case PIECE_KNIGHT: generateKnightMoves(*this, sq, mvs); break; case PIECE_ROOK: generateRookMoves(*this, sq, mvs); break; case PIECE_CANNON: generateCannonMoves(*this, sq, mvs); break; case PIECE_PAWN: generatePawnMoves(*this, sq, mvs); break; } }
vector<State> State::getChildrenStates() const { vector<State> moves; moves.reserve(40); for (int i = 0; i < 8; ++i) { for (int j = 0; j < 8; ++j) { const int pos = i*8+j; if (board[pos] == '.') continue; if (islower(board[pos]) && ourTeam == BLACK) { switch(board[pos]) { case 'p': generatePawnMoves(ii(i, j), moves); break; case 'r': generateRookMoves(ii(i, j), moves); break; case 'n': generateKnightMoves(ii(i, j), moves); break; } } else if (isupper(board[pos]) && ourTeam == WHITE) { switch(board[pos]) { case 'P': generatePawnMoves(ii(i, j), moves); break; case 'R': generateRookMoves(ii(i, j), moves); break; case 'N': generateKnightMoves(ii(i,j), moves); break; } } } } return moves; }
void Board8x8::generateCandidateMoves(uint row, uint col, MoveList & moveList) { PieceType pieceType = getPieceType(row, col); if (pieceType == NoPiece) return; switch (pieceType) { case WhitePawn: generateWhitePawnMoves(row, col, moveList); break; case BlackPawn: generateBlackPawnMoves(row, col, moveList); break; case WhiteKnight: case BlackKnight: generateKnightMoves(row, col, moveList); break; case WhiteBishop: case BlackBishop: generateBishopMoves(row, col, moveList); break; case WhiteRook: case BlackRook: generateRookMoves(row, col, moveList); break; case WhiteQueen: case BlackQueen: generateBishopMoves(row, col, moveList); generateRookMoves(row, col, moveList); break; case WhiteKing: case BlackKing: generateKingMoves(row, col, moveList); break; default: break; } }