Пример #1
0
class Game:
    def __init__(self, player):
        self.player = player
        self.gui = GUI()
        self.worlds = []
        self.current_page = 'main_menu'
        self.pages = {}
        self.exit = False
        self.keys_pressed = []
        keymap.add((pygame.K_ESCAPE,), self.quit)

    def add_world(self, setup):
        self.worlds.append(World(setup))

    def check_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                quit()
            elif event.type == pygame.KEYDOWN:
                if self.gui.selected:
                    if self.gui.selected.key_input(event.key):
                        continue
                if event.key not in self.keys_pressed:
                    self.keys_pressed.append(event.key)
            elif event.type == pygame.KEYUP:
                if event.key in self.keys_pressed:
                    self.keys_pressed.remove(event.key)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                for widget in self.gui.widgets:
                    if widget.rect.collidepoint(mouse_pos):
                        widget.select()
        for keys, action in keymap.keymap.items():
            if all([True if key in self.keys_pressed else False
                   for key in keys]):
                action()

    def main_loop(self):
        last_frame = time()
        while not self.exit:
            turn_time = time()
            for world in self.worlds:
                world.update()
            if turn_time - last_frame >= 1/config.FPS:
                self.pages[self.current_page].draw()
                if config.SCENT_VISIBLE:
                    # ToDo: replace world below with self.player.world
                    self.gui.draw_markers(world.markers)
                    if not world.current_tick % 250:
                        world.markers.update()
                self.gui.draw()
                self.gui.update()
                last_frame = time()
            self.check_events()

    def quit(self):
        if self.exit:
            pygame.quit()
        else:
            self.exit = True
Пример #2
0
 def show_path(self, game, path):
     gui = GUI()
     if gui is not None:
         gui.update(game)
         # print "%s has hand" % self.name, self.info.hand
         gui.show_destinations(self.info.destinations)
         gui.show_path(path)
         raw_input("Continue?")
     gui.close()
def test_gui():
    pygame.init()
    window = pygame.display.set_mode((1024, 768))
    pygame.display.set_caption("Testing GUI")
    screen = pygame.display.get_surface()
    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((0,0,0))
    font = None
    if pygame.font:
        font = pygame.font.Font(None, 20)
    
    gui = GUI(None)
    gui.set_active(True)
    menu = BasicMenu(gui, h_pad=10, v_pad=10)
    gui.add_child(menu)
    menu.set_active(True)
    menu.add_child(BasicTextButton(menu, text = 'Select Mission', select_fxn = menu.mouse_over_callback, callback = gui.generic_click, callback_kwargs = {'target_id': 1}))
    menu.add_child(BasicTextButton(menu, text = 'Exit', select_fxn = menu.mouse_over_callback, callback = gui.exit_click))
    gui.add_child(BasicMenu(gui))
    '''
    frame = Frame(gui)
    gui.add_child(frame)
    frame.set_active(True)
    
    testel = TestElement(frame)
    testel.image = pygame.surface.Surface((100,50))
    testel.image = testel.image.convert()
    testel.image.fill((51, 102, 255))
    testel.rect = testel.image.get_rect()
    testel.rect.topleft = ((window.get_width() - testel.rect.width) * 0.5, (window.get_height() - testel.rect.height) * 0.5)
    '''
    while True:
        events = pygame.event.get()
        for event in events:
            if event.type == pygame.QUIT:
                sys.exit(0)
        
        if gui.is_active(): gui.update(events)
        
        screen.blit(background, (0,0))
        
        if gui.is_active(): gui.draw()
        
        pygame.display.flip()
Пример #4
0
class _Game:
    def __init__(self):
        self._gui = GUI()
        self.is_COM_enabled = False
        self._synth = Synthesizer()

        self.running = False

    def start(self):
        """
        Arduino threshold setting and Loop starting
        """
        self.running = True

        if self.is_COM_enabled:
            # Подготовка COM порта
            self._ser = serial.Serial(port='COM17', baudrate=9600)  # fixme

            # Считывание установленного порога
            # self.threshold = int(
            #     re.search(
            #         "d{, 4}",
            #         str(self._ser.readline()),
            #         flags=re.ASCII))

        self._clock = pygame.time.Clock()

        # Старт петли
        self._loop()

    def _loop(self):
        """
        Main cycle
        """
        while self.running:
            self._clock.tick(30)
            for event in pygame.event.get():
                # Обработка выхода
                if event.type == pygame.QUIT:
                    self.quit()

                # Работа с клавишами
                if event.type == pygame.KEYDOWN:
                    if event.key == ord('q'):
                        self.quit()

                    # Обработка нажатий и отпускания.
                    for note in self._synth.notes:
                        if (event.key == self._synth.notes[note]['key_code']):
                            self._synth.handle_key_down(note)

                if event.type == pygame.KEYUP:
                    for note in self._synth.notes:
                        if (event.key == self._synth.notes[note]['key_code']):
                            self._synth.handle_key_up(note)

            if self.running:
                if self.is_COM_enabled:
                    # Работа  COM портом
                    if self._ser.in_waiting > 0:
                        # if self._ser.
                        # Считываем строку из COM порта
                        line = str(self._ser.readline())

                        # Ищем в строке A или !A
                        note_tags = re.findall('[!]?[A-F]',
                                               line,
                                               flags=re.ASCII)

                        for note_tag in note_tags:
                            if note_tag[0] != '!':
                                self._synth.handle_key_down(note_tag[0])
                            else:
                                self._synth._handle_key_up(note_tag[1])

                self._gui.update(self._synth.notes)
                self._synth.play()

    def quit(self):
        self.running = False
        if self.is_COM_enabled:
            self._ser.close()
        self._synth.close()
        pygame.quit()
