def __init__(self): Listener.__init__(self) global lock global alarmLog, pathInstall, pathLog self._val = None self._lifeGui = 10 sound_file = os.path.join("{}essa/alarm/sounds/".format(_globals.pathInstall), "alert3.wav") self.som = Music(sound_file)
def run_game(): # 初始化,创建屏幕对象 pygame.init() pygame.mixer.init() ai_settings = Settings() screen = pygame.display.set_mode( (ai_settings.screen_width, ai_settings.screen_height)) pygame.display.set_caption("Alien Invasion") # 创建开始按钮 play_button = Button(ai_settings, screen, "Play") # 创建一个用于统计游戏统计信息的实例, 创建记分牌 stats = GameStats(ai_settings) sb = Scoreboard(ai_settings, screen, stats) # 创建一艘飞船, 子弹编组, 外星人编组 ship = Ship(screen, ai_settings) bullets = Group() aliens = Group() # 创建外星人群 gf.creat_fleet(ai_settings, screen, ship, aliens) # 创建背景音乐 music = Music() music.bg_music.play(-1) # 开始循环 while True: gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, music) if stats.game_active: ship.update() gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets) gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)
class PopUp(Listener): def __init__(self): Listener.__init__(self) global lock global alarmLog, pathInstall, pathLog self._val = None self._lifeGui = 10 sound_file = os.path.join("{}essa/alarm/sounds/".format(_globals.pathInstall), "alert3.wav") self.som = Music(sound_file) def threaded(fn): def wrapper(*args, **kwargs): threading.Thread(target=fn, args=args, kwargs=kwargs).start() return wrapper @threaded def AlarmGui(self, msg="Alert", title="Alert", choices=("Button[1]", "Button[2]", "Button[3]"), type="alert", sound=None): try: if type == "alert": img = "alert.png" elif type == "error": img = "error.png" image = "{}essa/alarm/images/{}".format(_globals.pathInstall,img) self._val = buttonbox(msg=msg, title=title, image=image, choices=choices, default_choice="Sim",lifeGui=self._lifeGui, sounds=sound) self.analiza(sound) except: pass @threaded def analiza(self, sound): while self._val is None: time.sleep(0.5) if self._val == "Ciente": _globals.alarmAlerts -= 1 alarmLog.warning("Alarm Warning STOPPED - User Action;") sound.stop() else: alarmLog.warning("Alarm Warning STOPPED AUTOMATICALLY - USER AWAY;") _globals.warningAlarm.warning("Alarm Warning STOPPED AUTOMATICALLY - USER AWAY;") sound.stop() #sound.play() #_globals.sound = sound @threaded def LogGui(self, title="Alert", msg="Alert", arq="Essa_test.log"): filename = os.path.normcase("{}{}".format(_globals.pathLog,arq)) f = open(filename, "r") text = f.readlines() f.close() return codebox(msg=msg + filename, title=title, text=text) def process_event(self, event=None, subject=None): global alarmLog if (isinstance(event, EventGui)): try: lock.acquire() #print "Subject", subject subject.alarmGui.AlarmGui(title="Alert for "+str(subject._subjectAlarm), msg=" Notice for "+str(subject._subjectAlarm)+" !\nYour "+str(subject._alarmEvent)+" value has been reached. \n Action required!", choices=["Ciente"],sound=self.som) alarmLog = subject._alarmLog self._lifeGui = subject._lifeGui self.som.play() finally: lock.release() elif (isinstance(event,EventGuiClose)): try: lock.acquire() subject.alarmGui = None subject.alarmGui = PopUp() self.som.stop() finally: lock.release() else: print "OUTRO EVENTO"