From 66733d5df898b6dc91a445f23ad1bd58f1dc7c63 Mon Sep 17 00:00:00 2001 From: Samuel Zielke Date: Tue, 22 Apr 2025 22:37:48 +0200 Subject: [PATCH] Game Startet mit Musik, Logo, Buttons & Namenseingabe --- src/main.py | 30 +++++++++++++++++ src/menu.py | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ src/settings.py | 28 +++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 src/main.py create mode 100644 src/menu.py create mode 100644 src/settings.py diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..4c1c25f --- /dev/null +++ b/src/main.py @@ -0,0 +1,30 @@ +import pygame +import sys +from menu import Menu # Menü importieren +import settings + +def main(): + pygame.init() + screen = pygame.display.set_mode((settings.SCREEN_WIDTH, settings.SCREEN_HEIGHT)) + pygame.display.set_caption("The Last Ollie \n A Fred Story") + clock = pygame.time.Clock() + + # Menü initialisieren + menu = Menu(screen) + + running = True + while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + menu.handle_event(event) + + menu.draw() + pygame.display.flip() + clock.tick(settings.FPS) + + pygame.quit() + sys.exit() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/menu.py b/src/menu.py new file mode 100644 index 0000000..8b7dd24 --- /dev/null +++ b/src/menu.py @@ -0,0 +1,90 @@ +import pygame +from settings import MyColors +import settings + +class Menu: + def __init__(self, screen): + self.screen = screen + self.font = pygame.font.Font(settings.fonts.PressStart2P, 24) + self.input_font = pygame.font.Font(settings.fonts.PressStart2P, 32) + + # Titelbild laden + self.title_image = pygame.image.load('../assets/images/sign.png').convert_alpha() + self.title_image = pygame.transform.scale(self.title_image, (600, 450)) + + # Musik laden und abspielen + pygame.mixer.music.load('../assets/sounds/menu.wav') + pygame.mixer.music.set_volume(settings.VOLUME) + pygame.mixer.music.play(-1) + + # Button-Rects + self.start_button = pygame.Rect(406.7, 550, 200, 50) + self.highscore_button = pygame.Rect(673.4, 550, 200, 50) + self.back_button = pygame.Rect(390, 630, 200, 50) + self.go_button = pygame.Rect(690, 630, 200, 50) + + self.input_active = False + self.player_name = "" + self.show_main_buttons = True + + def draw(self): + self.screen.fill(MyColors.background) # Hintergrundfarbe + + # Titelbild + self.screen.blit(self.title_image, (340, 50)) + + # Buttons nur im Hauptmenü anzeigen + if self.show_main_buttons: + pygame.draw.rect(self.screen, MyColors.yellow, self.start_button) + pygame.draw.rect(self.screen, MyColors.yellow, self.highscore_button) + + start_text = self.font.render("Start", True, MyColors.brown) + highscore_text = self.font.render("Punkte", True, MyColors.brown) + + self.screen.blit(start_text, (self.start_button.x + 40, self.start_button.y + 10)) + self.screen.blit(highscore_text, (self.highscore_button.x + 30, self.highscore_button.y + 10)) + + # Eingabefeld und Buttons nur bei aktiver Eingabe anzeigen + if self.input_active: + input_box = pygame.Rect(390, 550, 500, 50) + pygame.draw.rect(self.screen, MyColors.brown, input_box, 5) + name_surface = self.input_font.render(self.player_name, True, MyColors.yellow) + self.screen.blit(name_surface, (input_box.x + 10, input_box.y + 10)) + + # Buttons + pygame.draw.rect(self.screen, MyColors.yellow, self.back_button) + pygame.draw.rect(self.screen, MyColors.yellow, self.go_button) + + back_text = self.font.render("Zurück", True, MyColors.brown) + go_text = self.font.render("Los!", True, MyColors.brown) + + self.screen.blit(back_text, (self.back_button.x + 30, self.back_button.y + 10)) + self.screen.blit(go_text, (self.go_button.x + 55, self.go_button.y + 10)) + + + + def handle_event(self, event): + if event.type == pygame.MOUSEBUTTONDOWN: + if self.show_main_buttons: + if self.start_button.collidepoint(event.pos): + self.input_active = True + self.show_main_buttons = False + if self.highscore_button.collidepoint(event.pos) and settings.DEBUG: + print("Highscores anzeigen (später!)") + if self.input_active: + if self.back_button.collidepoint(event.pos): + self.input_active = False + self.show_main_buttons = True + self.player_name = "" + if self.go_button.collidepoint(event.pos): + if settings.DEBUG: + print(f"Spielstart mit Spielername: {self.player_name}") + + if event.type == pygame.KEYDOWN and self.input_active: + if event.key == pygame.K_RETURN and settings.DEBUG: + print(f"Name eingegeben: {self.player_name}") + elif event.key == pygame.K_BACKSPACE: + self.player_name = self.player_name[:-1] + else: + if len(self.player_name) < settings.MAX_LENGHT and event.unicode.isalpha(): + self.player_name += event.unicode.upper() \ No newline at end of file diff --git a/src/settings.py b/src/settings.py new file mode 100644 index 0000000..d4f1b09 --- /dev/null +++ b/src/settings.py @@ -0,0 +1,28 @@ +# Einstellungen +SCREEN_WIDTH = 1280 +SCREEN_HEIGHT = 720 +FPS = 30 +DEBUG = True + +# Schriftarten +class fonts: + PressStart2P = '../assets/fonts/PressStart2P-Regular.ttf' + +# Farben +class MyColors: + # Allgemein + yellow = (240, 190, 60) + brown = (122, 60, 19) + darkviolet = (40, 20, 60) + skyblue = (135, 206, 235) + darkblue = (15, 20, 40) + + # Verwendung + background = darkblue + +# Musik +VOLUME = 0.5 + + +# APP SETTINGS +MAX_LENGHT = 15 \ No newline at end of file