public override IEnumerable<SingleGameResult> SimulateGames(Assembly firstAssembly, Assembly secondAssembly, int count) { // TODO: Decorate with time and memory limit // TODO: What if someone crashes? var firstPlayer = this.LoadPlayer<IPlayer>(firstAssembly); var secondPlayer = this.LoadPlayer<IPlayer>(secondAssembly); var gameResults = new List<SingleGameResult>(); for (var i = 0; i < count; i++) { var game = new SantaseGame(firstPlayer, secondPlayer); var firstToPlay = i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer; var stopwatch = Stopwatch.StartNew(); var gameWinner = game.Start(firstToPlay); var elapsed = stopwatch.Elapsed; var report = $"First: {firstToPlay}; Result: {game.FirstPlayerTotalPoints} - {game.SecondPlayerTotalPoints} (in {game.RoundsPlayed} rounds) Time: {elapsed}"; var gameResult = new SingleGameResult( gameWinner == PlayerPosition.FirstPlayer ? BattleGameWinner.First : BattleGameWinner.Second, report); gameResults.Add(gameResult); } return gameResults; }
private int SimulateGamesAndGetSmartPlayerWins(int gamesToSimulate) { var smartPlayer = new SmartPlayer(); var smartPlayerWins = 0; var dummyPlayer = new DummyPlayer(); var game = new SantaseGame(smartPlayer, dummyPlayer); for (var i = 0; i < gamesToSimulate; i++) { var winner = game.Start(i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer); if (winner == PlayerPosition.FirstPlayer) { smartPlayerWins++; } } // Console.WriteLine(smartPlayerWins); return smartPlayerWins; }
public void WinnersShouldBeEquallyDistributed() { const int GamesToPlay = 200; var firstPlayer = new ValidPlayerWithMethodsCallCounting(); var secondPlayer = new ValidPlayerWithMethodsCallCounting(); var firstPlayerWinner = 0; var secondPlayerWinner = 0; for (var i = 0; i < GamesToPlay; i++) { var firstToPlay = i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer; var game = new SantaseGame(firstPlayer, secondPlayer); var winner = game.Start(firstToPlay); if (winner == PlayerPosition.FirstPlayer) { firstPlayerWinner++; } else if (winner == PlayerPosition.SecondPlayer) { secondPlayerWinner++; } } Assert.AreEqual(GamesToPlay, firstPlayerWinner + secondPlayerWinner); Assert.IsTrue(Math.Abs(firstPlayerWinner - secondPlayerWinner) < 150); }
public void StartGameShouldReturnOneOfThePlayersAsWinner() { var firstPlayer = new ValidPlayerWithMethodsCallCounting(); var secondPlayer = new ValidPlayerWithMethodsCallCounting(); var game = new SantaseGame(firstPlayer, secondPlayer); var winner = game.Start(); Assert.IsTrue(winner != PlayerPosition.NoOne); }
public void PlayersMethodsShouldBeCalledCorrectNumberOfTimes() { const int GamesToPlay = 200; var firstPlayer = new ValidPlayerWithMethodsCallCounting(); var secondPlayer = new ValidPlayerWithMethodsCallCounting(); for (var i = 0; i < GamesToPlay; i++) { var firstToPlay = i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer; var game = new SantaseGame(firstPlayer, secondPlayer); game.Start(firstToPlay); } // StartGame() Assert.AreEqual(GamesToPlay, firstPlayer.StartGameCalledCount); Assert.AreEqual(GamesToPlay, secondPlayer.StartGameCalledCount); // EndGame() Assert.AreEqual(GamesToPlay, firstPlayer.EndGameCalledCount); Assert.AreEqual(GamesToPlay, secondPlayer.EndGameCalledCount); // StartRound() Assert.GreaterOrEqual( firstPlayer.StartRoundCalledCount, 4 * GamesToPlay, "Not started at least 4 rounds per game for the first player"); Assert.GreaterOrEqual( secondPlayer.StartRoundCalledCount, 4 * GamesToPlay, "Not started at least 4 rounds per game for the second player"); // EndRound() Assert.GreaterOrEqual( firstPlayer.EndRoundCalledCount, GamesToPlay * 4, "Not ended at least 4 rounds per game for the first player"); Assert.GreaterOrEqual( secondPlayer.EndRoundCalledCount, GamesToPlay * 4, "Not ended at least 4 rounds per game for the second player"); // GetTurn() and EndTurn() Assert.IsTrue(firstPlayer.GetTurnWhenFirst > GamesToPlay * 10); Assert.IsTrue(firstPlayer.GetTurnWhenSecond > GamesToPlay * 10); Assert.IsTrue(firstPlayer.EndTurnCalledCount > GamesToPlay * 10); Assert.IsTrue(secondPlayer.GetTurnWhenFirst > GamesToPlay * 10); Assert.IsTrue(secondPlayer.GetTurnWhenSecond > GamesToPlay * 10); Assert.IsTrue(secondPlayer.EndTurnCalledCount > GamesToPlay * 10); }
public static void Main() { Console.BufferHeight = Console.WindowHeight = 17; Console.BufferWidth = Console.WindowWidth = 50; ISantaseGame game = new SantaseGame( new ConsolePlayer(5, 10), new ConsolePlayer(10, 10), PlayerPosition.FirstPlayer); game.Start(); Console.WriteLine("Game finished!"); Console.WriteLine("{0} - {1}", game.FirstPlayerTotalPoints, game.SecondPlayerTotalPoints); Console.WriteLine("Round: {0}", game.RoundsPlayed); }
public static void Main() { Console.BufferHeight = Console.WindowHeight = 16; Console.BufferWidth = Console.WindowWidth = 60; ISantaseGame game = new SantaseGame( new ConsolePlayer(5, 10), new ConsolePlayer(10, 10), PlayerPosition.FirstPlayer); game.Start(); Console.WriteLine("Game over!"); Console.WriteLine("{0} - {1} in {2} rounds", game.FirstPlayerTotalPoints, game.SecondPlayerTotalPoints, game.RoundsPlayed); Console.ReadLine(); }
public void StartingGameShouldRestartTheGameToReuseGameInstance() { const int GamesToPlay = 20; var firstPlayer = new ValidPlayerWithMethodsCallCounting(); var secondPlayer = new ValidPlayerWithMethodsCallCounting(); var game = new SantaseGame(firstPlayer, secondPlayer, GameRulesProvider.Santase, new NoLogger()); for (var i = 0; i < GamesToPlay; i++) { game.Start(i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer); } Assert.True( firstPlayer.StartRoundCalledCount >= 4 * GamesToPlay, "Not started at least 4 rounds per game for the first player"); Assert.True( secondPlayer.StartRoundCalledCount >= 4 * GamesToPlay, "Not started at least 4 rounds per game for the second player"); }
private int SimulateGamesAndGetSmartPlayerWins(int gamesToSimulate) { var smartPlayer = new SmartPlayer(); var smartPlayerWins = 0; var dummyPlayer = new DummyPlayer(); var game = new SantaseGame(smartPlayer, dummyPlayer); for (var i = 0; i < gamesToSimulate; i++) { var winner = game.Start(i % 2 == 0 ? PlayerPosition.FirstPlayer : PlayerPosition.SecondPlayer); if (winner == PlayerPosition.FirstPlayer) { smartPlayerWins++; } } // Console.WriteLine(smartPlayerWins); return(smartPlayerWins); }