Example #1
0
MoveList<MoveEntry>& MoveGenerator::getMoves(Position& position, int depth, bool isCheck) {
    moves.size = 0;

    if (depth > 0) {
        // Generate main moves

        addMoves(moves, position);

        if (!isCheck) {
            int square = Bitboard::next(position.pieces[position.activeColor][PieceType::KING].squares);
            addCastlingMoves(moves, square, position);
        }
    } else {
        // Generate quiescent moves

        addMoves(moves, position);

        if (!isCheck) {
            int size = moves.size;
            moves.size = 0;
            for (int i = 0; i < size; ++i) {
                if (Move::getTargetPiece(moves.entries[i]->move) != Piece::NOPIECE) {
                    // Add only capturing moves
                    moves.entries[moves.size++]->move = moves.entries[i]->move;
                }
            }
        }
    }

    moves.rateFromMVVLVA();
    moves.sort();

    return moves;
}
Example #2
0
void MoveGenerator::addMoves(MoveList<MoveEntry>& list, Position& position) {
    int activeColor = position.activeColor;

    for (auto squares = position.pieces[activeColor][PieceType::PAWN].squares; squares != 0; squares = Bitboard::remainder(squares)) {
        int square = Bitboard::next(squares);
        addPawnMoves(list, square, position);
    }
    for (auto squares = position.pieces[activeColor][PieceType::KNIGHT].squares; squares != 0; squares = Bitboard::remainder(squares)) {
        int square = Bitboard::next(squares);
        addMoves(list, square, Square::knightDirections, position);
    }
    for (auto squares = position.pieces[activeColor][PieceType::BISHOP].squares; squares != 0; squares = Bitboard::remainder(squares)) {
        int square = Bitboard::next(squares);
        addMoves(list, square, Square::bishopDirections, position);
    }
    for (auto squares = position.pieces[activeColor][PieceType::ROOK].squares; squares != 0; squares = Bitboard::remainder(squares)) {
        int square = Bitboard::next(squares);
        addMoves(list, square, Square::rookDirections, position);
    }
    for (auto squares = position.pieces[activeColor][PieceType::QUEEN].squares; squares != 0; squares = Bitboard::remainder(squares)) {
        int square = Bitboard::next(squares);
        addMoves(list, square, Square::queenDirections, position);
    }
    int square = Bitboard::next(position.pieces[activeColor][PieceType::KING].squares);
    addMoves(list, square, Square::kingDirections, position);
}
Example #3
0
void addMovesAllDoc(aDocument *doc,aIRegister * reg)// added moves for headers for all documents
{
	if ( doc->Select(QDateTime(),QDateTime::currentDateTime()) ) return;
	uint cnt = 50000;// you mast have a lot of time for more fast work use less value
	do
		addMoves( reg, cnt );
	while ( doc->Next() );
}
Example #4
0
Selem::Selem() : Pet(106, 90, 130)
{
    name = "Selem";
    Pet::init("Selem.png");
    
    sprite->setScale(0.125f);
    addMoves();
}