Player-Klasse gemacht
This commit is contained in:
parent
5783976829
commit
bbac5c4fc7
1 changed files with 80 additions and 59 deletions
139
game.py
139
game.py
|
|
@ -19,13 +19,16 @@ class Game:
|
||||||
(self.screen.get_width() // 2, self.screen.get_height() // 2)
|
(self.screen.get_width() // 2, self.screen.get_height() // 2)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.movement: list[bool] = [False, False, False, False]
|
|
||||||
|
|
||||||
self.running: bool = True
|
self.running: bool = True
|
||||||
|
|
||||||
self.dt: int = 0
|
self.dt: int = 0
|
||||||
|
|
||||||
self.player_pos = pygame.Vector2(self.display.get_width() / 2, self.display.get_height() / 2)
|
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)
|
self.item_rect = pygame.Rect(60, 40, 10, 10)
|
||||||
|
|
||||||
|
|
@ -35,10 +38,7 @@ class Game:
|
||||||
|
|
||||||
self.color_item = (0, 0, 0)
|
self.color_item = (0, 0, 0)
|
||||||
|
|
||||||
self.speed = 300
|
|
||||||
|
|
||||||
self.player_width = 20
|
|
||||||
self.player_height = 20
|
|
||||||
|
|
||||||
self.walls = [
|
self.walls = [
|
||||||
pygame.Rect(100, 100, 20, 50),
|
pygame.Rect(100, 100, 20, 50),
|
||||||
|
|
@ -54,7 +54,6 @@ class Game:
|
||||||
# Background
|
# Background
|
||||||
self.display.fill((0, 0, 0, 0))
|
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
|
# Event-Keys
|
||||||
|
|
@ -115,7 +114,6 @@ class Game:
|
||||||
|
|
||||||
pygame.draw.rect(self.display, self.color_item, self.item_rect)
|
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)
|
pygame.draw.rect(self.display, "grey", wall)
|
||||||
|
|
||||||
|
|
||||||
|
self.player.update(walls=self.walls, dt=self.dt)
|
||||||
# Smooth Movement
|
self.player.render(surface=self.display)
|
||||||
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)
|
|
||||||
|
|
||||||
# print(f"Player Pos: {self.player_pos}, Player Pos Before: {player_pos_before}")
|
# print(f"Player Pos: {self.player_pos}, Player Pos Before: {player_pos_before}")
|
||||||
|
|
||||||
|
|
@ -211,5 +158,79 @@ class Game:
|
||||||
return distance <= circle_r
|
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 = Game()
|
||||||
game.run()
|
game.run()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue