Beispiel #1
0
        private IEnumerable <GuessGrid> RunStrategies(StrategyBoard board)
        {
            var progress = 1 - (float)board.RawCount / (board.Size.Width * board.Size.Height);

            if (progress >= .1)
            {
                var countStrategy = new CountStrategy(board);
                Console.WriteLine("Run count strategy");

                var countGuesses = countStrategy.Guess().ToArray();
                if (countGuesses.Any())
                {
                    return(countGuesses);
                }
            }

            if (progress >= .4)
            {
                var bruteForceStrategy = new BruteForceStrategy(board, progress < .7 ? 5 : 8);
                Console.WriteLine("Run brute-force strategy");

                var bruteForceGuesses = bruteForceStrategy.Guess().ToArray();
                if (bruteForceGuesses.Any())
                {
                    var confirmedBruteForceGuesses = bruteForceGuesses.Where(t => t.Confidence >= 1).ToArray();
                    if (confirmedBruteForceGuesses.Any())
                    {
                        return(confirmedBruteForceGuesses);
                    }

                    var probableBruteForceGuesses = bruteForceGuesses.OrderByDescending(t => t.Confidence).First();
                    return(new[] { probableBruteForceGuesses });
                }
            }

            if (progress <= .1)
            {
                var startCount = (int)((float)board.RawCount / board.BombCount * 3);

                var startStrategy = new RandomStrategy(board);
                Console.WriteLine("Run start strategy");

                var startGuesses = startStrategy.Guess().Take(startCount).ToArray();
                if (startGuesses.Any())
                {
                    return(startGuesses);
                }
            }

            var randomStrategy = new RandomStrategy(board);

            Console.WriteLine("Run random strategy");

            var randomGuesses = randomStrategy.Guess();

            if (randomGuesses.Any())
            {
                var probableRandomGuesses = randomGuesses.OrderByDescending(t => t.Confidence).First();
                return(new[] { probableRandomGuesses });
            }

            return(new GuessGrid[0]);
        }