main
parent
09338bc01b
commit
58fbf688dd
143
main.py
143
main.py
|
@ -1,4 +1,3 @@
|
||||||
# code
|
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
def load_movement_sprites(prefix, num_sprites):
|
def load_movement_sprites(prefix, num_sprites):
|
||||||
|
@ -9,7 +8,7 @@ def load_movement_sprites(prefix, num_sprites):
|
||||||
sprite_list.append(sprite)
|
sprite_list.append(sprite)
|
||||||
return sprite_list
|
return sprite_list
|
||||||
|
|
||||||
# Load player and movement sprites
|
# Спрайты
|
||||||
player_image = pygame.image.load("player.png")
|
player_image = pygame.image.load("player.png")
|
||||||
forward_sprites = load_movement_sprites("forward", 5)
|
forward_sprites = load_movement_sprites("forward", 5)
|
||||||
backward_sprites = load_movement_sprites("backward", 5)
|
backward_sprites = load_movement_sprites("backward", 5)
|
||||||
|
@ -38,33 +37,26 @@ class Player:
|
||||||
self.current_movement = direction
|
self.current_movement = direction
|
||||||
|
|
||||||
def draw(self):
|
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))
|
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)
|
player = Player(20 // 2, 80 // 2)
|
||||||
|
|
||||||
|
|
||||||
class Camera:
|
class Camera:
|
||||||
def __init__(self, player, size=(400, 300)):
|
def __init__(self, width, height):
|
||||||
self.player = player
|
self.width = width
|
||||||
self.center = pygame.display.get_surface().get_rect().center
|
self.height = height
|
||||||
self.size = size
|
self.x = 0
|
||||||
self.player_size = self.player.rect.size
|
self.y = 0
|
||||||
self.speed_x = 0
|
self.follow_player = True
|
||||||
self.speed_y = 0
|
|
||||||
|
|
||||||
def update(self, dt, sprites):
|
def apply(self, target_rect):
|
||||||
x_move = abs(self.player.rect.centerx - self.center[0]) > self.size[0] // 2
|
return target_rect.move(self.x, self.y)
|
||||||
y_move = abs(self.player.rect.centery - self.center[1]) > self.size[1] // 2
|
|
||||||
if x_move or y_move:
|
def update(self, target):
|
||||||
for sprite in sprites:
|
if self.follow_player:
|
||||||
if x_move:
|
self.x = -target.x + self.width // 2
|
||||||
self.speed_x = (self.player.rect.centerx - self.center[0]) * 2 * dt
|
self.y = -target.y + self.height // 2
|
||||||
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):
|
class Wall(pygame.sprite.Sprite):
|
||||||
def __init__(self, color, size, pos):
|
def __init__(self, color, size, pos):
|
||||||
|
@ -108,39 +100,45 @@ clock = pygame.time.Clock()
|
||||||
deltatime = 0
|
deltatime = 0
|
||||||
running = True
|
running = True
|
||||||
|
|
||||||
# Buttons
|
# Кнопки
|
||||||
play_button = Button("close_up.png", "close_over.png", (125, 3))
|
play_button = Button("play1.png", "play2.png", (125, 3))
|
||||||
continue_button = Button("shuffle_up.png", "shuffle_over.png", (110, 3))
|
continue_button = Button("continue1.png", "continue2.png", (110, 3))
|
||||||
menu_button = Button("hint_up.png", "hint_over.png", (95, 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)),
|
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", (20, 720), (0, 360)), Wall("white", (1280, 20), (1280, 720)),
|
||||||
Wall("white", (200, 20), (640, 360)), Wall("white", (20, 200), (640, 360)),
|
Wall("white", (200, 20), (640, 360)), Wall("white", (20, 200), (640, 360)),
|
||||||
Wall("white", (1280, 20), (1280, 320)))
|
Wall("white", (1280, 20), (1280, 320)))
|
||||||
|
|
||||||
player_group = pygame.sprite.GroupSingle(Player("red", (100, 100), (200, 600), walls))
|
class Character(pygame.sprite.Sprite):
|
||||||
camera = Camera(player_group.sprite, (300, 200))
|
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()
|
class Player(pygame.sprite.Sprite):
|
||||||
all_sprites.add(player_group, walls)
|
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:
|
camera = Camera(1920, 1080)
|
||||||
for event in pygame.event.get():
|
player = Player(200, 200, 50, 50, (255, 0, 0))
|
||||||
if event.type == pygame.QUIT:
|
character1 = Character(200, 200, 50, 50, "red", "Character 1")
|
||||||
running = False
|
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)
|
# Define game states
|
||||||
player_group.update(deltatime)
|
class GameState:
|
||||||
|
MENU = 0
|
||||||
|
GAMEPLAY = 1
|
||||||
|
|
||||||
all_sprites.draw(screen)
|
current_state = GameState.MENU
|
||||||
|
|
||||||
pygame.display.flip()
|
|
||||||
|
|
||||||
deltatime = clock.tick(FPS) / 1000
|
|
||||||
|
|
||||||
pygame.quit()
|
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
|
@ -150,15 +148,64 @@ while running:
|
||||||
if event.key == pygame.K_ESCAPE:
|
if event.key == pygame.K_ESCAPE:
|
||||||
running = False
|
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()
|
background_img_image = pygame.image.load(BACKGROUND_IMAGE).convert_alpha()
|
||||||
screen.blit(background_img_image, (0, 0))
|
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()
|
mouse_pos = pygame.mouse.get_pos()
|
||||||
|
|
||||||
play_button.update(mouse_pos)
|
play_button.update(mouse_pos)
|
||||||
continue_button.update(mouse_pos)
|
continue_button.update(mouse_pos)
|
||||||
menu_button.update(mouse_pos)
|
menu_button.update(mouse_pos)
|
||||||
|
|
||||||
screen.blit(play_button.image, play_button.rect)
|
pygame.display.flip()
|
||||||
screen.blit(continue_button.image, continue_button.rect)
|
deltatime = clock.tick(FPS) / 1000
|
||||||
screen.blit(menu_button.image, menu_button.rect)
|
|
||||||
|
screen.fill("black")
|
||||||
|
|
||||||
|
pygame.quit()
|
Loading…
Reference in New Issue