public void Play(Game game) { int selected = -1; if (game.Sequences.Exists(x => x.Progress == game.SequenceLength - 1 && x.Owner == this.Id && !x.Blocked)) { var numbers = game.Sequences.Where(x => x.Progress == game.SequenceLength - 1 && x.Owner == this.Id && !x.Blocked).First().Numbers; foreach (var num in numbers) { if (game.GeneratedNumbers[num].Owner == 0) { selected = num; break; } } } else { var availableNumbers = game.GeneratedNumbers.Values.Where(x => x.Owner == 0).ToList(); var tmp = r.Next(availableNumbers.Count); selected = availableNumbers[tmp].Value; } this.PlayerNumbers.Add(selected); game.GeneratedNumbers[selected].Owner = this.Id; Sequence.UpdateSequences(game, selected, this.Id); }
public void Play(Game game) { int selected = this.GetValue(); this.PlayerNumbers.Add(selected); game.GeneratedNumbers[selected].Owner = this.Id; Sequence.UpdateSequences(game, selected, this.Id); }
public void Play(Game game) { int selected = -1; if (game.Sequences.Exists(x => x.Progress == game.SequenceLength - 1 && x.Owner == this.Id && !x.Blocked)) { var numbers = game.Sequences.Where(x => x.Progress == game.SequenceLength - 1 && x.Owner == this.Id && !x.Blocked).First().Numbers; foreach (var num in numbers) { if (game.GeneratedNumbers[num].Owner == 0) { selected = num; break; } } } else { int max = game.Sequences.Max(x => x.Progress); bool longestSequenceOwner = game.Sequences.Exists(x => x.Progress == max && x.Owner == this.Id); bool shouldBlock = game.Sequences.Any(x => x.Progress > (int)(game.SequenceLength * Alpha) && x.Owner != this.Id && !x.Blocked); if (Aggresive) { shouldBlock &= !longestSequenceOwner; } if (!shouldBlock) //must block { var toSelect = game.Sequences.Where(x => (x.Owner == this.Id || x.Owner == 0) && !x.Blocked); if (toSelect.Any()) { selected = SelectNumber(game, toSelect); } // from enemies // select sequences with biggest progress // select sequence with biggest intersectionCount // select number with biggest number of sequences } if (shouldBlock || selected == -1) { var toBlock = game.Sequences.Where(x => x.Owner != this.Id && x.Owner != 0 && !x.Blocked); selected = SelectNumber(game, toBlock); // from mine or available // select sequences with biggest progress // select sequence with biggest intersectionCount // select number with biggest number of sequences } } this.PlayerNumbers.Add(selected); game.GeneratedNumbers[selected].Owner = this.Id; Sequence.UpdateSequences(game, selected, this.Id); }