import pygame from time import sleep from pygame.sprite import Sprite pygame.init() class Camera: def __init__(self, player, size=(400, 300)): self.player = player self.center = pygame.display.get_surface().get_rect().center self.size = size self.player_size = self.player.rect.size self.speed_x = 0 self.speed_y = 0 def update(self, dt, sprites): x_move = abs(self.player.rect.centerx - self.center[0]) > self.size[0] // 2 y_move = abs(self.player.rect.centery - self.center[1]) > self.size[1] // 2 if x_move or y_move: for sprite in sprites: if x_move: self.speed_x = (self.player.rect.centerx - self.center[0]) * 2 * dt sprite.rect.x -= self.speed_x if y_move: self.speed_y = (self.player.rect.centery - self.center[1]) * 2 * dt sprite.rect.y -= self.speed_y class Wall(pygame.sprite.Sprite): def __init__(self, size, pos) -> None: super().__init__() self.image = pygame.surface.Surface(size) self.image.fill("red") self.rect = self.image.get_rect(center=pos) class Floor(pygame.sprite.Sprite): def __init__(self, size, pos) -> None: super().__init__() def create_floor(file_name): floor = [] with open (file_name) as f: lines = f.readlines() for i, line in enumerate(lines[::2]): if floor == "#": floor.append(Floor((30,30), (30 + 30*i))) return floor def create_walls(file_name): walls = [] with open(file_name) as f: lines = f.readlines() for i, line in enumerate(lines[::2]): for j, floor in enumerate(line[1::2]): if floor == "|": walls.append(Wall((5, 30), (15 + 30*j, 30*i))) for i, line in enumerate(lines[1::2]): for j, floor in enumerate(line[::2]): if floor == "-": walls.append(Wall((30, 5), (30*j, 15 + 30*i))) return walls class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.right = True self.move = True self.player_pos = pygame.Vector2(screen.get_width() / 2, screen.get_height() / 2) self.dt = 0 self.keys = pygame.key.get_pressed() self.player_right = pygame.transform.scale(pygame.image.load("Sprites/Idle/Player_right.png").convert_alpha(), (35, 40)), self.player_run_right_1 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_1.png").convert_alpha(), (35, 40)), self.player_run_right_2 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_2.png").convert_alpha(), (35, 40)), self.player_run_right_3 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_3.png").convert_alpha(), (35, 40)), self.player_run_right_4 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_4.png").convert_alpha(), (35, 40)), self.player_run_right_5 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_5.png").convert_alpha(), (35, 40)), self.player_run_right_6 = pygame.transform.scale(pygame.image.load("Sprites/Running/Player_run_right_6.png").convert_alpha(), (35, 40)) self.player_left = pygame.transform.scale(pygame.image.load("Sprites/Idle/Player_left.png").convert_alpha(), (35, 40)) def movement(self): if self.keys[pygame.K_w]: self.player_pos.y -= 200 * dt if self.keys[pygame.K_s]: self.player_pos.y += 200 * dt if self.keys[pygame.K_a]: self.player_pos.x -= 200 * dt screen.blit(self.player_left, (self.player_pos.x, self.player_pos.y)) right = False if self.keys[pygame.K_d]: self.player_pos.x += 200 * dt screen.blit(self.player_right, (self.player_pos.x, self.player_pos.y)) self.right = True self.move = True else: move = False def sprites(self): if self.right == True: screen.blit(self.player_right, (self.player_pos.x, self.player_pos.y)) else: screen.blit(self.player_left, (self.player_pos.x, self.player_pos.y)) while self.move == True: screen.blit(self.player_run_right_1, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen.blit(self.player_run_right_2, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen.blit(self.player_run_right_3, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen.blit(self.player_run_right_4, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen.blit(self.player_run_right_5, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen.blit(self.player_run_right_6, (self.player_pos.x, self.player_pos.y)) sleep(0.05) screen = pygame.display.set_mode((1920, 1015)) pygame.display.set_caption("Game_name") clock = pygame.time.Clock() floor_image = pygame.transform.scale(pygame.image.load("Floor.png").convert_alpha(), (30, 30)) running = True wall_list = create_walls("lvl.txt") for wall in wall_list: print(f'{wall.rect.size})x = {wall.rect.x}; y = {wall.rect.y}') walls = pygame.sprite.Group(*wall_list) floor_list = create_floor("lvl.txt") for floor in floor_list: print(f'{floor.rect.size})x = {floor.rect.x}; y = {floor.rect.y}') floor = pygame.sprite.Group(*floor_list) player = Player() all_sprites = pygame.sprite.Group() all_sprites.add(player) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill("cyan") for y in range(10,20): for x in range(26,38): screen.blit(floor_image, (30*x, 30*y)) all_sprites.draw(screen) walls.draw(screen) pygame.display.flip() dt = clock.tick(60)/1000 floor.draw(screen) pygame.quit()