本文整理汇总了C++中MoveArray::hasMoreMoves方法的典型用法代码示例。如果您正苦于以下问题:C++ MoveArray::hasMoreMoves方法的具体用法?C++ MoveArray::hasMoreMoves怎么用?C++ MoveArray::hasMoreMoves使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoveArray
的用法示例。
在下文中一共展示了MoveArray::hasMoreMoves方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getNextMoveVec
bool AlphaBetaSearch::getNextMoveVec(IDType playerToMove, MoveArray & moves, const size_t & moveNumber, const TTLookupValue & TTval, const size_t & depth, std::vector<Action> & moveVec) const
{
if (_params.maxChildren() && (moveNumber >= _params.maxChildren()))
{
return false;
}
// if this move is beyond the first, check to see if we are only using a single move
if (moveNumber == 1)
{
// if we are player modeling, we should have only generated the first move
if (_params.playerModel(playerToMove) != PlayerModels::None)
{
// so return false
return false;
}
// if there is a transposition table entry for this state
if (TTval.found())
{
// if there was a valid move found with higher depth, just do that one
const AlphaBetaMove & abMove = getAlphaBetaMove(TTval, playerToMove);
if ((TTval.entry()->getDepth() >= depth) && abMove.isValid())
{
// so return false
return false;
}
}
}
const Array<std::vector<Action>, Constants::Max_Ordered_Moves> & orderedMoves(_orderedMoves[depth]);
moveVec.clear();
// if this move should be from the ordered list, return it from the list
if (moveNumber < orderedMoves.size())
{
moveVec.assign(orderedMoves[moveNumber].begin(), orderedMoves[moveNumber].end());
return true;
}
// otherwise return the next move vector starting from the beginning
else
{
if (moves.hasMoreMoves())
{
moves.getNextMoveVec(moveVec);
return true;
}
else
{
return false;
}
}
}
示例2: getNextMove
bool UCTSearch::getNextMove(IDType playerToMove, MoveArray & moves, const size_t & moveNumber, std::vector<UnitAction> & actionVec)
{
if (moveNumber > _params.maxChildren())
{
return false;
}
// if this move is beyond the first, check to see if we are only using a single move
if (moveNumber == 1)
{
// if we are player modeling, we should have only generated the first move
if (_params.playerModel(playerToMove) != PlayerModels::None)
{
// so return false
return false;
}
}
actionVec.clear();
// if this move should be from the ordered list, return it from the list
if (moveNumber < _orderedMoves.size())
{
actionVec.assign(_orderedMoves[moveNumber].begin(), _orderedMoves[moveNumber].end());
return true;
}
// otherwise return the next move vector starting from the beginning
else
{
if (moves.hasMoreMoves())
{
moves.getNextMoveVec(actionVec);
return true;
}
else
{
return false;
}
}
}