Пример #5
0
class Game:
    """Игра."""
    def __init__(self):
        """Конструктор."""
        self.running = True
        self._get_config()
        self._gui = GUI()
        self._synth = Synthesizer()

    @staticmethod
    def _ch_dir() -> str:
        """Изменение дирректории src для pyInstaller для exe в одном фойле.

        :return: Путь до директории с исполняемым файлом.
        :rtype: str
        """
        if getattr(sys, 'frozen', False):
            os.chdir(sys._MEIPASS)
            bundle_dir = sys.executable.replace('piano_Fruit.exe', '')
        else:
            bundle_dir = ''

        return bundle_dir

    def _get_config(self):
        """Взятие настроек из внешнего файла."""
        bundle_dir = self._ch_dir()
        config = configparser.ConfigParser()

        if len(config.read(bundle_dir + 'settings.ini', encoding='utf8')) != 0:
            self.config = config
        else:
            self._set_config()

    def _set_config(self):
        """Установка настроек в внешний файл."""
        bundle_dir = self._ch_dir()
        config = configparser.ConfigParser(allow_no_value=True)
        config.optionxform = str
        config['COM'] = {
            '# Доступен ли COM порт':
            None,
            'is_COM_enabled':
            False,
            '\n# Номер COM порта.\n' + '# Для поиска номера воспользуйтесь диспетчером устройств':
            None,
            'COM':
            'COM17',
            '\n# Порог для считывания нажатий \n' + '# От 0 - ловит ничего, до 1023 - ловит все':
            None,
            'threshold':
            1000
        }
        self.config = config

        with open(bundle_dir + 'settings.ini', 'w',
                  encoding='utf8') as config_file:
            config.write(config_file)
        self.running = False

    def start(self):
        """Arduino threshold setting and Loop starting."""
        if self.config['COM'].getboolean('is_COM_enabled'):
            # Подготовка COM порта
            self._ser = serial.Serial(port=self.config['COM']['COM'],
                                      baudrate=9600)
            # Ожидание загрузки bootloader-а
            pygame.time.wait(1700)

            self._ser.write(
                (str(self.config['COM']['threshold'])).encode('utf-8'))

            print('threshold = ', self._ser.readline())

        self._clock = pygame.time.Clock()

        # Старт петли
        self._loop()

    def _loop(self):
        """Start main cycle."""
        while self.running:
            self._clock.tick(30)

            for event in pygame.event.get():
                # Обработка выхода
                if event.type == pygame.QUIT:
                    self.quit()

                # Работа с клавишами
                if event.type == pygame.KEYDOWN:
                    if event.key == ord('q'):
                        self.quit()

                    # Обработка нажатий и отпускания.
                    for note in self._synth.notes:
                        if (event.key == note.key_code):
                            self._synth.handle_key_down(note.name)

                if event.type == pygame.KEYUP:
                    for note in self._synth.notes:
                        if (event.key == note.key_code):
                            self._synth.handle_key_up(note.name)

            if self.running:
                if self.config['COM'].getboolean('is_COM_enabled'):
                    # Работа  COM портом
                    if self._ser.in_waiting > 0:
                        # Считываем строку из COM порта
                        line = str(self._ser.readline())

                        # Ищем в строке A или !A
                        note_tags = re.findall('[!]?[A-G]',
                                               line,
                                               flags=re.ASCII)

                        for note_tag in note_tags:
                            if note_tag[0] != '!':
                                self._synth.handle_key_down(note_tag[0])
                            else:
                                self._synth.handle_key_up(note_tag[1])

                self._gui.update(self._synth.notes)
                self._synth.play()

    def quit(self):
        """Выход из игры."""
        self.running = False
        if self.config['COM'].getboolean('is_COM_enabled'):
            self._ser.close()
        self._synth.close()
        pygame.quit()