예제 #1
0
        private bool TryWinningBackwardDiagonal(GameBoardMark[,] gameBoard, out GameBoardState gameBoardState)
        {
            int rowLength    = gameBoard.GetLength(0);
            int columnLength = gameBoard.GetLength(1);

            var           winningBackwardDiagonal = true;
            int           rowIndex = 0, columnIndex = 0;
            GameBoardMark matchingMark = gameBoard[rowIndex, columnIndex];

            for (; rowIndex < rowLength && columnIndex < columnLength; rowIndex++, columnIndex++)
            {
                if (gameBoard[rowIndex, columnIndex] != matchingMark)
                {
                    winningBackwardDiagonal = false;
                    break;
                }
            }

            if (matchingMark == GameBoardMark.Empty)
            {
                gameBoardState = GameBoardState.Active;
                return(false);
            }

            gameBoardState = winningBackwardDiagonal && matchingMark == GameBoardMark.X ? GameBoardState.XWinner
                                 : GameBoardState.OWinner;

            return(winningBackwardDiagonal);
        }
예제 #2
0
        public void IsValidMove_WhenMoveLocationOccupied_ReturnsFalse(GameBoardMark gameBoardMark)
        {
            bool actual = systemUnderTest.IsValidMove(new Move(Player.X, 0, 0), GameState.NewGameXMove,
                                                      new[, ] {
                { gameBoardMark }
            });

            Assert.IsFalse(actual);
        }
예제 #3
0
        public void SetUp()
        {
            board = new GameBoardMark[0, 0];

            gameBoardMock = Substitute.For <IGameBoard>();
            gameBoardMock.Board.Returns(board);

            moveValidatorMock = Substitute.For <IMoveValidator>();
            SetUpIsValidMove(true);

            gameBoardAnalyzerMock = Substitute.For <IGameBoardAnalyzer>();
            gameBoardAnalyzerMock.AnalyzeGameBoard(board).Returns(GameBoardState.Active);

            systemUnderTest = NewGameEngine(gameBoardMock, moveValidatorMock, gameBoardAnalyzerMock);

            move = new Move(Player.X, 0, 0);
        }
예제 #4
0
        private string GetDrawImage(GameBoardMark gameBoardMark)
        {
            if (gameBoardMark == GameBoardMark.Empty)
            {
                return(" ");
            }

            if (gameBoardMark == GameBoardMark.X)
            {
                return("X");
            }

            if (gameBoardMark == GameBoardMark.O)
            {
                return("O");
            }

            throw new ArgumentOutOfRangeException();
        }
예제 #5
0
        private void DrawGameBoardMark(Button button, int row, int column)
        {
            GameBoardMark gameBoardMark = gameEngine.GameBoard[row, column];

            if (gameBoardMark == GameBoardMark.Empty)
            {
                SetText(button, "");
            }
            else if (gameBoardMark == GameBoardMark.X)
            {
                SetText(button, "X");
                SetEnabled(button, false);
            }
            else if (gameBoardMark == GameBoardMark.O)
            {
                SetText(button, "O");
                SetEnabled(button, false);
            }
            else
            {
                throw new ArgumentOutOfRangeException();
            }
        }