public GameCell GetCell(GameCell[] cells, GameSideEnum computerGameSide)
        {
            var emptyCells  = cells.Where(d => d.GameSide == null).ToArray();
            var cornerNames = new[] { "1.1", "1.3", "3.1", "3.3" };

            var cornerCells = cells.Where(d => cornerNames.Contains(d.Cell.Name)).ToArray();
            int cellNumber;

            if (emptyCells.Length == cells.Length)
            {
                cellNumber = new Random().Next(0, cornerCells.Count() - 1);
                return(cornerCells[cellNumber]);
            }

            var cellGroups      = CellGroupsHelper.ExecuteStructuredGroups(cells);
            var dangerDirection = cellGroups.FirstOrDefault(d => d.OccupiedGameCells.Count(s => s.GameSide != computerGameSide) == 2 && d.AvailableGameCells.Count > 0);

            if (dangerDirection != null)
            {
                return(dangerDirection.AvailableGameCells.First());
            }

            var availableByDirections =
                cellGroups.Where(d => d.AvailableGameCells.Count > 0).ToArray();
            var directionNumber = new Random().Next(0, availableByDirections.Length);
            var cellGroup       = availableByDirections[directionNumber];

            if (cellGroup != null && cellGroup.AvailableGameCells.Count() == 1)
            {
                return(cellGroup.AvailableGameCells[0]);
            }

            cellNumber = new Random().Next(0, cellGroup.AvailableGameCells.Count - 1);
            return(cellGroup.AvailableGameCells.ToArray()[cellNumber]);
        }
Esempio n. 2
0
        public GameCell Execute(int currentGameId, GameSideEnum computerGameSide, ISelectorStrategy selectorStrategy)
        {
            var cells = _gameCellService.GetAll(currentGameId).ToArray();

            GameCell gameCell = selectorStrategy.GetCell(cells, computerGameSide);

            return(gameCell);
        }
Esempio n. 3
0
        public GameCell GetCell(GameCell[] cells, GameSideEnum computerGameSide)
        {
            var emptyCells = cells.Where(d => d.GameSide == null).ToArray();

            if (emptyCells.Count() == 1)
            {
                return(emptyCells[0]);
            }
            var cellNumber = new Random().Next(0, emptyCells.Count() - 1);

            return(emptyCells[cellNumber]);
        }
        public Player GetComputerPlayer(GameSideEnum gameSide)
        {
            var player = _playerRepository.GetComputerPlayer((int)gameSide);

            return(ConvertToMVCPlayer(player));
        }