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 # Спрайты 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): screen.blit(self.movement_sprites[self.current_movement][self.current_sprite_index], (self.x, self.y)) # Игрок player = Player(20 // 2, 80 // 2) class Camera: def __init__(self, width, height): self.width = width self.height = height self.x = 0 self.y = 0 self.follow_player = True def apply(self, target_rect): return target_rect.move(self.x, self.y) def update(self, target): if self.follow_player: self.x = -target.x + self.width // 2 self.y = -target.y + self.height // 2 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 # Кнопки play_button = Button("play1.png", "play2.png", (125, 3)) continue_button = Button("continue1.png", "continue2.png", (110, 3)) menu_button = Button("menu1.png", "menu2.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))) class Character(pygame.sprite.Sprite): def __init__(self, x, y, width, height, color, name): super().__init__() self.image = pygame.Surface((width, height)) self.image.fill(color) self.rect = self.image.get_rect(topleft=(x, y)) self.name = name class Player(pygame.sprite.Sprite): def __init__(self, x, y, width, height, color): super().__init__() self.image = pygame.Surface((width, height)) self.image.fill(color) self.rect = self.image.get_rect(topleft=(x, y)) camera = Camera(1920, 1080) player = Player(200, 200, 50, 50, (255, 0, 0)) character1 = Character(200, 200, 50, 50, "red", "Character 1") character2 = Character(400, 300, 50, 50, "blue", "Character 2") character_sprites = pygame.sprite.Group(character1, character2) player_sprite = pygame.sprite.Group(player) # Define game states class GameState: MENU = 0 GAMEPLAY = 1 current_state = GameState.MENU 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 if current_state == GameState.MENU: # Handle mouse clicks in the menu state if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: mouse_x, mouse_y = pygame.mouse.get_pos() if play_button.is_hovered((mouse_x, mouse_y)): # Transition to the gameplay state current_state = GameState.GAMEPLAY elif current_state == GameState.GAMEPLAY: # Handle events in the gameplay state if event.type == pygame.KEYDOWN: if event.key == pygame.K_e: nearest_character = min(character_sprites, key=lambda c: pygame.math.Vector2(c.rect.center).distance_to(player.rect.center)) distance = pygame.math.Vector2(nearest_character.rect.center).distance_to(player.rect.center) if distance < 100: print(f"Interacted with {nearest_character.name}") keys = pygame.key.get_pressed() if keys[pygame.K_e]: camera.follow_player = not camera.follow_player if camera.follow_player: camera.update(player.rect) background_img_image = pygame.image.load(BACKGROUND_IMAGE).convert_alpha() screen.blit(background_img_image, (0, 0)) # Меню if current_state == GameState.MENU: screen.blit(play_button.image, play_button.rect) screen.blit(continue_button.image, continue_button.rect) screen.blit(menu_button.image, menu_button.rect) elif current_state == GameState.GAMEPLAY: # Обновить игрока player.update_position(5, 0) player.change_movement('right') player.draw() for sprite in character_sprites: screen.blit(sprite.image, camera.apply(sprite.rect)) for sprite in player_sprite: screen.blit(sprite.image, camera.apply(sprite.rect)) # Генерация кнопок mouse_pos = pygame.mouse.get_pos() play_button.update(mouse_pos) continue_button.update(mouse_pos) menu_button.update(mouse_pos) pygame.display.flip() deltatime = clock.tick(FPS) / 1000 screen.fill("black") pygame.quit()