Exemplo n.º 1
0
        private bool HasWinner(out Players winner)
        {
            var winningCellOccupiedBy = CellOccupiedBy.None;

            //check verticals
            for (var i = 0; i < 3; i++)
            {
                //vertical
                if (!_grid.IsCellVacant(i, 0) &&
                    _grid.GetCellOccupiedBy(i, 0) == _grid.GetCellOccupiedBy(i, 1) &&
                    _grid.GetCellOccupiedBy(i, 1) == _grid.GetCellOccupiedBy(i, 2))
                {
                    winningCellOccupiedBy = _grid.GetCellOccupiedBy(i, 0);
                }

                //horizontal
                if (!_grid.IsCellVacant(0, i) &&
                    _grid.GetCellOccupiedBy(0, i) == _grid.GetCellOccupiedBy(1, i) &&
                    _grid.GetCellOccupiedBy(0, i) == _grid.GetCellOccupiedBy(2, i))
                {
                    winningCellOccupiedBy = _grid.GetCellOccupiedBy(0, i);
                }
            }


            //check diagonals
            if (!_grid.IsCellVacant(1, 1))
            {
                if (_grid.GetCellOccupiedBy(1, 1) == _grid.GetCellOccupiedBy(0, 0) &&
                    _grid.GetCellOccupiedBy(1, 1) == _grid.GetCellOccupiedBy(2, 2))
                {
                    winningCellOccupiedBy = _grid.GetCellOccupiedBy(1, 1);
                }

                if (_grid.GetCellOccupiedBy(1, 1) == _grid.GetCellOccupiedBy(2, 0) &&
                    _grid.GetCellOccupiedBy(1, 1) == _grid.GetCellOccupiedBy(0, 2))
                {
                    winningCellOccupiedBy = _grid.GetCellOccupiedBy(1, 1);
                }
            }

            winner = (Players)winningCellOccupiedBy;

            return(winningCellOccupiedBy != CellOccupiedBy.None);
        }