def handleEvents(events=None, escape_exits=True): global next_screen, forceUpdate, quitPrompt # update last events Input.update() # Update our mouse position and 3 button state Input.update_mouse(pygame.mouse.get_pressed(), pygame.mouse.get_pos()) # Add all events from the event queue to the input module # for this loop cycle. if events is None: events = pygame.event.get() Input.add_events(events) if (Input.down(K_ESCAPE) and escape_exits) or Input.isset("QUIT"): if not quitPrompt: quitPrompt = True if game.yesno_prompt("Exit RED -spider lily-?"): next_screen = None return "quit" quitPrompt = False forceUpdate = True Input.update() # if Input.up(K_F9): # level = int(getInput("Goto level #:", pygame.Rect(0, 550, 800, 50), default="0")) # forceUpdate = True # game.load_level(level, game.mc) if Input.up(K_F8): mapeditor.map_editor() forceUpdate = True
def credits_screen(): goscreen = core.load_image("credits.png", directory="gfx", auto_alpha=False) core.dissolve_transition( core.screen.copy().convert(), goscreen.copy().convert(), 1000 ) while True: core.clock.tick(core.MAX_FPS) events = pygame.event.get() if core.handleEvents(events) == "quit": exit() for event in events: if event.type == KEYUP: core.play_sound("button_click") Input.update() core.next_screen = main_menu return core.screen.blit(goscreen, (0,0)) core.updateScreen()
def game_over(score, rank): core.play_music("game over", queue=True) # load game over screen goscreen = core.load_image("game_over.png", directory="gfx", auto_alpha=False) core.dissolve_transition( core.screen.copy().convert(), goscreen.copy().convert(), 1000 ) while True: core.clock.tick(core.MAX_FPS) events = pygame.event.get() if core.handleEvents(events) == "quit": exit() for event in events: if event.type == KEYUP: core.next_screen = core.curry(hiscores_screen, score, rank) Input.update() return core.screen.blit(goscreen, (0,0)) core.updateScreen()
def hiscores_screen(score=None, rank=0): last_screen = core.screen.copy().convert() scores = [] import xdrlib if not os.path.exists("high_scores"): # fill with default scores default_scores = [(100000,2),(50000,2),(30000,2),(20000,2),(10000,2),(8000,1), (4000,1),(500,0)] for i in range(8): s, r = default_scores[i] scores.append( ("Nozomi", s, r) ) else: # load from file data = open("high_scores", "rb").read() loader = xdrlib.Unpacker(data) for i in range(8): scores.append( (loader.unpack_string(), loader.unpack_int(), loader.unpack_int()) ) # verify if we have a high score =D if score is not None: for index, _score in enumerate(scores): name, _score, _rank = _score if (score > _score) or (score == _score and rank > _rank): player_name = core.InputPrompt("Nice timing! You've scored high, Mr/Mrs...", "Player") scores.insert(index, (player_name, score, rank)) break # save scores p = xdrlib.Packer() for name, score, rank in scores: p.pack_string(name) p.pack_int(score) p.pack_int(rank) f = open("high_scores", "wb") f.write(p.get_buffer()) f.close() # load graphics =D bg = core.load_image("hiscores.png", directory="gfx") stars = pygame.transform.smoothscale(core.load_image("rank_star.png", directory="gfx"), (86,40)) stars = [ core.im_crop(stars, pygame.Rect(0,0,43,40)), core.im_crop(stars, pygame.Rect(43,0,43,40)) ] core.screen.blit(bg, (0,0)) # render high scores! for index, score in enumerate(scores): name, score, rank = score # 260, 100 y = 100 + 40*index # name core.fonts.Draw(core.screen, None, 36, name, pygame.Rect(260,y,200,40), (255,255,255,255),alignVert='center',antialias=True) # points score = str(score) w = 160-core.numbers.getWidth(score) core.numbers.draw(core.screen, (470+w,y+8), score) # rank if rank > 2: core.screen.blit(stars[1], (660,y)) else: core.screen.blit(stars[0], (660,y)) if rank > 1: core.screen.blit(stars[1], (703,y)) else: core.screen.blit(stars[0], (703,y)) if rank > 0: core.screen.blit(stars[1], (746,y)) else: core.screen.blit(stars[0], (746,y)) core.dissolve_transition(last_screen, core.screen.copy().convert(), 1000) while True: events = pygame.event.get() if core.handleEvents(events) == "quit": exit() for event in events: if event.type == KEYUP: core.next_screen = main_menu core.play_sound("button_click") Input.update() return