private BoardState Attack(BoardState board, Move move) { Territory from = move.From; Territory to = move.To; // If attacking, must leave one troop behind int attackers = Min(move.From.TroopCount - 1, 3); int defenders = Min(move.To.TroopCount, 2); List <int> attack = RollDice(attackers); List <int> defense = RollDice(defenders); int comparisons = Min(attack.Count, defense.Count); for (int i = 0; i < comparisons; i++) { // Defender wins ties if (attack[i] > defense[i]) { to = to.ModifyTroops(-1); } else { from = from.ModifyTroops(-1); } } if (to.TroopCount == 0) { to = to.ChangeControl(from.Player, from.TroopCount - 1); from.ModifyTroops(-from.TroopCount + 1); } return(board.AttackUpdate(from, to)); }