Example #1
0
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;
      }
    }
  }
}
Example #2
0
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;

    }
}
Example #3
0
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;
}
Example #4
0
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;
  }
}