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