# code import pygame def load_movement_sprites(prefix, num_sprites): sprite_list = [] for i in range(1, num_sprites + 1): filename = f"{prefix}{i}.png" sprite = pygame.image.load(filename) sprite_list.append(sprite) return sprite_list # Load player and movement sprites player_image = pygame.image.load("player.png") forward_sprites = load_movement_sprites("forward", 5) backward_sprites = load_movement_sprites("backward", 5) left_sprites = load_movement_sprites("left", 5) right_sprites = load_movement_sprites("right", 5) class Player: def __init__(self, x, y): self.x = x self.y = y self.image = player_image self.movement_sprites = { 'forward': forward_sprites, 'backward': backward_sprites, 'left': left_sprites, 'right': right_sprites } self.current_sprite_index = 0 self.current_movement = 'forward' def update_position(self, dx, dy): self.x += dx self.y += dy def change_movement(self, direction): self.current_movement = direction def draw(self): # Draw the current movement sprite at the player's position screen.blit(self.movement_sprites[self.current_movement][self.current_sprite_index], (self.x, self.y)) # Create a Player instance player = Player(20 // 2, 80 // 2) 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, color, size, pos): super().__init__() self.image = pygame.Surface(size) self.image.fill(color) self.rect = self.image.get_rect(center=pos) class Button: def __init__(self, up_image_path, over_image_path, position): self.up_image = pygame.image.load(up_image_path) self.over_image = pygame.image.load(over_image_path) self.image = self.up_image self.rect = self.image.get_rect(topleft=position) self.mask = pygame.mask.from_surface(self.image) def is_hovered(self, mouse_pos): return self.rect.collidepoint(mouse_pos) and self.mask.get_at((mouse_pos[0] - self.rect.x, mouse_pos[1] - self.rect.y)) def update(self, mouse_pos): if self.is_hovered(mouse_pos): self.image = self.over_image else: self.image = self.up_image pygame.init() # Настройки FPS = 60 BACKGROUND_IMAGE = "background.png" FONT, SIZE = 'comicsansms', 14 screen_info = pygame.display.Info() # Пока-что пусть будет screen = pygame.display.set_mode((1920, 1080), pygame.FULLSCREEN) pygame.display.set_caption('Hell Circus') programIcon = pygame.image.load('icon.png') pygame.display.set_icon(programIcon) font = pygame.font.SysFont(FONT, SIZE) clock = pygame.time.Clock() deltatime = 0 running = True # Buttons play_button = Button("close_up.png", "close_over.png", (125, 3)) continue_button = Button("shuffle_up.png", "shuffle_over.png", (110, 3)) menu_button = Button("hint_up.png", "hint_over.png", (95, 3)) walls = pygame.sprite.Group(Wall("white", (1280, 20), (640, 0)), Wall("white", (1280, 20), (640, 720)), Wall("white", (20, 720), (0, 360)), Wall("white", (1280, 20), (1280, 720)), Wall("white", (200, 20), (640, 360)), Wall("white", (20, 200), (640, 360)), Wall("white", (1280, 20), (1280, 320))) player_group = pygame.sprite.GroupSingle(Player("red", (100, 100), (200, 600), walls)) camera = Camera(player_group.sprite, (300, 200)) all_sprites = pygame.sprite.Group() all_sprites.add(player_group, walls) while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill("black") camera.update(deltatime, all_sprites) player_group.update(deltatime) all_sprites.draw(screen) pygame.display.flip() deltatime = clock.tick(FPS) / 1000 pygame.quit() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False background_img_image = pygame.image.load(BACKGROUND_IMAGE).convert_alpha() screen.blit(background_img_image, (0, 0)) mouse_pos = pygame.mouse.get_pos() play_button.update(mouse_pos) continue_button.update(mouse_pos) menu_button.update(mouse_pos) screen.blit(play_button.image, play_button.rect) screen.blit(continue_button.image, continue_button.rect) screen.blit(menu_button.image, menu_button.rect)