class GameControl: __gui = None def __init__(self, window): window.geometry(str(configuration.settings["WIDTH"])+"x"+str(configuration.settings["HEIGHT"])) self.__game = None self.__menu = MenuGui(self, window) self.__menu.show() self.__sleeptime = configuration.Speed.normal self.__window = window self.disable_menu() self.show_main_menu() def show_main_menu(self): if self.__gui is not None: self.__gui.remove() if self.__game is not None: self.__game.stop() self.__gui = MainGui(self, self.__window) self.__gui.show() def show_save_menu(self): if self.__gui is not None: self.__gui.remove() self.__gui = SaveGui(self, self.__window) self.__gui.show() def show_game(self): self.__init_all_except_Game() self.__gui.show() def create_new(self, fieldsize_x, fieldsize_y): self.__game = Game(fieldsize_x=fieldsize_x, fieldsize_y=fieldsize_y) self.__init_all_except_Game() def load_previous(self, memory): self.__game = Game(memory) self.__init_all_except_Game() def load_named(self, name): self.load_game(name) self.__init_all_except_Game() def set_speed(self, speed): if self.__game is not None: if type(speed) is configuration.Speed: self.__game.set_sleeptime(speed.value) elif type(speed) is float: self.__game.set_sleeptime(speed) else: self.__game.set_sleeptime(float(speed)) def toggle_tile(self, x, y): self.__game.toggle_tile(x, y) def toggle_game(self): self.__game.toggle() def stop_game(self): if self.__game is not None: self.__game.stop() def start_game(self): if self.__game is not None: self.set_speed(configuration.settings["SPEED"]) self.__game.start() if self.__gui is not None: self.__gui.show() def end_game(self): if self.__game is not None: self.__game.stop() self.__game.save() self.__gui.remove() self.__game = None self.__gui = None def save_game(self, name): if self.__game is not None: self.__game.save(name) def load_game(self, name): self.__game = Game() self.set_speed(configuration.settings["SPEED"]) self.__game.load(name) self.toggle_game() def enable_menu(self): self.__menu.enable() def disable_menu(self): self.__menu.disable() def quit(self): # stop running threads, flush everything remaining if self.__game is not None: self.end_game() sys.stdout.flush() # exit the program if self.__window is not None: self.__window.quit() else: exit() def restart(self): # stop running threads, flush everything remaining if self.__game is not None: self.end_game() # restart os.execl(sys.executable, sys.executable, * sys.argv) def notify(self, field): if self.__gui is not None and field is not None: try: self.__gui.draw_field(field) except AttributeError: print("back to main menu") def __init_all_except_Game(self): self.__gui = GameGui(self, self.__window) self.__game.remove_observer(self) self.__game.add_observer(self)