本文整理汇总了C++中Dice::RemoveAll方法的典型用法代码示例。如果您正苦于以下问题:C++ Dice::RemoveAll方法的具体用法?C++ Dice::RemoveAll怎么用?C++ Dice::RemoveAll使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Dice
的用法示例。
在下文中一共展示了Dice::RemoveAll方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AutoAssignHits
ShipBattle::Hits ShipBattle::AutoAssignHits(const Dice& dice, const Game& game) const
{
Hits hits;
Dice remainingDice = dice;
std::map<int, std::set<int>> destroyedShips; // group index, ship indices.
// Try to destroy ships (biggest type and most damaged ship first.)
std::vector<int> groupIndices = GetTargetGroupIndicesBiggestFirst();
for (int groupIndex : groupIndices)
{
if (remainingDice.empty())
break;
const Group& group = m_groups[groupIndex];
int toHit = GetToHitRoll(group.shipType, game);
Hits groupHits = GetHitsToDestroy(group, remainingDice, toHit);
hits.insert(hits.begin(), groupHits.begin(), groupHits.end());
// Remember destroyed ships so we don't try to damage them.
for (auto& hit : groupHits)
destroyedShips[groupIndex].insert(hit.shipIndex);
}
// Try to damage remaining ships. Only need to consider the weakest ship of each group.
for (int groupIndex : groupIndices)
{
if (remainingDice.empty())
break;
const Group& group = m_groups[groupIndex];
const auto shipIndices = GetShipIndicesWeakestFirst(group);
// Check if the whole group has been destroyed.
// We can't just check if shipIndices is empty, because the damamge hasn't been applied yet.
if (destroyedShips[groupIndex].size() == shipIndices.size())
continue;
int toHit = GetToHitRoll(group.shipType, game);
for (int shipIndex : shipIndices)
{
if (destroyedShips[groupIndex].count(shipIndex) == 0) // Still alive.
{
Dice used = remainingDice.RemoveAll(toHit);
if (!used.empty())
hits.push_back(Hit(group.shipType, shipIndex, used));
break; // No point checking healthier ships.
}
}
}
return hits;
}