protected GPoint findGrenadeTarget(Ability A, Unit U) { // searches for an attackable spot that would hit the most enemies for the most damage // must hit at least 2 enemies // 1/24 chance to see aoe int Cur_units = 0; int Cur_damage = 0; int New_units = 0; int New_damage = 0; GPoint itarget = null; rando = (int) (Math.random() * 24); if (rando == 0) vis = A.getTilesAttackable(U, map); else vis = Vision.getSprintVision(map, U, 3); for (int i = 0; i < vis.size(); i++) { List<AttackedTile> tilesAffected = A.getTilesAffected(U, vis.get(i), map); for (int j = 0; j < tilesAffected.size(); j++) { if (map.getTile(tilesAffected.get(j).tile).hasUnit()) { if (map.getTile(tilesAffected.get(j).tile).getPlayer_id() != playerId) { New_units++; New_damage += tilesAffected.get(j).damageTaken; } } } if ((itarget == null) || (New_units > Cur_units) || ((New_units == Cur_units) && (New_damage > Cur_damage))) { itarget = new GPoint(vis.get(i)); Cur_units = New_units; Cur_damage = New_damage; } New_units = 0; New_damage = 0; } vis.clear(); if (Cur_units < 2) itarget = null; return itarget; }