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; }
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); }
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() ); }
Selem::Selem() : Pet(106, 90, 130) { name = "Selem"; Pet::init("Selem.png"); sprite->setScale(0.125f); addMoves(); }