diff --git a/app/app.py b/app/app.py index 9803f35..8a01904 100644 --- a/app/app.py +++ b/app/app.py @@ -53,7 +53,7 @@ def update(): @app.route('/scramble') def scramble(): scramble2(Rubiks) - Solver.ChooseCross() + Solver.Reset(Rubiks) print Solver.Cross return drawRubiks(Rubiks) diff --git a/app/solver.py b/app/solver.py index 4cc4b7a..7f314dc 100644 --- a/app/solver.py +++ b/app/solver.py @@ -41,6 +41,13 @@ def __init__(self, rubiks): def Update(self, rubiks): self.Rubiks = rubiks + + def Reset(self, rubiks): + self.Rubiks = rubiks + self.ChooseCross() + self.Count = 0 + del self.Moves[:] + self.State = 1 # Chooses which color cross is best to go for def ChooseCross(self): @@ -72,7 +79,30 @@ def isCross(self, faceIndex, color): return True else: return False - + + def isFirstCrossComplete(self, face): + if self.isCross(face.Number, self.Cross) == False: + return False + for x in range(0,3): + for y in range(0,3): + if (x == 1 and y != 1) or (x != 1 and y == 1): + stripColor = Colors( + self.Rubiks.CubeArray[face.Number].FaceMatrix[x][y].SquareSecn.Color) + if x == 0: + if stripColor != face.LeftFace.Color: + return False + elif x == 2: + if stripColor != face.RightFace.Color: + return False + elif y == 0: + if stripColor != face.UpFace.Color: + return False + elif y == 2: + if stripColor != face.DownFace.Color: + return False + return True + #### End of isFirstStripComplete + # Chooses best direction to go to make a cross def MakeCross(self): @@ -690,6 +720,88 @@ def CheckThirdStrip(face): return + def OrientCross(self): + if len(self.Moves) != 0: + return self.Moves.pop(0) + else: + face = Face(faceMapper(faceColors.stringToInt(self.Cross))) + upSecn = False + downSecn = False + rightSecn = False + leftSecn = False + up = False + down = False + right = False + left = False + rubiksCopy = copy.deepcopy(self.Rubiks) + + for i in range(0,4): + # Actual face check + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].Square.Color == + Colors(self.Cross)): + left = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][0].Square.Color == + Colors(self.Cross)): + up = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][2].Square.Color == + Colors(self.Cross)): + down = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[2][1].Square.Color == + Colors(self.Cross)): + right = True + + # SquareSecn check + print rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].SquareSecn.Color + print Colors(face.LeftFace.Color) + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[0][1].SquareSecn.Color == + Colors(face.LeftFace.Color)): + leftSecn = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][0].SquareSecn.Color == + Colors(face.UpFace.Color)): + upSecn = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[1][2].SquareSecn.Color == + Colors(face.DownFace.Color)): + downSecn = True + if (rubiksCopy.CubeArray[face.Number].FaceMatrix[2][1].SquareSecn.Color == + Colors(face.RightFace.Color)): + rightSecn = True + + # Logic + if up and upSecn: + if i == 3: + del self.Moves[:] + self.Moves.append(face.FrontInv) + self.Moves.append(face.Upper) + self.Moves.append(face.Upper) + return self.Moves.pop(0) + elif down and downSecn: + if i == 3: + del self.Moves[:] + self.Moves.append(face.FrontInv) + self.Moves.append(face.Down) + self.Moves.append(face.Down) + return self.Moves.pop(0) + elif right and rightSecn: + if i == 3: + del self.Moves[:] + self.Moves.append(face.FrontInv) + self.Moves.append(face.Right) + self.Moves.append(face.Right) + return self.Moves.pop(0) + elif left and leftSecn: + if i == 3: + del self.Moves[:] + self.Moves.append(face.FrontInv) + self.Moves.append(face.Left) + self.Moves.append(face.Left) + return self.Moves.pop(0) + + face.Front(rubiksCopy) + self.Moves.append(face.Front) + up = right = left = down = False + upSecn = rightSecn = leftSecn = downSecn = False + del self.Moves[:] + def MakeMove(self): # # State 1: Making first cross on opposite face @@ -710,8 +822,27 @@ def MakeMove(self): # State 2: Orient first cross side pieces, and bring them # to their correct face # - #if self.State == 2: - + if self.State == 2: + face = Face(faceColors.stringToInt(self.Cross)) + if self.isFirstCrossComplete(face): + print "State 2 -> State 3" + self.State += 1 + else: + print "Still State 2" + move = self.OrientCross() + if move != None: + return move + else: + print "Semantic error in state: 2" + return None + + # + # State 3: Get the four corners of the first face + # + if self.State == 3: + # For Andy to implement + self.State += 1 +