static void Main(string[] args) { int delay = 400; int xWins = 0; int oWins = 0; int ties = 0; var sw = Stopwatch.StartNew(); var loop = Parallel.For(0, 1000 * 100, i => { var game = new Game(new Switcher(), new WinDectector(), new TieDetector(), new Grid(new TileFactory<Tile>()), new FirstPlayer("1", Piece.X, new ValidMoveGetter()), new RandomPlayer("2", Piece.O, new ValidMoveGetter())); GameResults status; for (;;) { //Thread.Sleep(delay); status = game.PerformMove(); //DrawGrid(game.Grid); if (status.IsFinished) break; } if (status.Winner == null) Interlocked.Increment(ref ties); else if (status.Winner.Piece == Piece.X) Interlocked.Increment(ref xWins); else Interlocked.Increment(ref oWins); //Thread.Sleep(delay); //Console.WriteLine("winner: " + (status.Winner == null ? "Tie" : status.Winner.Name)); //Thread.Sleep(delay); }); while (!loop.IsCompleted) Thread.Sleep(1000); Console.WriteLine("Time: " + sw.ElapsedMilliseconds); Console.WriteLine("Ties: " + ties); Console.WriteLine("X: " + xWins); Console.WriteLine("O: " + oWins); Console.Read(); }
public void RunGames(IPlayer playerOne, IPlayer playerTwo, int count = 1) { for (int i = 0; i < count; i++) { var game = new Game(new Switcher(), new WinDectector(), new TieDetector(), new Grid(new TileFactory<Tile>()), playerOne, playerTwo); GameResults status; for (;;) { status = game.PerformMove(); if (status.IsFinished) break; } } }