コード例 #1
0
ファイル: FileCoder.cs プロジェクト: artiom0724/LedCube
        public void CodeCubeToFile(LEDCubeModel cube)
        {
            FileStream fs;

            if (!File.Exists(pathToCubeFile))
            {
                fs = File.Create(pathToCubeFile);
                fs.Close();
            }
            int numLine = 0;

            using (StreamReader sr = new StreamReader(pathToCubeFile))
            {
                while (sr.Peek() >= 0)
                {
                    sr.ReadLine();
                    numLine++;
                }
            }
            var fileString = GenerateFileString(cube, numLine);

            using (StreamWriter sw = new StreamWriter(pathToCubeFile))
            {
                sw.WriteLine(fileString);
            }
        }
コード例 #2
0
ファイル: FileCoder.cs プロジェクト: artiom0724/LedCube
        private string GenerateFileString(LEDCubeModel cube, int number)
        {
            var    tempCount = cube.IsTemplate ? cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods.Count.ToString() : cube.StepsDiods.Count.ToString();
            string result    = $"*{number}*+{cube.Name}+t{(cube.IsTemplate ? cube.CurrentLEDCubeTemplateActionsModel.Name : "0")}tm{tempCount}m-";

            if (!cube.IsTemplate)
            {
                for (int i = 0; i < cube.StepsDiods.Count; i++)
                {
                    for (int j = 0; j < 8; j++)
                    {
                        for (int k = 0; k < 8; k++)
                        {
                            for (int l = 0; l < 8; l++)
                            {
                                result += cube.StepsDiods[i][j, k, l] ? "1" : "0";
                            }
                        }
                    }
                    result += "-" + cube.StepsTiming[i].ToString() + "-";
                }
            }
            else
            {
                for (int step = 0; step < cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods.Count; step++)
                {
                    for (int i = 0; i < 8; i++)
                    {
                        for (int j = 0; j < 8; j++)
                        {
                            for (int k = 0; k < 8; k++)
                            {
                                result += cube.StepsDiods[step][i, j, k] ? "1" : "0";
                            }
                        }
                    }
                    result += $"T{cube.CurrentLEDCubeTemplateActionsModel.StepsTimingDiods[step]}T";
                    for (int i = 0; i < 8; i++)
                    {
                        for (int j = 0; j < 8; j++)
                        {
                            for (int k = 0; k < 8; k++)
                            {
                                if (cube.CurrentLEDCubeTemplateActionsModel.StepsDiods[step].First()[i, j, k])
                                {
                                    var firstNum  = int.Parse(cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods[step].First()[i, j, k]);
                                    int secondNum = -1;
                                    for (int i2 = 0; i2 < 8; i2++)
                                    {
                                        for (int j2 = 0; j2 < 8; j2++)
                                        {
                                            for (int k2 = 0; k2 < 8; k2++)
                                            {
                                                var secondTarget = cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods[step].Last()[i2, j2, k2];
                                                if (int.Parse(secondTarget) == firstNum)
                                                {
                                                    secondNum = i2 * 100 + j2 * 10 + k2;
                                                }
                                            }
                                        }
                                    }
                                    if (secondNum != -1)
                                    {
                                        cube.StepsDiods[step][i, j, k] = cube.StepsDiods[step][secondNum / 100, (secondNum / 10) % 10, secondNum % 10];
                                    }
                                    result += cube.StepsDiods[step][i, j, k] ? "1" : "0";
                                }
                                else
                                {
                                    result += cube.StepsDiods[step][i, j, k] ? "1" : "0";
                                }
                            }
                        }
                    }
                    result += $"T{cube.CurrentLEDCubeTemplateActionsModel.StepsTimingDiods[step + 10]}T";
                }
            }
            return(result + "#\n");
        }
コード例 #3
0
ファイル: FileCoder.cs プロジェクト: artiom0724/LedCube
        private LEDCubeModel GetLEDCubeModelFromString(string line)
        {
            var resultModel = new LEDCubeModel();

            resultModel.StepsTiming = new Dictionary <int, int>();
            resultModel.StepsDiods  = new Dictionary <int, bool[, , ]>();
            for (int str = 0; str < line.Count(); str++)
            {
                if (line[str] == '+')
                {
                    string name = string.Empty;
                    str++;
                    while (line[str] != '+')
                    {
                        name += line[str];
                        str++;
                    }
                    str++;
                    resultModel.Name = name;
                }
                if (line[str] == 't')
                {
                    str++;
                    resultModel.IsTemplate = line[str] == '1';
                    str++;
                }
                if (line[str] == 'm')
                {
                    str++;
                    string numStepsStr = string.Empty;
                    while (line[str] != 'm')
                    {
                        numStepsStr += line[str];
                        str++;
                    }
                    int numSteps = int.Parse(numStepsStr);
                    for (int k = 0; k < numSteps; k++)
                    {
                        resultModel.StepsDiods.Add(k, new bool[8, 8, 8]);
                    }
                    str++;
                }
                if (line[str] == '-')
                {
                    str++;
                    for (int step = 0; step < resultModel.StepsDiods.Count; step++)
                    {
                        for (int i = 0; i < 8; i++)
                        {
                            for (int j = 0; j < 8; j++)
                            {
                                for (int k = 0; k < 8; k++)
                                {
                                    resultModel.StepsDiods[step][i, j, k] = line[str] == '1';
                                    str++;
                                }
                            }
                        }
                        str++;
                        string timing = string.Empty;
                        while (line[str] != '-')
                        {
                            timing += line[str];
                            str++;
                        }
                        resultModel.StepsTiming.Add(step, int.Parse(timing));
                        str++;
                    }
                }
            }
            return(resultModel);
        }