示例#1
0
        private void CopyToClipboard()
        {
            StringBuilder result = new StringBuilder();

            var dataCube = cube.GetCurrentState();

            for (var side = CubeSide.Left; side <= CubeSide.Back; side++)
            {
                result.Append('(');

                foreach (var coords in CoordsHelper.EnumerateSide(side, cube.Size))
                {
                    result.Append(dataCube[coords][side]);
                }

                result.Append(')');
            }

            Clipboard.SetText(result.ToString());
        }
示例#2
0
        private bool PasteFromClipboard()
        {
            string text = Clipboard.GetText();

            if (text.Length == 0)
            {
                return(false);
            }

            var dataCube = RubiksCube.GetDefaultCube(cube.Size);

            // cune has 6 sides
            int[][] sides = new int[6][];
            int     index = 0;

            for (int i = 0; i < sides.Length; i++)
            {
                int openBracket = text.IndexOf('(', index);
                if (openBracket == -1)
                {
                    return(false);
                }

                int closeBracket = text.IndexOf(')', openBracket + 1);
                if (closeBracket == -1)
                {
                    return(false);
                }

                index = closeBracket + 1;

                string colors = text.Substring(
                    openBracket + 1, closeBracket - openBracket - 1);
                colors = new string(colors.ToCharArray()
                                    .Where(ch => char.IsDigit(ch)).ToArray());

                // cube side has 3x3 elements
                if (colors.Length != cube.Size * cube.Size)
                {
                    return(false);
                }

                sides[i] = new int[colors.Length];
                for (int j = 0; j < colors.Length; j++)
                {
                    char digit = colors[j];
                    if (digit < '1' || digit > '6')
                    {
                        return(false);
                    }

                    sides[i][j] = (int)(digit - '0');
                }
            }

            // check that remainder part of text is whitespace chars
            for (; index < text.Length; index++)
            {
                if (!char.IsWhiteSpace(text[index]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < sides.Length; i++)
            {
                var side = (CubeSide)i;

                int j = 0;
                foreach (var coords in CoordsHelper.EnumerateSide(side, cube.Size))
                {
                    dataCube[coords][side] = sides[i][j];
                    j++;
                }
            }

            cube.ReplaceCube(dataCube);
            return(true);
        }