static void Process(BatchOption option)
        {
            var ft         = new FileTool();
            var now        = DateTime.Now;
            var folder     = option.Directory;
            var dataFile   = "_data.csv";
            var dataFileGA = "_dataGA.csv";

            var files      = Directory.GetFiles(folder, "*.txt");
            var fileCount  = files.Count();
            var finders    = option.Finder.ToArray();
            var heuristics = option.Heuristic.ToArray();
            var Mutation   = option.Mutate.ToArray();
            var Crossover  = option.Crossover.ToArray();
            var Fitness    = option.Fitness.ToArray();
            var Selection  = option.Selection.Cast <SelectionEnum>().ToArray();

            var newdatafile   = !File.Exists(dataFile);
            var newdatafileGA = !File.Exists(dataFileGA);

            StreamWriter csvFile;
            StreamWriter csvGAFile;

            if (newdatafile)
            {
                csvFile = File.CreateText(dataFile);
            }
            else
            {
                csvFile = File.AppendText(dataFile);
            }

            if (newdatafileGA)
            {
                csvGAFile = File.CreateText(dataFileGA);
            }
            else
            {
                csvGAFile = File.AppendText(dataFileGA);
            }

            //csvFile = new StreamWriter(File.Open(dataFile, FileMode.OpenOrCreate), Encoding.UTF8, 4096, false);
            //csvGAFile = new StreamWriter(File.Open(dataFileGA, FileMode.OpenOrCreate), Encoding.UTF8, 4096, false);

            if (newdatafile)
            {
                csvFile.Write(new TextWrapper().GetHeader());
            }
            if (newdatafileGA)
            {
                csvGAFile.Write(new TextGAWrapper().GetHeader());
            }

            for (int i = 0; i < fileCount; i++)
            {
                var map = FileTool.ReadMapFromFile(files[i]);
                foreach (var _finder in finders)
                {
                    foreach (var _h in heuristics)
                    {
                        var h      = new HeuristicFactory().GetImplementation(_h);
                        var finder = new FinderFactory().GetImplementation(_finder);

                        if (finder is IGeneticAlgorithm)
                        {
                            for (int cross = 0; cross < Crossover.Count(); cross++)
                            {
                                for (int mut = 0; mut < Mutation.Count(); mut++)
                                {
                                    for (int fit = 0; fit < Fitness.Count(); fit++)
                                    {
                                        for (int sel = 0; sel < Selection.Count(); sel++)
                                        {
                                            for (int j = 0; j < option.GaTimes; j++)
                                            {
                                                GC.Collect();
                                                GC.WaitForPendingFinalizers();

                                                var GAFinder = (IGeneticAlgorithm) new FinderFactory().GetImplementation(_finder);
                                                GAFinder.Crossover = new CrossoverFactory().GetImplementation(Crossover[cross]);
                                                GAFinder.Mutate    = new MutateFactory().GetImplementation(Mutation[mut]);
                                                GAFinder.Fitness   = new FitnessFactory().GetImplementation(Fitness[fit]);
                                                GAFinder.Selection = new SelectionFactory().GetImplementation(Selection[sel]);

                                                var helper = $"\n                n:{j},cx:{GAFinder.Crossover.GetType().Name},m:{GAFinder.Mutate.GetType().Name},f:{GAFinder.Fitness.GetType().Name},s:{GAFinder.Selection.GetType().Name}";
                                                var csv    = new TextWrapper();
                                                csv = RunStep(csv, i, fileCount, map, h, GAFinder, option.Directory, Path.GetFileName(files[i]), helper);
                                                csvFile.Write(csv.ToString());
                                                var csvGA = new TextGAWrapper
                                                {
                                                    Alg             = csv.Alg,
                                                    MapNumber       = csv.MapNumber,
                                                    Heuristic       = csv.Heuristic,
                                                    MapTypeGenerate = csv.MapTypeGenerate,
                                                    MapDiagonal     = csv.MapDiagonal,
                                                    MapSize         = csv.MapSize,
                                                    Solution        = csv.Solution,
                                                    Time            = csv.Time,
                                                    MaxNodes        = csv.MaxNodes,
                                                    PathLength      = csv.PathLength,
                                                    Crossover       = GAFinder.Crossover.GetType().Name,
                                                    Mutation        = GAFinder.Mutate.GetType().Name,
                                                    Fitness         = GAFinder.Fitness.GetType().Name,
                                                    Selection       = GAFinder.Selection.GetType().Name,
                                                    Generations     = GAFinder.Generations.ToString(),
                                                };
                                                csvGAFile.Write(csvGA.ToString());
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            var csv = new TextWrapper();
                            csv = RunStep(csv, i, fileCount, map, h, finder, option.Directory, Path.GetFileName(files[i]));
                            csvFile.Write(csv.ToString());
                        }
                        csvFile.Flush();
                        csvGAFile.Flush();
                    }
                }
            }
            DrawTextProgressBar(fileCount, fileCount);

            csvFile.Dispose();
            csvGAFile.Dispose();
        }
Beispiel #2
0
        /**
         * <summary>Scans a content level looking for text.</summary>
         */
        /*
         * NOTE: Page contents are represented by a sequence of content objects,
         * possibly nested into multiple levels.
         */
        private void Extract(ContentScanner level, PrimitiveComposer composer)
        {
            if (level == null)
            {
                return;
            }

            while (level.MoveNext())
            {
                ContentObject content = level.Current;
                if (content is Text)
                {
                    TextWrapper text       = (TextWrapper)level.CurrentWrapper;
                    int         colorIndex = 0;
                    foreach (TextStringWrapper textString in text.TextStrings)
                    {
                        SKRect textStringBox = textString.Box.Value;
                        Console.WriteLine(
                            "Text ["
                            + "x:" + Math.Round(textStringBox.Left) + ","
                            + "y:" + Math.Round(textStringBox.Top) + ","
                            + "w:" + Math.Round(textStringBox.Width) + ","
                            + "h:" + Math.Round(textStringBox.Height)
                            + "] [font size:" + Math.Round(textString.Style.FontSize) + "]: " + textString.Text
                            );

                        // Drawing text character bounding boxes...
                        colorIndex = (colorIndex + 1) % textCharBoxColors.Length;
                        composer.SetStrokeColor(textCharBoxColors[colorIndex]);
                        foreach (TextChar textChar in textString.TextChars)
                        {
                            /*
                             * NOTE: You can get further text information
                             * (font, font size, text color, text rendering mode)
                             * through textChar.style.
                             */
                            composer.DrawPolygon(textChar.Quad.GetPoints());
                            composer.Stroke();
                        }

                        // Drawing text string bounding box...
                        composer.BeginLocalState();
                        composer.SetLineDash(new LineDash(new float[] { 5 }));
                        composer.SetStrokeColor(textStringBoxColor);
                        composer.DrawRectangle(textString.Box.Value);
                        composer.Stroke();
                        composer.End();
                    }
                }
                else if (content is XObject)
                {
                    // Scan the external level!
                    Extract(((XObject)content).GetScanner(level), composer);
                }
                else if (content is ContainerObject)
                {
                    // Scan the inner level!
                    Extract(level.ChildLevel, composer);
                }
            }
        }
        static TextWrapper RunStep(TextWrapper baseScv, int i, int fileCount, IMap map, IHeuristic h, IFinder finder, string path, string mapName, string plus = "")
        {
            var csv = baseScv;

            csv.MapNumber       = i.ToString();
            csv.MapTypeGenerate = map.MapType.ToString();
            csv.Alg             = finder.Name;
            csv.Heuristic       = h.GetType().Name;
            csv.MapDiagonal     = map.Diagonal.ToString();
            csv.MapSize         = $"{map.Width}x{map.Height}";

            Console.CursorLeft = 0;
            if (Console.CursorTop > 0)
            {
                Console.Write(new string(' ', 80));
                Console.CursorLeft = 0;
            }
            Console.WriteLine($"            ({i}) {csv.Alg} - { csv.Heuristic } - {csv.MapDiagonal} ({csv.MapSize}/{csv.MapTypeGenerate})");
            DrawTextProgressBar(i, fileCount);
            if (finder.Find(map, h))
            {
                csv.PathLength          = map.GetPath().OrderBy(x => x.G).Last().G.ToString();
                Console.ForegroundColor = ConsoleColor.Green;
                csv.Solution            = "Yes";
            }
            else
            {
                csv.Solution            = "No";
                csv.PathLength          = "-1";
                Console.ForegroundColor = ConsoleColor.Red;
            }
            map.Clear();

            csv.Time           = finder.GetProcessedTime().ToString();
            csv.MaxNodes       = map.GetMaxExpandedNodes().ToString();
            Console.CursorTop -= 1;
            Console.CursorLeft = 0;
            Console.WriteLine($"{csv.Solution}-{csv.Time}ms");
            Console.ForegroundColor = ConsoleColor.White;

            // save solutions
            var solutionPath = Path.Combine(path, "solutions", map.MapType.ToString(), finder.GetType().Name, h.GetType().Name);
            var fileName     = mapName;

            if (finder is IGeneticAlgorithm ga)
            {
                solutionPath = Path.Combine(solutionPath, ga.Fitness.GetType().Name, ga.Selection.GetType().Name);
                fileName     = $"{Path.GetFileNameWithoutExtension(fileName)}_{ga.Mutate.GetType().Name}_{ga.Crossover.GetType().Name}_{i}.txt";
            }

            if (!Directory.Exists(solutionPath))
            {
                Directory.CreateDirectory(solutionPath);
            }

            var text = FileTool.GetTextRepresentation(map, false, map.GetPath());

            File.WriteAllText(Path.Combine(solutionPath, fileName), text);

            return(csv);
        }
 void OnValidate()
 {
     textLabel = new TextWrapper(gameObject);
 }
Beispiel #5
0
	void OnValidate()
	{
		textLabel = new TextWrapper(gameObject);
		rt = GetComponent<RectTransform>();
		PartialValidate();
	}
		public void Init()
		{
			fontDescription = new FontDescription(ContentLoader.Load<Font>("Verdana12").Data);
			textWrapper = new TextWrapper(fontDescription.GlyphDictionary, ' ', fontDescription.PixelLineHeight);
		}
Beispiel #7
0
        public static string GetText(
            CharacterStats data,
            string hpStatsFormat,
            string mpStatsFormat,
            string armorStatsFormat,
            string accuracyStatsFormat,
            string evasionStatsFormat,
            string criRateStatsFormat,
            string criDmgRateStatsFormat,
            string blockRateStatsFormat,
            string blockDmgRateStatsFormat,
            string moveSpeedStatsFormat,
            string atkSpeedStatsFormat,
            string weightLimitStatsFormat,
            string staminaStatsFormat,
            string foodStatsFormat,
            string waterStatsFormat,
            TextWrapper uiTextHp           = null,
            TextWrapper uiTextMp           = null,
            TextWrapper uiTextArmor        = null,
            TextWrapper uiTextAccuracy     = null,
            TextWrapper uiTextEvasion      = null,
            TextWrapper uiTextCriRate      = null,
            TextWrapper uiTextCriDmgRate   = null,
            TextWrapper uiTextBlockRate    = null,
            TextWrapper uiTextBlockDmgRate = null,
            TextWrapper uiTextMoveSpeed    = null,
            TextWrapper uiTextAtkSpeed     = null,
            TextWrapper uiTextWeightLimit  = null,
            TextWrapper uiTextStamina      = null,
            TextWrapper uiTextFood         = null,
            TextWrapper uiTextWater        = null)
        {
            string statsString     = string.Empty;
            string statsStringPart = string.Empty;

            // Hp
            statsStringPart = string.Format(
                LanguageManager.GetText(hpStatsFormat),
                data.hp.ToString("N0"));
            if (data.hp != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextHp != null)
            {
                uiTextHp.text = statsStringPart;
            }

            // Mp
            statsStringPart = string.Format(
                LanguageManager.GetText(mpStatsFormat),
                data.mp.ToString("N0"));
            if (data.mp != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextMp != null)
            {
                uiTextMp.text = statsStringPart;
            }

            // Armor
            statsStringPart = string.Format(
                LanguageManager.GetText(armorStatsFormat),
                data.armor.ToString("N0"));
            if (data.armor != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextArmor != null)
            {
                uiTextArmor.text = statsStringPart;
            }

            // Accuracy
            statsStringPart = string.Format(
                LanguageManager.GetText(accuracyStatsFormat),
                data.accuracy.ToString("N0"));
            if (data.accuracy != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextAccuracy != null)
            {
                uiTextAccuracy.text = statsStringPart;
            }

            // Evasion
            statsStringPart = string.Format(
                LanguageManager.GetText(evasionStatsFormat),
                data.evasion.ToString("N0"));
            if (data.evasion != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextEvasion != null)
            {
                uiTextEvasion.text = statsStringPart;
            }

            // Cri Rate
            statsStringPart = string.Format(
                LanguageManager.GetText(criRateStatsFormat),
                (data.criRate * 100).ToString("N2"));
            if (data.criRate != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextCriRate != null)
            {
                uiTextCriRate.text = statsStringPart;
            }

            // Cri Dmg Rate
            statsStringPart = string.Format(
                LanguageManager.GetText(criDmgRateStatsFormat),
                (data.criDmgRate * 100).ToString("N2"));
            if (data.criDmgRate != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextCriDmgRate != null)
            {
                uiTextCriDmgRate.text = statsStringPart;
            }

            // Block Rate
            statsStringPart = string.Format(
                LanguageManager.GetText(blockRateStatsFormat),
                (data.blockRate * 100).ToString("N2"));
            if (data.blockRate != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextBlockRate != null)
            {
                uiTextBlockRate.text = statsStringPart;
            }

            // Block Dmg Rate
            statsStringPart = string.Format(
                LanguageManager.GetText(blockDmgRateStatsFormat),
                (data.blockDmgRate * 100).ToString("N2"));
            if (data.blockDmgRate != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextBlockDmgRate != null)
            {
                uiTextBlockDmgRate.text = statsStringPart;
            }

            // Weight
            statsStringPart = string.Format(
                LanguageManager.GetText(weightLimitStatsFormat),
                data.weightLimit.ToString("N2"));
            if (data.weightLimit != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextWeightLimit != null)
            {
                uiTextWeightLimit.text = statsStringPart;
            }

            // Move Speed
            statsStringPart = string.Format(
                LanguageManager.GetText(moveSpeedStatsFormat),
                data.moveSpeed.ToString("N2"));
            if (data.moveSpeed != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextMoveSpeed != null)
            {
                uiTextMoveSpeed.text = statsStringPart;
            }

            // Attack Speed
            statsStringPart = string.Format(
                LanguageManager.GetText(atkSpeedStatsFormat),
                data.atkSpeed.ToString("N2"));
            if (data.atkSpeed != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextAtkSpeed != null)
            {
                uiTextAtkSpeed.text = statsStringPart;
            }

            // Stamina
            statsStringPart = string.Format(
                LanguageManager.GetText(staminaStatsFormat),
                data.stamina.ToString("N0"));
            if (data.stamina != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextStamina != null)
            {
                uiTextStamina.text = statsStringPart;
            }

            // Food
            statsStringPart = string.Format(
                LanguageManager.GetText(foodStatsFormat),
                data.food.ToString("N0"));
            if (data.food != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextFood != null)
            {
                uiTextFood.text = statsStringPart;
            }

            // Water
            statsStringPart = string.Format(
                LanguageManager.GetText(waterStatsFormat),
                data.water.ToString("N0"));
            if (data.water != 0)
            {
                if (!string.IsNullOrEmpty(statsString))
                {
                    statsString += "\n";
                }
                statsString += statsStringPart;
            }
            if (uiTextWater != null)
            {
                uiTextWater.text = statsStringPart;
            }

            return(statsString);
        }
 public void Init()
 {
     fontDescription = new FontDescription(ContentLoader.Load <Font>("Verdana12").Data);
     textWrapper     = new TextWrapper(fontDescription.GlyphDictionary, ' ', fontDescription.PixelLineHeight);
 }
Beispiel #9
0
 public Score(SpriteFont spriteFont, Rectangle container)
 {
     _textWrapper = new TextWrapper(spriteFont, container, "Score: 0");
     LastScore    = 0;
 }
Beispiel #10
0
 public WidgetBase GetWidget(QuestionUnit unit, TextWrapper typeWrapper)
 {
     unit.InitialiseValue(typeWrapper);
     return(new TextWidget(unit));
 }