private int Eval(CellPosition pt, Player player, bool isRec) { var result = 0; var mr = Rows - 1; var mc = Columns - 1; if (pt.IsCorner(mr, mc)) { result += 10; } else if (pt.IsCornerAdjacent(mr, mc)) { result -= 3; } if (pt.IsBorder(mr, mc)) { result += 5; } var rpt = GetReversibleCellPositions(pt, player); result += rpt.Length; var record = ""; foreach (var r in _record) record += r.ToString(); if (isRec) { GoNext(pt); foreach (var ppt in GetPlaceableCellPositions(_currentPlayer)) { var ev = Eval(ppt, _currentPlayer, false); if (ev > 10) result -= (ev - 8); } } Reset(CellPosition.ParseList(record)); return result; }