def show_the_end(screen): the_end_image = cg_image_controller.get(sfg.EndGame.THE_END_IMAGE_KEY).subsurface( sfg.EndGame.THE_END_IMAGE_RECT).convert() the_end_image_rect = the_end_image.get_rect() the_end_image_rect.center = sfg.Screen.SIZE[0] * 0.5, sfg.Screen.SIZE[1] * 0.4 the_end_word = sfg.EndGame.THE_END_WORD the_end_word_rect = the_end_word.get_rect() the_end_word_rect.center = sfg.Screen.SIZE[0] * 0.5, sfg.Screen.SIZE[1] * 0.8 mask_alpha = 255 fade_in_delta = 256 / (sfg.EndGame.ENDING_FADEIN_TIME - sfg.EndGame.THE_END_SHOW_DELAY_TIME) delay_time = 0 mask = sfg.Screen.DEFAULT_SURFACE clock = pygame.time.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: return True screen.fill(pygame.Color("black")) screen.blit(the_end_image, the_end_image_rect) screen.blit(the_end_word, the_end_word_rect) time_passed = clock.tick(sfg.FPS) passed_seconds = time_passed * 0.001 mask_alpha = int(max(mask_alpha - passed_seconds * fade_in_delta, 0)) mask.fill(pygame.Color(0, 0, 0, mask_alpha)) screen.blit(mask, (0, 0)) pygame.display.flip() if mask_alpha == 0: delay_time += passed_seconds if delay_time > sfg.EndGame.THE_END_SHOW_DELAY_TIME: return
def loading_chapter_picture(screen): img = cg_image_controller.get(sfg.Chapter.LOADING_PICTURE_IMAGE_KEY).subsurface( sfg.Chapter.LOADING_PICTURE_RECT).convert() img_rect = img.get_rect() img_rect.center = sfg.Screen.SIZE[0] * 0.5, sfg.Screen.SIZE[1] * 0.45 alpha = 0 delta = 256 / sfg.Chapter.LOADING_PICTURE_FADE_IN_TIME clock = pygame.time.Clock() while alpha < 255: for event in pygame.event.get(): # no event handle, avoiding "mouse stuck" pass screen.fill(pygame.Color("black")) time_passed = clock.tick(sfg.FPS) passed_seconds = time_passed * 0.001 alpha = int(min(alpha + passed_seconds * delta, 255)) img.set_alpha(alpha) screen.blit(img, img_rect) screen.blit(sfg.Chapter.LOADING_WORD, sfg.Chapter.LOADING_WORD_BLIT_POS) pygame.display.flip()
def start_game(screen): bg_box.play(sfg.Music.START_GAME_KEY) pic = cg_image_controller.get(sfg.StartGame.PICTURE_IMAGE_KEY).convert() pic_rect = pic.get_rect() screen_centerx = sfg.Screen.SIZE[0] * 0.5 pic_rect.centerx = screen_centerx pic_rect.top = sfg.StartGame.PICTURE_BLIT_Y clock = pygame.time.Clock() pic_alpha = 0 # picture fades in, alpha changes from 0 to 255 fade_in_delta = 256 / sfg.StartGame.PICTURE_FADE_IN_TIME # check whether autosave data exists autosave = util.load_auto_save() if autosave is not None: for opt in sfg.Menu.START_GAME["options"]: if opt["mark"] == "load": opt["display"] = True menu = Menu(sfg.Menu.START_GAME) while True: screen.fill(pygame.Color("black")) time_passed = clock.tick(sfg.FPS) passed_seconds = time_passed * 0.001 if pic_alpha < 255: pic_alpha = int(min(pic_alpha + passed_seconds * fade_in_delta, 255)) pic.set_alpha(pic_alpha) screen.blit(pic, pic_rect) for event in pygame.event.get(): if pic_alpha < 255: continue # no events will be handled until the renne's picure is fully displayed if event.type == pygame.QUIT: return {"status": cfg.GameControl.QUIT} if event.type == KEYDOWN: if event.key == K_RETURN: mark = menu.get_current_mark() if mark == "load": return {"status": cfg.GameControl.CONTINUE, "save": autosave} elif mark == "start": return {"status": cfg.GameControl.NEXT} elif mark == "dead_mode": return {"status": cfg.GameControl.DEAD_MODE} elif mark == "quit": return {"status": cfg.GameControl.QUIT} elif event.key == K_ESCAPE: return {"status": cfg.GameControl.QUIT} menu.update(event.key) if pic_alpha == 255: menu.draw(screen) if sfg.CONFIG["hero"] == "joshua": joshua_info = sfg.Font.MSYH_16.render(u"Joshua½ÇÉ«¿ªÆô", True, pygame.Color("white")) screen.blit(joshua_info, (10, 10)) pygame.display.flip()