def play(screen, height): global current_level smooth_end = 0 finished = [] alpha_surf = pygame.Surface(screen.get_size(), pygame.SRCALPHA) alpha_surf.fill((255, 255, 255, 220), special_flags=pygame.BLEND_RGBA_MULT) camera = Camera(screen.get_size()[1]) running = True player1.isMoving = True player1.isMovingDown = True player2.isMoving = True player2.isMovingDown = True draw_sprites = pygame.sprite.Group() while running: playable = player1.isPlayable and player2.isPlayable draw_sprites.empty() time_delta = clock.tick(fps) / 1000 for event in pygame.event.get(): if event.type == pygame.QUIT: terminate() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: terminate() else: eval(str(buttons.get(event.key))) alpha_surf.fill((255, 255, 255, 250), special_flags=pygame.BLEND_RGBA_MULT) new_alpha = pygame.Surface(screen.get_size(), pygame.SRCALPHA) screen.fill((0, 0, 0)) if not player1.move(time_delta, player_group, tile_group, all_sprites, alpha_surf, finish): finished.append(1) if not player2.move(time_delta, player_group, tile_group, all_sprites, alpha_surf, finish): finished.append(2) if playable and not finished: if player1.rect.y > screen.get_size()[1]: finish.rect.y = player2.rect.y - finish.rect.h finished.append(2) if player2.rect.y > screen.get_size()[1]: finish.rect.y = player1.rect.y - finish.rect.h finished.append(1) elif ((not player1.isPlayable and not player2.isPlayable) and (not finished and (player1.rect.y <= screen.get_size()[1] * 0.6 or player2.rect.y <= screen.get_size()[1] * 0.6))): player1.isPlayable = True player2.isPlayable = True alpha_surf.blit( pygame.transform.scale(load_image("start.png"), screen.get_size()), (0, 0)) player1.inverted += player2.other_inverted * 3 player2.inverted += player1.other_inverted * 3 player1.other_inverted, player2.other_inverted = 0, 0 y = camera.scroll_for( player1 if player1.rect.y < player2.rect.y else player2) new_alpha.blit(alpha_surf, (0, -y)) alpha_surf = new_alpha for sprite in all_sprites: camera.apply(sprite) camera.apply(finish) screen.blit(alpha_surf, (0, 0)) for sprite in tile_group: if 0 - 2 / 3 * tile_size < sprite.rect.y < height: # + tile_size: sprite.add(draw_sprites) draw_sprites.draw(screen) pygame.display.flip() if finished: if playable: result = "Player " + str(finished[0]) + " has won!" if len( finished) == 1 else "draw!" if result == "draw!": player1.isPlayable = False player2.isPlayable = False else: k = ("player" + str(int(result.split("Player ")[1][0]) % 2 + 1) + ".switch_off()") eval(k) smooth_end += time_delta if smooth_end > 1.22: time.sleep(0.3) running = False SCORE[1] += 1 in finished SCORE[2] += 2 in finished current_level += 1 return result