Beispiel #1
0
        private static List <PuzzleState> ReadConfigs(Level level)
        {
            var textAsset = Resources.Load <TextAsset>(level.dataFile + "." + level.puzzleMoves);

            if (textAsset == null)
            {
                return(null);
            }

            var lines   = textAsset.text.Split('\n');
            var configs = new List <PuzzleState>();

            foreach (var line in lines)
            {
                var str = line.Trim();
                if (str.Length == 0)
                {
                    continue;
                }
                if (level.Sided)
                {
                    str = str.Substring(1);
                }
                configs.Add(PuzzleState.FromCompactString(str, level.solved.numColors, level.Sided));
            }
            return(configs);
        }
Beispiel #2
0
            public static LevelRef FromCompactString(string str)
            {
                LevelRef lr = new LevelRef();
                var      ss = str.Trim();

                if (ss.Length > 0)
                {
                    var parts = str.Split('/');
                    var type  = (Level.LevelType)Enum.Parse(typeof(Level.LevelType), parts[0]);
                    var cc    = PuzzleState.FromCompactString(parts[1]);
                    lr = new LevelRef(type, cc);
                }
                return(lr);
            }
Beispiel #3
0
        /// <summary>
        /// Reads a solution tree from a text file.
        /// </summary>
        /// TODO: has side effects, should be reprogrammed -- Seu
        /// <returns></returns>
        private CCTrie LoadTree()
        {
            var file = Resources.Load <TextAsset>(dataFile);

            if (file == null)
            {
                return(null);
            }

            var tree = new CCTrie(solved);

            int numBeforeHardest = puzzleMoves == 1 ? 0 : puzzlesPerLevel.Take(puzzleMoves - 1).Aggregate((ppl, sum) => ppl + sum);

            var initialStates = new List <PuzzleState>();

            int read      = 0;
            int first     = Sided ? 1 : 0;
            int numPieces = solved.Count;

            string[] leaves = file.text.Split('\n');
            foreach (var leaf in leaves)
            {
                string str = leaf.Trim();
                if (str.Length == 0)
                {
                    continue;
                }
                PuzzleState cc   = PuzzleState.FromCompactString(str.Substring(first, numPieces), solved.numColors, Sided);
                Move        move = Move.FromChar(str[first + numPieces]);
                tree.Add(cc, move);

                if (read >= numBeforeHardest && read < numBeforeHardest + puzzlesPerLevel[puzzleMoves - 1])
                {
                    initialStates.Add(cc);
                }
                read++;
            }

            if (initialStates.Count == 0)
            {
                Debug.LogErrorFormat("No initial states from Tree on level {0}", this.Ref);
            }

            InitialConfigs = initialStates.ToArray();

            return(tree);
        }