Add Controller function & final menu

main
Samuel Zielke 7 months ago
parent 3e744f8147
commit 6186cc0751

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

@ -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

@ -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,11 +45,26 @@ 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":
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)

@ -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

@ -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"

Loading…
Cancel
Save

Powered by TurnKey Linux.