# code import pygame class Player(pygame.sprite.Sprite): def __init__(self, color, size, pos, walls): super().__init__() self.image = pygame.Surface(size) self.image.fill(color) self.rect = self.image.get_rect(center=pos) self.foot_size = 15 self.dt = 0 self.weight = 2500 self.speed_x = 0 self.max_speed_x = 700 self.speed_y = 0 self.max_speed_y = 1500 self.is_jumping = False self.jumping_time = 0 self.walls = walls def gravity(self, dt): self.speed_y += self.weight * dt if self.speed_y > self.max_speed_y: self.speed_y = self.max_speed_y self.rect.y += self.speed_y * dt def jump(self): if not self.is_jumping: self.is_jumping = True self.jumping_time = 0 self.speed_y = -1500 def move_x(self, dt): if abs(self.speed_x) > self.max_speed_x: self.speed_x = self.max_speed_x * (self.speed_x / abs(self.speed_x)) self.rect.x += self.speed_x * dt def collision(self): collisions = pygame.sprite.spritecollide(self, self.walls, False) if collisions: for wall in collisions: if abs(self.rect.bottom - wall.rect.top) < self.foot_size: self.rect.bottom = wall.rect.top self.speed_y = 0 self.jumping_time = 0 self.is_jumping = False elif abs(self.rect.top - wall.rect.bottom) < self.foot_size: self.rect.top = wall.rect.bottom self.speed_y = 0 elif abs(self.rect.right - wall.rect.left) < self.foot_size: self.rect.right = wall.rect.left self.speed_x = 0 elif abs(self.rect.left - wall.rect.right) < self.foot_size: self.rect.left = wall.rect.right self.speed_x = 0 def player_input(self, dt): keys = pygame.key.get_pressed() move_direction = 0 if keys[pygame.K_w]: self.jump() elif keys[pygame.K_SPACE]: self.jump() if keys[pygame.K_a]: self.speed_x -= self.max_speed_x * 3 * dt move_direction = -1 if keys[pygame.K_d]: self.speed_x += self.max_speed_x * 3 * dt move_direction = 1 + move_direction if (move_direction == 0 or (self.speed_x * move_direction < 0)) and not self.is_jumping: self.speed_x -= self.speed_x * 5 * dt elif self.is_jumping: self.speed_x -= self.speed_x * dt if abs(self.speed_x) < 5: self.speed_x = 0 def update(self, dt): self.player_input(dt) self.gravity(dt) self.move_x(dt) self.collision() 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 programIcon = pygame.image.load('icon.png') pygame.display.set_icon(programIcon) pygame.display.set_caption('Hell Circus') screen_info = pygame.display.Info() screen = pygame.display.set_mode((1920, 1080), pygame.FULLSCREEN) transparent = (255, 0, 128) clock = pygame.time.Clock() hwnd = pygame.display.get_wm_info()["window"] font = pygame.font.SysFont(FONT, SIZE)