本文整理汇总了C++中MoveArray::validateMoves方法的典型用法代码示例。如果您正苦于以下问题:C++ MoveArray::validateMoves方法的具体用法?C++ MoveArray::validateMoves怎么用?C++ MoveArray::validateMoves使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MoveArray
的用法示例。
在下文中一共展示了MoveArray::validateMoves方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: generateMoves
//.........这里部分代码省略.........
for (IDType unitIndex(0); unitIndex < _numUnits[playerIndex]; ++unitIndex)
{
// unit reference
const Unit & unit(getUnit(playerIndex,unitIndex));
// if this unit can't move at the same time as the first
if (unit.firstTimeFree() != firstUnitMoveTime)
{
// stop checking
break;
}
if (unit.previousMoveTime() == _currentTime && _currentTime != 0)
{
// CHANGED
// printf("ERROR: Previous Move: %s\n", unit.previousMove().moveString().c_str());
int a = 6;
}
moves.addUnit();
// generate attack moves
if (unit.canAttackNow())
{
for (IDType u(0); u<_numUnits[enemyPlayer]; ++u)
{
const Unit & enemyUnit(getUnit(enemyPlayer, u));
if (unit.canAttackTarget(enemyUnit, _currentTime) && enemyUnit.isAlive())
{
moves.add(Move(unitIndex, playerIndex, MoveTypes::ATTACK, u));
}
}
}
else if (unit.canHealNow())
{
for (IDType u(0); u<_numUnits[playerIndex]; ++u)
{
// units cannot heal themselves in broodwar
if (u == unitIndex)
{
continue;
}
const Unit & ourUnit(getUnit(playerIndex, u));
if (unit.canHealTarget(ourUnit, _currentTime) && ourUnit.isAlive())
{
moves.add(Move(unitIndex, playerIndex, MoveTypes::HEAL, u));
}
}
}
// generate the wait move if it can't attack yet
else
{
if (!unit.canHeal())
{
moves.add(Move(unitIndex, playerIndex, MoveTypes::RELOAD, 0));
}
}
// generate movement moves
if (unit.isMobile())
{
for (IDType d(0); d<Search::Constants::Num_Directions; ++d)
{
Move move(unitIndex, playerIndex, MoveTypes::MOVE, d);
Position dest;
Position dir(Search::Constants::Move_Dir[move._moveIndex][0],
Search::Constants::Move_Dir[move._moveIndex][1]);
// if the unit can attack the destination will be set by default move distance
if (unit.canAttackNow() || unit.canHeal())
{
dest = Position(Search::Constants::Move_Distance*dir.x(), Search::Constants::Move_Distance*dir.y()) + unit.pos();
}
// otherwise it will be a move until attack move
else
{
dest = unit.getMoveUntilAttackDest(dir, _currentTime);
}
if (isWalkable(dest))
{
moves.add(Move(unitIndex, playerIndex, MoveTypes::MOVE, d));
}
}
}
// if no moves were generated for this unit, it must be issued a 'PASS' move
if (moves.numMoves(unitIndex) == 0)
{
moves.add(Move(unitIndex, playerIndex, MoveTypes::PASS, 0));
}
}
if (!moves.validateMoves())
{
fprintf(stderr, "Moves invalid, something is wrong\n");
}
}