diff --git a/assets/backgrounds/background-complete.png b/assets/backgrounds/background-complete.png new file mode 100644 index 0000000..6ca4adc Binary files /dev/null and b/assets/backgrounds/background-complete.png differ diff --git a/src/level_complete_screen.py b/src/level_complete_screen.py new file mode 100644 index 0000000..c8164f7 --- /dev/null +++ b/src/level_complete_screen.py @@ -0,0 +1,52 @@ +import pygame +import settings +from settings import MyColors + +class Endscreen: + def __init__(self, screen, score): + self.screen = screen + self.score = score + self.background = pygame.image.load(settings.BACKGROUND_IMG_COMP).convert_alpha() + self.font = pygame.font.Font(settings.fonts.PressStart2P, 60) + self.small_font = pygame.font.Font(settings.fonts.PressStart2P, 24) + + self.retry_button = pygame.Rect(390, 400, 200, 50) + self.menu_button = pygame.Rect(690, 400, 200, 50) + + def draw(self): + self.screen.blit(self.background, (0, 0)) + + # Score-Text + score_text = self.font.render(f"Dein Score: {self.score}", True, (255, 255, 255)) # z.B. Gold + self.screen.blit(score_text, (settings.SCREEN_WIDTH // 2 - score_text.get_width() // 2, 200)) + + pygame.draw.rect(self.screen, MyColors.yellow, self.retry_button) + pygame.draw.rect(self.screen, MyColors.yellow, self.menu_button) + + nochmal_text = self.small_font.render("Nochmal", True, MyColors.brown) + menu_text = self.small_font.render("Menü", True, MyColors.brown) + + self.screen.blit(nochmal_text, (self.retry_button.x + 20, self.retry_button.y + 10)) + self.screen.blit(menu_text, (self.menu_button.x + 35, self.menu_button.y + 10)) + + return self.retry_button, self.menu_button + + def handle_event(self, event): + + joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())] + + # Controller-Eingaben prüfen + retry_controller_action = False + menu_controller_action = False + for joystick in joysticks: + if joystick.get_button(2): + retry_controller_action = True + if joystick.get_button(3): + menu_controller_action = True + + if event.type == pygame.MOUSEBUTTONDOWN: + if self.retry_button.collidepoint(event.pos): + return "retry" + elif self.menu_button.collidepoint(event.pos): + return "menu" + return None \ No newline at end of file diff --git a/src/main.py b/src/main.py index bee981c..5e9348a 100644 --- a/src/main.py +++ b/src/main.py @@ -4,8 +4,16 @@ import sys from menu import Menu # Menü importieren import settings from world import World +from level_complete_screen import Endscreen def main(): + pygame.joystick.init() + joysticks = [] + for i in range(pygame.joystick.get_count()): + joystick = pygame.joystick.Joystick(i) + joystick.init() + joysticks.append(joystick) + pygame.init() screen = pygame.display.set_mode((settings.SCREEN_WIDTH, settings.SCREEN_HEIGHT)) pygame.display.set_caption("The Last Ollie - A Fred Story") @@ -13,6 +21,7 @@ def main(): menu = Menu(screen) world = World(screen) + endscreen = Endscreen(screen, 000) if settings.DEBUG else endscreen = Endscreen(screen, world.save_score) current_scene = settings.START_POINT @@ -36,12 +45,27 @@ def main(): menu.show_main_buttons = True menu.ready_to_start_game = False + if current_scene == "endscreen": + action = endscreen.handle_event(event) + if action == "retry": + current_scene = "world" + elif action == "menu": + current_scene = "menu" + if current_scene == "menu": menu.draw() elif current_scene == "world": - world.player.update(670) - world.draw() - + if not world.player.game_paused: + world.player.update(670) + world.draw() + else: + current_scene = "endscreen" + if settings.DEBUG and not hasattr(world, 'level_end_printed'): + print("Level beendet!") + world.level_end_printed = True + elif current_scene == "endscreen": + endscreen.draw() + pygame.display.flip() clock.tick(60) diff --git a/src/player.py b/src/player.py index a3ceea0..2a0456c 100644 --- a/src/player.py +++ b/src/player.py @@ -21,17 +21,45 @@ class Player: self.jump_strength = settings.player.jump_strength self.on_ground = False + self.game_paused = False + def update(self, ground_y, obstacles=[], items=[], score=0): keys = pygame.key.get_pressed() + joysticks = [pygame.joystick.Joystick(x) for x in range(pygame.joystick.get_count())] + + for i, key in enumerate(keys): + if key: + print(f"Tastatur: Taste {pygame.key.name(i)} gedrückt") if settings.DEBUG_KEY_INPUT else None + + for joystick in joysticks: + for button in range(joystick.get_numbuttons()): + if joystick.get_button(button): + print(f"Controller: Button {button} gedrückt") if settings.DEBUG_KEY_INPUT else None + for axis in range(joystick.get_numaxes()): + if abs(joystick.get_axis(axis)) > 0.5: + print(f"Controller: Stick {axis} bewegt ({joystick.get_axis(axis):.2f})") if settings.DEBUG_KEY_INPUT else None + + move_left = keys[pygame.K_LEFT] + move_right = keys[pygame.K_RIGHT] + jump = keys[pygame.K_SPACE] + + # Controller-Eingaben prüfen + for joystick in joysticks: + if joystick.get_axis(0) < -0.5: # Linker Stick links + move_left = True + if joystick.get_axis(0) > 0.5: # Linker Stick rechts + move_right = True + if joystick.get_button(0): # X-Button + jump = True # Bewegung seitlich - if keys[pygame.K_LEFT]: + if move_left: self.rect.x -= self.speed - if keys[pygame.K_RIGHT]: + if move_right: self.rect.x += self.speed - # Sprung - if keys[pygame.K_SPACE] and self.on_ground: + # Springen + if jump and self.on_ground: self.velocity_y = self.jump_strength self.on_ground = False @@ -68,6 +96,10 @@ class Player: self.velocity_y = 0 self.on_ground = True + # ZIEL FLAGGEN ACTION + if not self.game_paused and self.rect.left > settings.world.goal.position_x: + self.game_paused = True + # Bildlogik if not self.on_ground: self.image = self.image_jump diff --git a/src/settings.py b/src/settings.py index 2c0e195..e49aa0a 100644 --- a/src/settings.py +++ b/src/settings.py @@ -5,9 +5,11 @@ SCREEN_WIDTH = 1280 SCREEN_HEIGHT = 720 FPS = 60 DEBUG = True +DEBUG_KEY_INPUT = False Mute = True -START_POINT = "world" # world, menu +START_POINT = "endscreen" # world, menu BACKGROUND_IMG = "../assets/backgrounds/background_III.png" +BACKGROUND_IMG_COMP = "../assets/backgrounds/background-complete.png" # Schriftarten class fonts: @@ -15,7 +17,7 @@ class fonts: class player: size = (110, 200) - speed = 12 if DEBUG else 6 + speed = 12 if DEBUG else 7 gravity = 0.8 jump_strength = -20 @@ -41,7 +43,7 @@ class world: amount = 15 class beer: img = "../assets/images/items/bier.png" - size = (100, 100) + size = (70, 85) class goal: img = "../assets/world/GoalFlag.png"