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]); }
public GameCell Execute(int currentGameId, GameSideEnum computerGameSide, ISelectorStrategy selectorStrategy) { var cells = _gameCellService.GetAll(currentGameId).ToArray(); GameCell gameCell = selectorStrategy.GetCell(cells, computerGameSide); return(gameCell); }
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)); }