コード例 #1
0
        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());
        }
コード例 #2
0
 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());
 }
コード例 #3
0
ファイル: TicTacToeGui.cs プロジェクト: zarzavat/TicTacToe
        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)");

            }
        }
コード例 #4
0
        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;
            }
        }