diff --git a/main.py b/main.py index 40b9dbd..341fecd 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,3 @@ -# code import pygame def load_movement_sprites(prefix, num_sprites): @@ -9,7 +8,7 @@ def load_movement_sprites(prefix, num_sprites): 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) @@ -38,33 +37,26 @@ class Player: 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 __init__(self, width, height): + self.width = width + self.height = height + self.x = 0 + self.y = 0 + self.follow_player = True - 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 + 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): @@ -108,39 +100,45 @@ 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)) +# Кнопки +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))) -player_group = pygame.sprite.GroupSingle(Player("red", (100, 100), (200, 600), walls)) -camera = Camera(player_group.sprite, (300, 200)) +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 -all_sprites = pygame.sprite.Group() -all_sprites.add(player_group, walls) +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)) -while running: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - running = False +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") - screen.fill("black") +character_sprites = pygame.sprite.Group(character1, character2) +player_sprite = pygame.sprite.Group(player) - camera.update(deltatime, all_sprites) - player_group.update(deltatime) +# Define game states +class GameState: + MENU = 0 + GAMEPLAY = 1 - all_sprites.draw(screen) - - pygame.display.flip() - - deltatime = clock.tick(FPS) / 1000 - -pygame.quit() +current_state = GameState.MENU while running: for event in pygame.event.get(): @@ -149,16 +147,65 @@ while running: 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) - screen.blit(play_button.image, play_button.rect) - screen.blit(continue_button.image, continue_button.rect) - screen.blit(menu_button.image, menu_button.rect) + pygame.display.flip() + deltatime = clock.tick(FPS) / 1000 + + screen.fill("black") + +pygame.quit() \ No newline at end of file