From b76966421ea7e5aacb9e59849b7d8bc2dd09eed7 Mon Sep 17 00:00:00 2001 From: Samuel Zielke Date: Wed, 23 Apr 2025 10:39:55 +0200 Subject: [PATCH] Spieler erstellt mit Fred.png und jump function --- src/main.py | 4 +++- src/player.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/settings.py | 9 ++++++++- src/world.py | 4 ++++ 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/player.py diff --git a/src/main.py b/src/main.py index 3314c42..16f36a8 100644 --- a/src/main.py +++ b/src/main.py @@ -1,3 +1,4 @@ +from player import Player import pygame import sys from menu import Menu # Menü importieren @@ -13,7 +14,7 @@ def main(): menu = Menu(screen) world = World(screen) - current_scene = "menu" # oder "world" + current_scene = settings.START_POINT running = True while running: @@ -38,6 +39,7 @@ def main(): if current_scene == "menu": menu.draw() elif current_scene == "world": + world.player.update(world.ground_rect.top) world.draw() pygame.display.flip() diff --git a/src/player.py b/src/player.py new file mode 100644 index 0000000..1ffac4a --- /dev/null +++ b/src/player.py @@ -0,0 +1,49 @@ +import pygame +import settings + +class Player: + def __init__(self, x, y): + self.image_normal = pygame.transform.scale( + pygame.image.load(settings.player.fred.normal).convert_alpha(), + settings.player.size + ) + self.image_jump = pygame.transform.scale( + pygame.image.load(settings.player.fred.olli).convert_alpha(), + settings.player.size + ) + self.image = self.image_normal # Anfangszustand + self.rect = self.image.get_rect(topleft=(x, y)) + self.velocity_y = 0 + self.speed = 5 + self.gravity = 1 + self.jump_strength = -12 + self.on_ground = False + + def update(self, ground_y): + keys = pygame.key.get_pressed() + was_on_ground = self.on_ground + if keys[pygame.K_LEFT]: + self.rect.x -= self.speed + if keys[pygame.K_RIGHT]: + self.rect.x += self.speed + if keys[pygame.K_SPACE] and self.on_ground: + self.velocity_y = self.jump_strength + self.on_ground = False + if self.on_ground and self.image != self.image_normal: + self.image = self.image_normal + elif not self.on_ground and self.image != self.image_jump: + self.image = self.image_jump + if not self.on_ground and was_on_ground and settings.DEBUG: + print("Fred springt!") + + self.velocity_y += self.gravity + self.rect.y += self.velocity_y + + # Boden-Kollision + if self.rect.bottom >= ground_y: + self.rect.bottom = ground_y + self.velocity_y = 0 + self.on_ground = True + + def draw(self, screen): + screen.blit(self.image, self.rect) \ No newline at end of file diff --git a/src/settings.py b/src/settings.py index bb38d25..2d4a756 100644 --- a/src/settings.py +++ b/src/settings.py @@ -1,14 +1,21 @@ # Einstellungen SCREEN_WIDTH = 1280 SCREEN_HEIGHT = 720 -FPS = 30 +FPS = 60 DEBUG = True Mute = True +START_POINT = "world" # world, menu # Schriftarten class fonts: PressStart2P = '../assets/fonts/PressStart2P-Regular.ttf' +class player: + size = (100, 100) + class fred: + normal = "../assets/images/player/fred.png" + olli = "../assets/images/player/fred_olli.png" + # Farben class MyColors: # Allgemein diff --git a/src/world.py b/src/world.py index d4d5cdb..8b07b91 100644 --- a/src/world.py +++ b/src/world.py @@ -1,15 +1,18 @@ import pygame import settings +from player import Player class World: def __init__(self, screen): self.screen = screen self.background_color = (135, 206, 235) # Himmelblau self.ground_rect = pygame.Rect(0, 600, 1280, 120) # Boden + self.player = Player(200, 500) # Spieler def draw(self): self.screen.fill(self.background_color) pygame.draw.rect(self.screen, (124, 252, 0), self.ground_rect) # Grün für Boden + self.player.draw(self.screen) def handle_event(self, event): if event.type == pygame.KEYDOWN: @@ -17,4 +20,5 @@ class World: if settings.DEBUG: print("ESC-Pressed") return "menu" + # self.player.handle_event(event) return None \ No newline at end of file