public static ISearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost> Create()
        {
            var expander = new SpriteGeneratorNodeExpander();
            var strategy = new TreeSearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost>(expander);
            Func <IQueue <SpriteGeneratorSearchNode> > queue = () => new Adapters.QueueAdapter <SpriteGeneratorSearchNode, IntegerCost>();

            return(new AStarSearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost>(strategy, queue));
        }
        public static ISearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost> Create(int maxCycles)
        {
            var expander = new SpriteGeneratorNodeExpander();
            var strategy = new TreeSearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost>(expander);

            var maxCost = (IntegerCost)maxCycles;

            return(new IterativeDeepeningAStarSearch <CodeSequence, SpriteGeneratorState, SpriteGeneratorSearchNode, IntegerCost>(strategy, maxCost));
        }