From f762d491d50bc3d9fe701481d09e60f92873c434 Mon Sep 17 00:00:00 2001
From: elukjanovica <elukjanovica.e@rkg.lv>
Date: Mon, 29 Jan 2024 10:12:55 +0200
Subject: [PATCH] code

---
 main.py | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 127 insertions(+), 1 deletion(-)

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