예제 #1
0
        private void FormYellowCross()
        {
            while (!RubixCubeStatusEvaluator.CrossFaceIsFormed(_cube, Side.Back))
            {
                if (!CrossIsPartiallySolved())
                {
                    // Any rotation is fine here (providing the face matches the side)
                    PerformFruRufRotations(Side.Right, Side.Bottom);
                }

                var crossBlocks = _cube.GetBackFaceCrossBlocks().ToList();
                if (CrossIsCurrentlyAnArrow(crossBlocks))
                {
                    var sides        = GetIncorrectCrossBlockSides(crossBlocks);
                    var faceToRotate = GetFaceToRotate(sides);
                    var sideToRotate = GetSideToRotate(faceToRotate);

                    PerformFruRufRotations(faceToRotate, sideToRotate);
                }

                crossBlocks = _cube.GetBackFaceCrossBlocks().ToList();
                if (CrossIsCurrentlyALine(crossBlocks))
                {
                    var faceToRotate = GetIncorrectCrossBlockSides(crossBlocks).First();
                    var sideToRotate = GetSideToRotate(faceToRotate);

                    PerformFruRufRotations(faceToRotate, sideToRotate);
                }
            }
        }