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
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()
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()
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()