Пример #1
0
        private int GetCellCoordinatesSuitableForBlockFork(Board board, char mark)
        {
            foreach (var emptyCell in board.EmptyCells)
            {
                var imaginaryBoard = board.GetCopyWithExtraCellOfType(mark, emptyCell);

                var winStrategy = new WinStrategy(myMark, opponentsMark);
                if (winStrategy.CanHandle(imaginaryBoard, mark))
                {
                    return emptyCell;
                }
            }

            return INVALID_COORDINATE;
        }
Пример #2
0
        private int GetCellCoordinatesSuitableForFork(Board board, char mark)
        {
            foreach (var emptyCell in board.EmptyCells)
            {
                int suitableLines = 0;

                var imaginaryBoard = board.GetCopyWithExtraCellOfType(mark, emptyCell);

                foreach (var line in board.Lines)
                {
                    if (IsLineSuitableForAFork(imaginaryBoard, line))
                        suitableLines++;
                }

                if (suitableLines >= MINIMUM_LINES_TO_FORK)
                    return emptyCell;
            }

            return INVALID_COORDINATE;
        }