예제 #1
0
 public void SetupFirstMoveToGrid(GridCoordinate gridCoordinate, BoardCellColor color)
 {
     m_color = color;
     m_startCoordinate.m_isOnGrid     = false;
     m_endCoordinate.m_isOnGrid       = true;
     m_endCoordinate.m_gridCoordinate = gridCoordinate;
 }
예제 #2
0
    private void ValidateIfStartColorMatches(BoardCellColor color, GridCoordinate gridCoordinate)
    {
        var isColorCorrect = m_board.GetCellColor(gridCoordinate) == color;

        if (!isColorCorrect)
        {
            throw new Exception("Start coordinate and start color don't match.");
        }
    }
예제 #3
0
    private bool IsWinByMainDiagonal(BoardCellColor playerColor)
    {
        var path = new List <GridCoordinate>();

        for (var i = 0; i < m_board.GetBoardSize(); ++i)
        {
            path.Add(new GridCoordinate(i, i));
        }

        return(IsPathWinning(path, playerColor));
    }
예제 #4
0
        private ImageBrush GetColorFromVM(BoardCellColor color)
        {
            switch (color)
            {
            case BoardCellColor.Dark:
                return(new ImageBrush(new BitmapImage(DARK_SQUARE_URI)));

            case BoardCellColor.Light:
                return(new ImageBrush(new BitmapImage(LIGHT_SQUARE_URI)));

            default:
                throw new NotImplementedException();
            }
        }
예제 #5
0
    private bool IsWinBySecondaryDiagonal(BoardCellColor playerColor)
    {
        var boardSize = m_board.GetBoardSize();
        var path      = new List <GridCoordinate>();

        for (var i = 0; i < boardSize; ++i)
        {
            var row = i;
            var col = boardSize - i - 1;
            path.Add(new GridCoordinate(row, col));
        }

        return(IsPathWinning(path, playerColor));
    }
예제 #6
0
    private bool IsPathWinning(List <GridCoordinate> path, BoardCellColor playerColor)
    {
        var matchCounter = 0;

        foreach (var cell in path)
        {
            if (playerColor == m_board.GetCellColor(cell))
            {
                ++matchCounter;
            }
        }

        return(matchCounter == m_board.GetBoardSize());
    }
예제 #7
0
    private bool IsWinByColumn(BoardCellColor playerColor)
    {
        var boardSize = m_board.GetBoardSize();

        for (var col = 0; col < boardSize; ++col)
        {
            var path = new List <GridCoordinate>();
            for (var row = 0; row < boardSize; ++row)
            {
                path.Add(new GridCoordinate(row, col));
            }

            if (IsPathWinning(path, playerColor))
            {
                return(true);
            }
        }

        return(false);
    }
 private void SwitchPlayer()
 {
     m_colorToMove = m_colorToMove == BoardCellColor.Blue ? BoardCellColor.White : BoardCellColor.Blue;
 }
예제 #9
0
 public MoveData(BoardCellColor color, BoardCoordinate start, BoardCoordinate end)
 {
     m_color           = color;
     m_startCoordinate = start;
     m_endCoordinate   = end;
 }
예제 #10
0
 public bool IsWinDetected(BoardCellColor playerColor)
 {
     return(IsWinByRow(playerColor) || IsWinByColumn(playerColor) ||
            IsWinByMainDiagonal(playerColor) || IsWinBySecondaryDiagonal(playerColor));
 }
예제 #11
0
 private void SetCellColor(GridCoordinate coordinates, BoardCellColor color)
 {
     m_board[coordinates.GetRow()][coordinates.GetColumn()] = color;
 }