Пример #1
0
    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);
    }