private LinkedList <ComputerValidOptionNode> computerRandomMoveOptionList() { eOptionalMoves direction = eOptionalMoves.InvalidMove; LinkedList <ComputerValidOptionNode> validOptionList = new LinkedList <ComputerValidOptionNode>(); ComputerValidOptionNode currentNode; for (int i = 0; i < m_Board.Size; i++) { for (int j = 0; j < m_Board.Size; j++) { foreach (eOptionalMoves currentDirection in Enum.GetValues(typeof(eOptionalMoves))) { if (m_MovementValidation.IsCorrectPlayerIsInCell(m_Board[i, j])) { if (m_MovementValidation.ValidMoveByType(i, j, currentDirection) && m_MovementValidation.ValidInstrumentDirection(m_Board[i, j], currentDirection)) { currentNode = new ComputerValidOptionNode(i, j, currentDirection); validOptionList.AddFirst(currentNode); } } } } } return(validOptionList); }
private void computerRandomMove() { Random random = new Random(); LinkedList <ComputerValidOptionNode> validOptionList = computerRandomMoveOptionList(); LinkedListNode <ComputerValidOptionNode> listIterator = validOptionList.First; ComputerValidOptionNode chosenNode = null; int index = random.Next(0, validOptionList.Count); while (chosenNode == null) { listIterator = validOptionList.First; for (int i = 0; i < index; i++) { listIterator = listIterator.Next; } index = random.Next(0, validOptionList.Count); chosenNode = listIterator.Value; } chosenNode = listIterator.Value; computerMakeMove(chosenNode.RowIndex, chosenNode.ColIndex, chosenNode.Direction); }