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); } }
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); }
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); }