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; } }
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; } }
void Board8x8::generateQueenMoves(uint row, uint col, MoveList & moveList) { generateBishopMoves(row, col, moveList); generateRookMoves(row, col, moveList); }