示例#1
0
        private static void NormalizeBlockOffsets(LifePattern pattern)
        {
            var centerX = pattern.Width / 2;
            var centerY = pattern.Height / 2;

            foreach (var block in pattern.Blocks)
            {
                block.OffsetX += centerX;
                block.OffsetY += centerY;
            }
        }
示例#2
0
 private static void NormalizeBlockLines(LifePattern pattern)
 {
     // Get the longest line and add dead cells to the ones that are too short.
     var maxLineLength = pattern.Blocks.Max(block => block.Lines.Max(line => line.Count));
     foreach (var block in pattern.Blocks)
     {
         foreach (var line in block.Lines)
         {
             var missingCellCount = maxLineLength - line.Count;
             for (var i = 0; i < missingCellCount; i++)
             {
                 line.Add(false);
             }
         }
     }
 }
示例#3
0
        public static LifePattern ParseFile(string path)
        {
            if (!File.Exists(path)) throw new ArgumentException("Could not find file.", "path");

            var pattern = new LifePattern();

            using (var reader = new StreamReader(path))
            {
                LifePatternBlock currentPatternBlock = null;

                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var parts = line.Split(' ');

                    switch (parts[0])
                    {
                        case "#Life":
                            pattern.Version = parts[1];
                            break;
                        case "#D":
                            if (parts.Length > 1) pattern.AddDescription(parts[1]);
                            break;
                        case "#N":
                            pattern.Rules = LifeRules.Normal;
                            break;
                        case "#R":
                            pattern.Rules = CreateRule(parts[1]);
                            break;
                        case "#P":
                            if (currentPatternBlock != null) pattern.Blocks.Add(currentPatternBlock);
                            currentPatternBlock = CreatePatternBlock(parts[1], parts[2]);
                            break;
                        default:
                            AddBlockLine(parts[0], currentPatternBlock);
                            break;
                    }
                }

                if (currentPatternBlock != null) pattern.Blocks.Add(currentPatternBlock);
            }

            NormalizeBlockLines(pattern);
            NormalizeBlockOffsets(pattern);

            return pattern;
        }
示例#4
0
        private static void NormalizeBlockLines(LifePattern pattern)
        {
            // Get the longest line and add dead cells to the ones that are too short.
            var maxLineLength = pattern.Blocks.Max(block => block.Lines.Max(line => line.Count));

            foreach (var block in pattern.Blocks)
            {
                foreach (var line in block.Lines)
                {
                    var missingCellCount = maxLineLength - line.Count;
                    for (var i = 0; i < missingCellCount; i++)
                    {
                        line.Add(false);
                    }
                }
            }
        }
示例#5
0
        public static LifePattern ParseFile(string path)
        {
            if (!File.Exists(path))
            {
                throw new ArgumentException("Could not find file.", "path");
            }

            var pattern = new LifePattern();

            using (var reader = new StreamReader(path))
            {
                LifePatternBlock currentPatternBlock = null;

                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var parts = line.Split(' ');

                    switch (parts[0])
                    {
                    case "#Life":
                        pattern.Version = parts[1];
                        break;

                    case "#D":
                        if (parts.Length > 1)
                        {
                            pattern.AddDescription(parts[1]);
                        }
                        break;

                    case "#N":
                        pattern.Rules = LifeRules.Normal;
                        break;

                    case "#R":
                        pattern.Rules = CreateRule(parts[1]);
                        break;

                    case "#P":
                        if (currentPatternBlock != null)
                        {
                            pattern.Blocks.Add(currentPatternBlock);
                        }
                        currentPatternBlock = CreatePatternBlock(parts[1], parts[2]);
                        break;

                    default:
                        AddBlockLine(parts[0], currentPatternBlock);
                        break;
                    }
                }

                if (currentPatternBlock != null)
                {
                    pattern.Blocks.Add(currentPatternBlock);
                }
            }

            NormalizeBlockLines(pattern);
            NormalizeBlockOffsets(pattern);

            return(pattern);
        }
示例#6
0
        private static void NormalizeBlockOffsets(LifePattern pattern)
        {
            var centerX = pattern.Width / 2;
            var centerY = pattern.Height / 2;

            foreach (var block in pattern.Blocks)
            {
                block.OffsetX += centerX;
                block.OffsetY += centerY;
            }
        }