From bbac5c4fc75188001b535cdeaa7c4a693a025c59 Mon Sep 17 00:00:00 2001 From: Benjamin Date: Tue, 8 Sep 2026 15:27:52 +0200 Subject: [PATCH] Player-Klasse gemacht --- game.py | 139 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 80 insertions(+), 59 deletions(-) diff --git a/game.py b/game.py index b4e7317..c9c7ef0 100644 --- a/game.py +++ b/game.py @@ -19,13 +19,16 @@ class Game: (self.screen.get_width() // 2, self.screen.get_height() // 2) ) - self.movement: list[bool] = [False, False, False, False] self.running: bool = True self.dt: int = 0 self.player_pos = pygame.Vector2(self.display.get_width() / 2, self.display.get_height() / 2) + self.player_width = 20 + self.player_height = 20 + + self.player = Player(self, self.player_pos, width=self.player_width, height=self.player_height) self.item_rect = pygame.Rect(60, 40, 10, 10) @@ -35,10 +38,7 @@ class Game: self.color_item = (0, 0, 0) - self.speed = 300 - self.player_width = 20 - self.player_height = 20 self.walls = [ pygame.Rect(100, 100, 20, 50), @@ -54,7 +54,6 @@ class Game: # Background self.display.fill((0, 0, 0, 0)) - self.player_rect = pygame.Rect(self.player_pos[0]-10, self.player_pos[1]-10, self.player_width, self.player_height) # Event-Keys @@ -115,7 +114,6 @@ class Game: pygame.draw.rect(self.display, self.color_item, self.item_rect) - pygame.draw.rect(self.display, (255, 0, 0), self.player_rect) @@ -123,59 +121,8 @@ class Game: pygame.draw.rect(self.display, "grey", wall) - - # Smooth Movement - keys = pygame.key.get_pressed() - - direction = pygame.Vector2( - keys[pygame.K_d] - keys[pygame.K_a], - keys[pygame.K_s] - keys[pygame.K_w] - ) - - if direction.length_squared() > 0: - direction = direction.normalize() - - movement = direction * self.speed * self.dt - - self.player_pos += movement - - # player_rect.center = round(player_pos) - self.player_rect.centerx = round(self.player_pos.x) - - for wall in self.walls: - if self.player_rect.colliderect(wall): - if movement.x > 0: - self.player_rect.right = wall.left - - elif movement.x < 0: - self.player_rect.left = wall.right - - self.player_pos.x = self.player_rect.centerx - - self.player_rect.centery = round(self.player_pos.y) - - for wall in self.walls: - if self.player_rect.colliderect(wall): - if movement.y > 0: - self.player_rect.bottom = wall.top - - elif movement.y < 0: - self.player_rect.top = wall.bottom - - self.player_pos.y = self.player_rect.centery - - - - - - - self.player_pos[1] = max(self.player_pos[1], self.player_height/2) - - self.player_pos[1] = min(self.player_pos[1], SCREEN_HEIGHT/2-self.player_height/2) - - self.player_pos[0] = max(self.player_pos[0], self.player_width/2) - - self.player_pos[0] = min(self.player_pos[0], SCREEN_WIDTH/2-self.player_width/2) + self.player.update(walls=self.walls, dt=self.dt) + self.player.render(surface=self.display) # print(f"Player Pos: {self.player_pos}, Player Pos Before: {player_pos_before}") @@ -211,5 +158,79 @@ class Game: return distance <= circle_r + + '''Hausaufgabe - Player Klasse - nicht alles auf einmal kopieren''' + +class Player: + def __init__(self, game, pos: pygame.Vector2, width, height): + self.game = game + self.pos = pos + + self.player_width = width + self.player_height = height + + self.speed = 300 + + self.rect = pygame.Rect(self.pos[0]-self.player_width/2, self.pos[1]-self.player_height/2, width, height) + + def update(self, walls, dt): + + self.player_rect = pygame.Rect(self.pos[0]-10, self.pos[1]-10, self.player_width, self.player_height) + + # Smooth Movement + keys = pygame.key.get_pressed() + + direction = pygame.Vector2( + keys[pygame.K_d] - keys[pygame.K_a], + keys[pygame.K_s] - keys[pygame.K_w] + ) + + if direction.length_squared() > 0: + direction = direction.normalize() + + movement = direction * self.speed * dt + + self.pos += movement + + # player_rect.center = round(player_pos) + self.player_rect.centerx = round(self.pos.x) + + for wall in walls: + if self.player_rect.colliderect(wall): + if movement.x > 0: + self.player_rect.right = wall.left + + elif movement.x < 0: + self.player_rect.left = wall.right + + self.pos.x = self.player_rect.centerx + + self.player_rect.centery = round(self.pos.y) + + for wall in walls: + if self.player_rect.colliderect(wall): + if movement.y > 0: + self.player_rect.bottom = wall.top + + elif movement.y < 0: + self.player_rect.top = wall.bottom + + self.pos.y = self.player_rect.centery + + + + self.pos[1] = max(self.pos[1], self.player_height/2) + + self.pos[1] = min(self.pos[1], SCREEN_HEIGHT/2-self.player_height/2) + + self.pos[0] = max(self.pos[0], self.player_width/2) + + self.pos[0] = min(self.pos[0], SCREEN_WIDTH/2-self.player_width/2) + + def render(self, surface): + + pygame.draw.rect(surface, (255, 0, 0), self.player_rect) + + game = Game() game.run()