import pygame from TilesMP2 import Tile from SettingsMP2 import tile_size, screen_width from PlayerMP2 import Player class Level: def __init__(self, level_data, surface): #level setup self.display_surface = surface self.setup_level(level_data) self.world_shift = 0 def setup_level(self, layout): self.tiles = pygame.sprite.Group() self.player = pygame.sprite.GroupSingle() for row_index, row in enumerate(layout): for col_index, cell in enumerate(row): x = col_index * tile_size y = row_index * tile_size #Place tiles if cell == 'X': tile = Tile((x, y), tile_size) self.tiles.add(tile) #Place player if cell == "P": player_sprite = Player((x, y)) self.player.add(player_sprite) def scroll_x(self): player = self.player.sprite player_x = player.rect.centerx direction_x = player.direction.x if player_x < screen_width / 4 and direction_x < 0: self.world_shift = 8 player.speed = 0 elif player_x > screen_width - screen_width / 4 and direction_x > 0: self.world_shift = -8 player.speed =0 else: self.world_shift = 0 player.speed = 8 def horizontal_movement_collision(self): player = self.player.sprite player.rect.x += player.direction.x * player.speed for sprite in self.tiles.sprites(): if sprite.rect.colliderect(player.rect): if player.direction.x < 0: player.rect.left = sprite.rect.right elif player.direction.x > 0: player.rect.right = sprite.rect.left def vertical_movement_collision(self): player = self.player.sprite player.apply_gravity() for sprite in self.tiles.sprites(): if sprite.rect.colliderect(player.rect): if player.direction.y > 0: player.rect.bottom = sprite.rect.top player.direction.y = 0 player.on_ground = True elif player.direction.y < 0: player.rect.top = sprite.rect.bottom player.direction.y = 0 player.on_ceiling = True def run(self): #Level tiles self.tiles.update(self.world_shift) self.tiles.draw(self.display_surface) self.scroll_x() #player self.player.update() self.player.draw(self.display_surface) self.vertical_movement_collision() self.horizontal_movement_collision()