public void testBot() { int attemptsCount = 0; char[] solution = { '5', '2', '1', '1', '7', '4', '5', '3' }; Attempt attempt; MastermindFitnessCalculator mastermindFitnessCalculator = new MastermindFitnessCalculator(); char[] firstGuess = { '1', '1', '1', '1', '2', '2', '3', '3' }; attempt = testGuess(firstGuess, solution); mastermindFitnessCalculator.addPreviousAttempt(attempt); do { GeneticAlgorithm ga = new GeneticAlgorithm(mastermindFitnessCalculator); char[] guess = ga.calculateNextGuess(20); attempt = testGuess(guess, solution); mastermindFitnessCalculator.addPreviousAttempt(attempt); attemptsCount++; Console.WriteLine("Attempt: {0}, Guess: {1}, Exact: {2}, Near: {3}", attemptsCount, printArray(attempt.Guess), attempt.Exact, attempt.Near); }while (attempt.Exact != 8 && attemptsCount <= 25); Console.WriteLine("Number of Attemps: " + attemptsCount); Assert.AreEqual(8, attempt.Exact); Assert.IsTrue(attemptsCount <= 25, "Bot didn't guess the right secret code in less than 25 attempts."); }
public void botGuess() { if (!_games.Keys.Contains(Context.ConnectionId)) { Clients.Client(Context.ConnectionId).postHistory("Error", "Start a new game before sending guesses"); return; } GameData gameData = _games[Context.ConnectionId]; string guess; if (gameData.previousAttempts.Count == 0) { guess = "11112233"; // Fixed first guess; } else { MastermindFitnessCalculator mastermindFitnessCalculator = new MastermindFitnessCalculator(); mastermindFitnessCalculator.setPreviousAttempts(gameData.previousAttempts); GeneticAlgorithm ga = new GeneticAlgorithm(mastermindFitnessCalculator); char[] guessArray = ga.calculateNextGuess(20); guess = new string(guessArray); } GuessRequest request = new GuessRequest() { game_key = _games[Context.ConnectionId].game_key, code = AxiomzenMastermind.convertGuess(guess) }; GuessResponse response = AxiomzenMastermind.guess(request); gameData.previousAttempts.Add(new Attempt() { Guess = guess.ToCharArray(), Exact = response.result.exact, Near = response.result.near }); Clients.Client(Context.ConnectionId).postHistory("Guess", string.Format("Code: {0}, Exact: {1}, Near: {2}, Attempts: {3}", guess, response.result.exact, response.result.near, response.num_guesses)); if (response.solved) { Clients.Client(Context.ConnectionId).postHistory("Congratulations!", "You guessed the secret code!"); } }