def __init__(self, display, cube_size): self.cube_size = cube_size self.current_cube = None self._start_cube = VRubiksCube(self.cube_size, None, None, None, True) self._start_cube.set_cube_visible(False) #self.start_turn_cube = self._result_cube = VRubiksCube(self.cube_size, None, None, None, True) self._result_cube.set_cube_visible(False)
def __init__(self): # create GUI self.cube_gui = CubeGui("Artificial Intelligence Cube") # create cube display self.cube_display = CubeDisplay(self.cube_gui.get_window(), False) #Cube Storage self._storage = CubeStorage(self, 3) # generate cube self.cube = VRubiksCube(3) # xml handler self.handle_xml = HandleFiles(self) # create cube handler cube_handler = CubeHandler(self.cube) self.create_gui_items(cube_handler, self.cube_gui) # create keyboard handler keyboard_handler = KeyboardHandler(self.cube_display.get_display(), self.cube) # bind keyboard keys to display displayc = self.cube_display.get_display() displayc.bind('keydown', keyboard_handler.on_key_down) mouse_handler = MouseHandler(self)
def to_visual_cube(input_cube): if input_cube.__class__ == VRubiksCube().__class__: return input_cube cube = VRubiksCube(input_cube.get_size(),None, None, None, False) for side in Helper.CUBE_SIDES: current_side = input_cube.get_side(side) for x in range(input_cube.get_size()): for y in range(input_cube.get_size()): if current_side[x][y] < len(Helper.CUBE_COLOR) and current_side[x][y] >= 0: current_side[x][y] = Helper.CUBE_COLOR[current_side[x][y]] else: current_side[x][y] = Helper.CUBE_DUMMIE_COLOR cube.set_side(side, current_side) return cube
class CubeStorage: def __init__(self, display, cube_size): self.cube_size = cube_size self.current_cube = None self._start_cube = VRubiksCube(self.cube_size, None, None, None, True) self._start_cube.set_cube_visible(False) #self.start_turn_cube = self._result_cube = VRubiksCube(self.cube_size, None, None, None, True) self._result_cube.set_cube_visible(False) #self.result_turn_cube = def load_from_xml_object(self, xml_object): self._start_cube = RubiksCubeConverter.to_visual_cube(xml_object._start_cube) self._result_cube = RubiksCubeConverter.to_visual_cube(xml_object._result_cube) def _turn_invisible(self): if self.current_cube is not None: self.current_cube.set_cube_visible(False) def switch_to_start(self): self._turn_invisible() self.current_cube = self._start_cube self.current_cube.set_cube_visible(True) def switch_to_result(self): self._turn_invisible() self.current_cube = self._result_cube self.current_cube.set_cube_visible(True) def switch_to_code(self): self._turn_invisible() self.current_cube = RubiksCubeConverter.to_visual_cube(RubiksCubeConverter.to_code_cube(self._start_cube)) self.current_cube.set_cube_visible(True)
class SolveDisplay(): __default_button_width = 88 __default_button_height = 26 def __init__(self): # create GUI self.cube_gui = CubeGui("Artificial Intelligence Cube") # create cube display self.cube_display = CubeDisplay(self.cube_gui.get_window(), False) #Cube Storage self._storage = CubeStorage(self, 3) # generate cube self.cube = VRubiksCube(3) # xml handler self.handle_xml = HandleFiles(self) # create cube handler cube_handler = CubeHandler(self.cube) self.create_gui_items(cube_handler, self.cube_gui) # create keyboard handler keyboard_handler = KeyboardHandler(self.cube_display.get_display(), self.cube) # bind keyboard keys to display displayc = self.cube_display.get_display() displayc.bind('keydown', keyboard_handler.on_key_down) mouse_handler = MouseHandler(self) # lambda event: self._button_x_y_z('z', self.action_combo_box.GetValue(), # cube_turnable_checkbox.GetSelection()) #self.cube_display.get_display().bind('click', lambda event: mouse_handler.mouse_block_click(self)) def create_gui_items(self, cube_handler, cube_gui): # generate GUI items gui_items = GuiItems(self, cube_gui, cube_gui.get_window_panel()) # generate GUI Menu gui_items.gen_menu(cube_gui.get_window()) # generate rotate buttons x_button = gui_items.gen_button("- Turn X - ", 10, 10 + (self.__default_button_height*0)) # X y_button = gui_items.gen_button("- Turn Y -", 10, 10 + self.__default_button_height) # Y z_button = gui_items.gen_button("- Turn Z -", 10, 10 + (self.__default_button_height*2)) # Z # bind rotate buttons gui_items.bind_element(x_button, wx.EVT_BUTTON, cube_handler.turn_x) # X gui_items.bind_element(y_button, wx.EVT_BUTTON, cube_handler.turn_y) # Y gui_items.bind_element(z_button, wx.EVT_BUTTON, cube_handler.turn_z) # Z # generate solve button solve_button = gui_items.gen_button("Solve Cube!", 10, 10 + (self.__default_button_height*5)) # bind solve button gui_items.bind_element(solve_button, wx.EVT_BUTTON, cube_handler.solve) # generate dropdown menu combo_box_items = [] for size in range(self.cube.get_size()): combo_box_items.append(str(size+1)) combo_box = gui_items.gen_combobox((150, 10), (150, -1), combo_box_items) combo_box.SetSelection(0) # bind dropdown menu gui_items.bind_element(combo_box, wx.EVT_COMBOBOX, cube_handler.set_index) # generate radiobuttons for direction directions = ['Clockwise', 'Counterclockwise'] radio_buttons = gui_items.gen_radiobox(150, 50, (180, -1), wx.RA_SPECIFY_ROWS, directions) # bind radiobuttons gui_items.bind_element(radio_buttons, wx.EVT_RADIOBOX, cube_handler.set_direction)
def generateRubiksCube(self, size): cube = VRubiksCube(size, None, None, None, True) cube.set_cube_visible(False) cubeG = RubiksCubeG(cube) return cubeG