-void MovePicker::score_qcaptures() {
-
- // Use MVV/LVA ordering
- for (int i = 0; i < numOfMoves; i++)
- {
- Move m = moves[i].move;
- if (move_promotion(m))
- moves[i].score = QueenValueMidgame;
- else
- moves[i].score = int(pos.midgame_value_of_piece_on(move_to(m)))
- -int(pos.type_of_piece_on(move_from(m)));
- }
-}
-
-
-/// MovePicker::pick_move_from_list() picks the move with the biggest score
-/// from a list of generated moves (moves[] or badCaptures[], depending on
-/// the current move generation phase). It takes care not to return the
-/// transposition table move if that has already been serched previously.
-
-Move MovePicker::pick_move_from_list() {
-
- Move move;
-
- switch (PhaseTable[phaseIndex]) {
-
- case PH_GOOD_CAPTURES:
- assert(!pos.is_check());
- assert(movesPicked >= 0);
-
- while (movesPicked < numOfMoves)
- {
- move = moves[movesPicked++].move;
- if ( move != ttMove
- && move != mateKiller
- && pos.pl_move_is_legal(move, pinned))
- return move;
- }
- break;
-
- case PH_NONCAPTURES:
- assert(!pos.is_check());
- assert(movesPicked >= 0);
-
- while (movesPicked < numOfMoves)
- {
- move = moves[movesPicked++].move;
- if ( move != ttMove
- && move != mateKiller
- && pos.pl_move_is_legal(move, pinned))
- return move;
- }
- break;
-
- case PH_EVASIONS:
- assert(pos.is_check());
- assert(movesPicked >= 0);
-
- while (movesPicked < numOfMoves)
- {
- move = moves[movesPicked++].move;
- return move;
- }
- break;
-
- case PH_BAD_CAPTURES:
- assert(!pos.is_check());
- assert(movesPicked >= 0);
- // It's probably a good idea to use SEE move ordering here, instead
- // of just picking the first move. FIXME
- while (movesPicked < numOfBadCaptures)
- {
- move = badCaptures[movesPicked++].move;
- if ( move != ttMove
- && move != mateKiller
- && pos.pl_move_is_legal(move, pinned))
- return move;
- }
- break;
+/// MovePicker::get_next_move() is the most important method of the MovePicker
+/// class. It returns a new legal move every time it is called, until there
+/// are no more moves left.
+/// It picks the move with the biggest score from a list of generated moves taking
+/// care not to return the tt move if that has already been serched previously.