def run(): """ Main Program """ pygame.init() # Set the height and width of the screen screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) # Create the player player = pl.Player() # All clones clones = [] # Create all the levels level_list = [] level_list.append(lvl.Level01(player)) level_list.append(lvl.Level02(player)) level_list.append(lvl.Level03(player)) # Set the current level current_level_number = 0 current_level = level_list[current_level_number] current_level.__init__(player) active_sprite_list = pygame.sprite.Group() player.level = current_level active_sprite_list.add(player) # Loop until the user clicks the close button. done = False # Used to manage how fast the screen updates clock = pygame.time.Clock() joysticks = [] for i in range(0, pygame.joystick.get_count()): joysticks.append(pygame.joystick.Joystick(i)) joysticks[i].init() print("Detected joystick '", joysticks[i].get_name(), "'") # -------- Main Program Loop ----------- while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True if (event.type == pygame.JOYHATMOTION and joysticks[0].get_hat(0) == (-1, 0)) or (event.type == pygame.KEYDOWN and event.key == pygame.K_LEFT): player.go_left() if (event.type == pygame.JOYHATMOTION and joysticks[0].get_hat(0) == (1, 0)) or (event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT): player.go_right() if (event.type == pygame.JOYBUTTONDOWN and joysticks[0].get_button(0)) or (event.type == pygame.JOYHATMOTION and joysticks[0].get_hat(0) == (0, 1)) or (event.type == pygame.KEYDOWN and event.key == pygame.K_UP): player.jump() if (event.type == pygame.JOYBUTTONDOWN and (joysticks[0].get_button(1) or joysticks[0].get_button(2))) or (event.type == pygame.KEYDOWN and event.key == pygame.K_r): right = True if player.current_anim != player.right_anim: right = False clones.append([player.width(), player.height(), -current_level.world_shift + player.rect.x, player.rect.y, right, player.reverse_gravity]) player.reverse_gravity = False player.set_animation_gravity() current_level.reset(clones) if (event.type == pygame.JOYBUTTONDOWN and joysticks[0].get_button(6)) or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): player.reverse_gravity = False player.set_animation_gravity() clones.clear() current_level.__init__(player) if (event.type == pygame.JOYBUTTONDOWN and joysticks[0].get_button(3)) or (event.type == pygame.KEYDOWN and event.key == pygame.K_2): if player.reverse_gravity: player.reverse_gravity = False player.set_animation_gravity() else: player.reverse_gravity = True player.set_animation_gravity() if (event.type == pygame.JOYHATMOTION and joysticks[0].get_hat(0) == (0, 0)) or (event.type == pygame.KEYUP and event.key == pygame.K_LEFT and player.change_x < 0): player.stop() if (event.type == pygame.JOYHATMOTION and joysticks[0].get_hat(0) == (0, 0)) or (event.type == pygame.KEYUP and event.key == pygame.K_RIGHT and player.change_x > 0): player.stop() if (event.type == pygame.JOYBUTTONDOWN and joysticks[0].get_button(7)) or (event.type == pygame.KEYUP and event.key == pygame.K_p): player.stop() done = Pause.run() if done: continue # Update the player. active_sprite_list.update() spikes = pygame.sprite.spritecollide(player, current_level.spike_list, False) if len(spikes) > 0: player.reverse_gravity = False player.set_animation_gravity() clones.clear() current_level.__init__(player) goals = pygame.sprite.spritecollide(player, current_level.goal_list, False) if len(goals) > 0: player.reverse_gravity = False player.set_animation_gravity() clones.clear() current_level_number += 1 if current_level_number >= len(level_list): done = True continue current_level = level_list[current_level_number] current_level.__init__(player) player.level = current_level continue # Update items in the level current_level.update() left_scroll = SCREEN_WIDTH * .4 right_scroll = SCREEN_WIDTH * .6 # If the player gets near the right side, shift the world left (-x) if player.rect.right >= right_scroll: diff = player.rect.right - right_scroll player.rect.right = right_scroll current_level.shift_world(-diff) # If the player gets near the left side, shift the world right (+x) if player.rect.left <= left_scroll: diff = left_scroll - player.rect.left player.rect.left = left_scroll current_level.shift_world(diff) # ALL CODE TO DRAW SHOULD GO BELOW THIS COMMENT current_level.draw(screen) active_sprite_list.draw(screen) # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT # Limit to 60 frames per second clock.tick(60) # Go ahead and update the screen with what we've drawn. pygame.display.flip() Menu.main(pygame.mixer.music.get_volume())