private Face3D.FacePosition GetOppositeFace(Face3D.FacePosition position)
        {
            switch (position)
            {
            case Face3D.FacePosition.Top:
                return(Face3D.FacePosition.Bottom);

            case Face3D.FacePosition.Bottom:
                return(Face3D.FacePosition.Top);

            case Face3D.FacePosition.Left:
                return(Face3D.FacePosition.Right);

            case Face3D.FacePosition.Right:
                return(Face3D.FacePosition.Left);

            case Face3D.FacePosition.Back:
                return(Face3D.FacePosition.Front);

            case Face3D.FacePosition.Front:
                return(Face3D.FacePosition.Back);

            default:
                return(Face3D.FacePosition.None);
            }
        }
        private Cube3D.RubikPosition FacePosToCubePos(Face3D.FacePosition position)
        {
            switch (position)
            {
            case Face3D.FacePosition.Top:
                return(Cube3D.RubikPosition.TopLayer);

            case Face3D.FacePosition.Bottom:
                return(Cube3D.RubikPosition.BottomLayer);

            case Face3D.FacePosition.Left:
                return(Cube3D.RubikPosition.LeftSlice);

            case Face3D.FacePosition.Right:
                return(Cube3D.RubikPosition.RightSlice);

            case Face3D.FacePosition.Back:
                return(Cube3D.RubikPosition.BackSlice);

            case Face3D.FacePosition.Front:
                return(Cube3D.RubikPosition.FrontSlice);

            default:
                return(Cube3D.RubikPosition.None);
            }
        }
Example #3
0
 public void setFaceSelection(Cube3D.RubikPosition affected, Face3D.FacePosition face, Face3D.SelectionMode selection)
 {
     RubikCube.cubes.Where(c => c.Position.HasFlag(affected)).ToList().ForEach(c => c.Faces.Where(f => f.Position == face).ToList().ForEach(f =>
     {
         if (f.Selection.HasFlag(Face3D.SelectionMode.Possible))
         {
             f.Selection = selection | Face3D.SelectionMode.Possible;
         }
         else if (f.Selection.HasFlag(Face3D.SelectionMode.NotPossible))
         {
             f.Selection = selection | Face3D.SelectionMode.NotPossible;
         }
         else
         {
             f.Selection = selection;
         }
     }));
 }
        public bool CanSolve()
        {
            RubikManager oldManager = Manager.Clone();
            //check colors
            bool correctColors = standardCube.RubikCube.cubes.Count(sc => Manager.RubikCube.cubes
                                                                    .Where(c => ScrambledEquals(c.Colors, sc.Colors)).Count() == 1) == Manager.RubikCube.cubes.Count();

            //return false, if there are invalid cube colors
            if (!correctColors)
            {
                return(false);
            }

            Solve(false);

            //check if all the cube faces are solved
            Cube3D.RubikPosition layers = Cube3D.RubikPosition.TopLayer | Cube3D.RubikPosition.BottomLayer | Cube3D.RubikPosition.RightSlice
                                          | Cube3D.RubikPosition.LeftSlice | Cube3D.RubikPosition.FrontSlice | Cube3D.RubikPosition.BackSlice;
            foreach (Cube3D.RubikPosition l in GetFlags(layers))
            {
                Face3D.FacePosition facePos = CubePosToFacePos(l);
                if (facePos != Face3D.FacePosition.None)
                {
                    Cube3D.RubikPosition centerPos = Manager.RubikCube.cubes.First(c => Cube3D.isCenter(c.Position) && c.Position.HasFlag(l)).Position;
                    Color faceColor = Manager.getFaceColor(centerPos, facePos);

                    bool faceNotSolved = Manager.RubikCube.cubes.Count(c => c.Position.HasFlag(l) && c.Faces.First(f => f.Position == facePos).Color == faceColor) != 9;
                    if (faceNotSolved)
                    {
                        return(false);
                    }
                }
            }

            Manager = oldManager;
            return(true);
        }
Example #5
0
 public void setFaceColor(Cube3D.RubikPosition affected, Face3D.FacePosition face, Color color)
 {
     RubikCube.cubes.Where(c => c.Position.HasFlag(affected)).ToList().ForEach(c => c.Faces.Where(f => f.Position == face).ToList().ForEach(f => f.Color = color));
 }
 public Color getFaceColor(Cube3D.RubikPosition position, Face3D.FacePosition face)
 {
     return(RubikCube.cubes.First(c => c.Position.HasFlag(position)).Faces.First(f => f.Position == face).Color);
 }