Hell_Circus/main.py

165 lines
5.3 KiB
Python

# 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)