private bool recurseGetPath(int count, int pathIndex, int playerIndex, BoardPosition currentPosition, bool forward, ref List <MovePath> result) { if (pathIndex >= 0 || pathIndex < result.Count) { result[pathIndex].Add(currentPosition); } int distance = Math.Abs(count); if (distance > 0) { List <BoardPosition> nextPositions = new List <BoardPosition>(2); if (_board.GetNextPositions(currentPosition, playerIndex, forward, ref nextPositions)) { if (nextPositions.Count == 0) { return(false); } if (nextPositions.Count > 1) { result.Add(MovePath.Clone(result[result.Count - 1])); } for (int i = 0; i < nextPositions.Count; ++i) { recurseGetPath(distance - 1, pathIndex + i, playerIndex, nextPositions[i], forward, ref result); } } else { _invalidPathStack.Push(pathIndex); } } return(true); }