public int generateMoveContext(MoveContext context, int minCount, List <MoveContext> list) { List <MoveContext> tmpList = new List <MoveContext>(); MoveContext currContext = null; if (context.CurrDepth >= maxDepth || !context.BoardState.arePieces()) { return(0); } bool isCapture = context.addChildBoardStates(moveFinder); int childsCount = context.ChildsContext.Count; int addedContext = childsCount; if (childsCount == 0) { return(0); } while (context.ChildsContext.Count > 0) { list.Add(context.ChildsContext.Pop()); } if (isCapture) { return(-childsCount); } if (childsCount >= minCount) { return(childsCount); } while (true) { for (int i = 0; i < addedContext; i++) { currContext = list[list.Count - i - 1]; currContext.addChildBoardStates(moveFinder); childsCount += currContext.ChildsContext.Count; while (currContext.ChildsContext.Count > 0) { tmpList.Add(currContext.ChildsContext.Pop()); } } list.AddRange(tmpList); tmpList.Clear(); if (childsCount == 0 || childsCount >= minCount || currContext.CurrDepth >= maxDepth) { return(childsCount); } addedContext = childsCount; childsCount = 0; } }