示例#1
0
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)