public void GameClassDisplaysBoardAtEachMove() { Board board = new Board(3); Mock<IPlayer> player1 = new Mock<IPlayer>(); player1.Setup(player => player.GetCharacterType()).Returns(BoardCharacter.X); Mock<IPlayer> player2 = new Mock<IPlayer>(); player2.Setup(player => player.GetCharacterType()).Returns(BoardCharacter.Zero); var firstPlayerMoves = new Queue<Tuple<int, int>>(new[] { Tuple.Create(0, 0), Tuple.Create(0, 1), Tuple.Create(0, 2) }); player1.Setup(player => player.MakeMove(board)).Returns(() => firstPlayerMoves.Dequeue()); var secondPlayerMoves = new Queue<Tuple<int, int>>(new[] { Tuple.Create(1, 0), Tuple.Create(1, 1) }); player2.Setup(player => player.MakeMove(board)).Returns(() => secondPlayerMoves.Dequeue()); Game game = new Game(board, player1.Object, player2.Object, gameSubscriber.Object, 0); game.Run(); gameSubscriber.Verify(g => g.GameUpdate(It.Is<string>(s => s == "X _ _\n_ _ _\n_ _ _")), Times.Once()); gameSubscriber.Verify(g => g.GameUpdate(It.Is<string>(s => s == "X _ _\nO _ _\n_ _ _")), Times.Once()); gameSubscriber.Verify(g => g.GameUpdate(It.Is<string>(s => s == "X X _\nO _ _\n_ _ _")), Times.Once()); gameSubscriber.Verify(g => g.GameUpdate(It.Is<string>(s => s == "X X _\nO O _\n_ _ _")), Times.Once()); gameSubscriber.Verify(g => g.GameUpdate(It.Is<string>(s => s == "X X X\nO O _\n_ _ _")), Times.Once()); }
public void GameClassDisplaysBoardAtStartOfGame() { Board board = new Board(3); IPlayer player1 = new ComputerPlayer(BoardCharacter.X); IPlayer player2 = new ComputerPlayer(BoardCharacter.Zero); Game game = new Game(board, player1, player2, gameSubscriber.Object, 0); game.Run(); gameSubscriber.Verify(g => g.GameBegin(It.Is<string>(s => IsEmptyBoard(s))), Times.Once()); }
public void PlayGame() { bool playGame = true; Console.WriteLine("Do you want to play a game? (Y/N)"); while (playGame) { if (Console.ReadLine() != "Y") { playGame = false; } else { Game game = new Game(new Board(3), new ComputerPlayer(BoardCharacter.X), new ComputerPlayer(BoardCharacter.Zero), this); game.Run(); } Console.WriteLine("Do you want to play another game? (Y/N)"); } }
public void GameClassDisplaysMoveUpdatesAfter1Second() { Board board = new Board(3); Mock<IPlayer> player1 = new Mock<IPlayer>(); player1.Setup(player => player.GetCharacterType()).Returns(BoardCharacter.X); Mock<IPlayer> player2 = new Mock<IPlayer>(); player2.Setup(player => player.GetCharacterType()).Returns(BoardCharacter.Zero); var firstPlayerMoves = new Queue<Tuple<int, int>>(new[] { Tuple.Create(0, 0), Tuple.Create(0, 1), Tuple.Create(2, 0), Tuple.Create(2, 1), Tuple.Create(1, 2) }); player1.Setup(player => player.MakeMove(board)).Returns(() => firstPlayerMoves.Dequeue()); var secondPlayerMoves = new Queue<Tuple<int, int>>(new[] { Tuple.Create(1, 0), Tuple.Create(1, 1), Tuple.Create(0, 2), Tuple.Create(2, 2) }); player2.Setup(player => player.MakeMove(board)).Returns(() => secondPlayerMoves.Dequeue()); Game game = new Game(board, player1.Object, player2.Object, gameSubscriber.Object); List<DateTime> updateTimes = new List<DateTime>(); gameSubscriber.Setup(x => x.GameUpdate(It.IsAny<string>())).Callback(() => updateTimes.Add(DateTime.Now)); DateTime start = DateTime.Now; game.Run(); DateTime previousDateTime = start; foreach (var updateTime in updateTimes) { Assert.IsTrue(updateTime - previousDateTime > new TimeSpan(0,0,0,0,900)); Assert.IsTrue(updateTime - previousDateTime < new TimeSpan(0, 0, 0, 1, 100)); previousDateTime = updateTime; } }