CombatUnit* CombatGroup::GetRandomUnit() { CombatUnit* result = 0; List<CombatUnit> live; ListIter<CombatUnit> unit = units; while (++unit) { if (unit->Count() - unit->DeadCount() > 0) live.append(unit.value()); } if (live.size() > 0) { int ntries = 5; while (!result && ntries-- > 0) { int index = rand() % live.size(); result = live[index]; int ship_class = result->GetShipClass(); if (ship_class >= Ship::CRUISER && ship_class <= Ship::FARCASTER) result = 0; } } if (!result) { ListIter<CombatGroup> comp = components; while (++comp && !result) { CombatUnit* u = comp->GetRandomUnit(); if (u) result = u; } } return result; }