/// <summary> /// Armies that are stuck serve no purpose. We need to move them away where they can be of any use. /// </summary> /// <param name="stuckArmies">The stuck armies.</param> public void CalculateForStuckArmies(IEnumerable <Region> stuckArmies) { if (stuckArmies.Any()) { foreach (var stuckArmie in stuckArmies) { //Basic path finding to move away for (int degree = 1; degree < 6; degree++) { var escapeRoute = GetNthDegreeNeighbours(stuckArmie, degree).FirstOrDefault(); if (escapeRoute != null) { var transfer = new ArmyTransfer { SourceRegion = stuckArmie, TargetRegion = escapeRoute, Armies = GetRequiredArmies(stuckArmie, escapeRoute) }; Transfers.Add(transfer); break; } } } } }
private bool AddCurrentPairToTransferList(Region sourceRegion, Region targetRegion, int nbrOfArmies) { if (sourceRegion == null || targetRegion == null) { return(false); } if (sourceRegion.NbrOfArmies > 3 || (sourceRegion.IsOccupiedBy(PlayerType.Me) && targetRegion.IsOccupiedBy(PlayerType.Me) && sourceRegion.NbrOfArmies > 1)) { var transfer = new ArmyTransfer { SourceRegion = sourceRegion, TargetRegion = targetRegion, Armies = nbrOfArmies }; Transfers.Add(transfer); UpdateRegion(sourceRegion.ID, Configuration.Current.GetMyBotName(), sourceRegion.NbrOfArmies - nbrOfArmies); return(true); } return(false); }