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; }
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; }