private void solveButton_Click(object sender, EventArgs e) { if (_solution == null) { var cube = rubicsCubeControl.RubiksCubeModel.CloneJson(); var solver = new BeginnersSolver(cube, (f) => GetFiles(f)); try { _solution = solver.Solve(); } catch (Exception ex) { MessageBox.Show("Solving failed!"); return; } } while (true) { if (!ProcessSolutionStep()) { break; } } _solution = null; MessageBox.Show("Done!"); }
public void Solve_Cube() { int i = 0; while (i < RetriesCount) { _cube.Reset(); _cube.Shuffle(); var cube = _cube.CloneJson(); var cubeFallback = _cube.CloneJson(); var solver = new BeginnersSolver(cube, (f) => GetFiles(f)); List <MoveAlgorithm> solution; bool success; solution = solver.SolveCross(out success); if (!success) { LogError("First cross", i, cubeFallback, solution); } LogSuccess("First cross"); cubeFallback = cube.CloneJson(); solution = solver.SolveFirstLayer(out success); if (!success) { LogError("First layer", i, cubeFallback, solution); } LogSuccess("First layer"); cubeFallback = cube.CloneJson(); solution = solver.SolveSecondLayer(out success); if (!success) { LogError("Second layer", i, cubeFallback, solution); } LogSuccess("Second layer"); cubeFallback = cube.CloneJson(); solution = solver.SolveSecondFlatCross(out success); if (!success) { LogError("Second flat cross", i, cubeFallback, solution); } LogSuccess("Second flat cross"); cubeFallback = cube.CloneJson(); solution = solver.SolveSecondCross(out success); if (!success) { LogError("Second cross", i, cubeFallback, solution); } LogSuccess("Second cross"); cubeFallback = cube.CloneJson(); solution = solver.SolveThirdLayerCubiesLocations(out success); if (!success) { LogError("Third layer cubies locations", i, cubeFallback, solution); } LogSuccess("Third layer cubies locations"); cubeFallback = cube.CloneJson(); solution = solver.SolveThirdLayer(out success); if (!success) { LogError("Third layer", i, cubeFallback, solution); } LogSuccess("Third layer"); i++; } Assert.Pass($"Rubiks cube solving passed for {RetriesCount} tries."); }