public System.Tuple <Position, Position> Move(List <List <ICell> > cells) { var moves = Analytics.AllMoves(cells); moves.RemoveAll(move => cells[move.combination[0].Row][move.combination[0].Column].Owner == Owner.Player); if (moves.Count == 0) { moves = Analytics.AllMoves(cells); } int randomIndex = rand.Next(0, moves.Count); return(new System.Tuple <Position, Position>(moves[randomIndex].combination[0], moves[randomIndex].combination[1])); }
public System.Tuple <Position, Position> Move(List <List <ICell> > cells) { var moves = Analytics.AllMoves(cells); List <Dictionary <Owner, double> > dictList = new List <Dictionary <Owner, double> >(); foreach (var move in moves) { var damageDictionary = new Dictionary <Owner, double>(); var LocalField = new List <List <ICell> >(); for (int i = 0; i < cells.Count; i++) { LocalField.Add(new List <ICell>(cells.Count)); for (int j = 0; j < cells.Count; j++) { LocalField[i].Add(cells[i][j]); } } ICell tempCell = LocalField[move.combination[0].Row][move.combination[0].Column]; LocalField[move.combination[0].Row][move.combination[0].Column] = LocalField[move.combination[1].Row][move.combination[1].Column]; LocalField[move.combination[1].Row][move.combination[1].Column] = tempCell; do { var dictionary = Analytics.Remove(LocalField, Owner.Player); foreach (var pair in dictionary) { if (!damageDictionary.ContainsKey(pair.Key)) { damageDictionary[pair.Key] = 0; } damageDictionary[pair.Key] += pair.Value; } }while (Analytics.HasCombinations(LocalField)); dictList.Add(damageDictionary); } double maxValue = 0.0; int maxPositon = 0; foreach (var pair in dictList[0]) { if (pair.Key == Owner.Player) { maxValue += pair.Value; } else { maxValue -= pair.Value; } } for (int i = 0; i < dictList.Count; i++) { double localValue = 0.0; foreach (var pair in dictList[i]) { if (pair.Key != Owner.Player) { localValue += pair.Value; } else { localValue -= pair.Value; } } if (localValue > maxValue) { maxPositon = i; maxValue = localValue; } } return(new System.Tuple <Position, Position>(moves[maxPositon].combination[0], moves[maxPositon].combination[1])); }