diff --git a/main.py b/main.py index cb5cf0a..cc7d359 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,117 @@ # 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) @@ -18,4 +129,19 @@ class Button: else: self.image = self.up_image -pygame.init() \ No newline at end of file +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) \ No newline at end of file