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);
        }
예제 #2
0
        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);
        }