本文整理汇总了C++中MoveArray::getProduct方法的典型用法代码示例。如果您正苦于以下问题:C++ MoveArray::getProduct方法的具体用法?C++ MoveArray::getProduct怎么用?C++ MoveArray::getProduct使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoveArray
的用法示例。
在下文中一共展示了MoveArray::getProduct方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getMoveTuple
// TODO: UNTESTED
const MoveTuple Player_Kiter::getMoveTuple(GameState & state, const MoveArray & moves)
{
// the tuple, we will generate this on the fly
MoveTuple tuple(0);
for (IDType u(0); u<moves.numUnits(); ++u)
{
bool foundAction (false);
IDType actionMoveIndex (0);
IDType furthestMoveIndex (0);
size_t furthestMoveDist (0);
IDType closestMoveIndex (0);
int actionDistance (std::numeric_limits<int>::max());
unsigned long long closestMoveDist (std::numeric_limits<unsigned long long>::max());
const Unit & ourUnit (state.getUnit(_playerID, u));
const Unit & closestUnit (ourUnit.canHeal() ? state.getClosestOurUnit(_playerID, u) : state.getClosestEnemyUnit(_playerID, u));
for (IDType m(0); m<moves.numMoves(u); ++m)
{
const Move move (moves.getMove(u, m));
if (move.type() == MoveTypes::ATTACK)
{
const Unit & target (state.getUnit(state.getEnemy(move.player()), move._moveIndex));
PositionType dist (ourUnit.distSq(target, state.getTime()));
if (dist < actionDistance)
{
actionDistance = dist;
actionMoveIndex = m;
foundAction = true;
}
}
else if (move.type() == MoveTypes::HEAL)
{
const Unit & target (state.getUnit(move.player(), move._moveIndex));
PositionType dist (ourUnit.distSq(target, state.getTime()));
if (dist < actionDistance)
{
actionDistance = dist;
actionMoveIndex = m;
foundAction = true;
}
}
else if (move.type() == MoveTypes::MOVE)
{
Position ourDest (ourUnit.x() + Search::Constants::Move_Dir[move._moveIndex][0],
ourUnit.y() + Search::Constants::Move_Dir[move._moveIndex][1]);
size_t dist (closestUnit.distSq(ourDest, state.getTime()));
if (dist > furthestMoveDist)
{
furthestMoveDist = dist;
furthestMoveIndex = m;
}
if (dist < closestMoveDist)
{
closestMoveDist = dist;
closestMoveIndex = m;
}
}
}
// the move we will be returning
size_t bestMoveIndex(0);
// if we have an attack move we will use that one
if (foundAction)
{
bestMoveIndex = actionMoveIndex;
}
// otherwise use the closest move to the opponent
else
{
// if we are in attack range of the unit, back up
if (ourUnit.canAttackTarget(closestUnit, state.getTime()))
{
bestMoveIndex = furthestMoveIndex;
}
// otherwise get back into the fight
else
{
bestMoveIndex = closestMoveIndex;
}
}
// update the tuple calculation
tuple += bestMoveIndex * moves.getProduct(u);
}
return tuple;
}