Übergang zum nächsten Level hinzugefügt; Level wird automatisch geladen, wenn alle Feinde besiegt sind

This commit is contained in:
Benjamin 2026-06-19 18:26:33 +02:00
parent 5e2287c459
commit 199eef74df

26
game.py
View file

@ -2,6 +2,7 @@ import pygame # ty: ignore[unresolved-import]
import sys import sys
import random import random
import math import math
import os
from scripts.entities import Enemy, Player from scripts.entities import Enemy, Player
from scripts.utils import load_image from scripts.utils import load_image
from scripts.utils import load_images from scripts.utils import load_images
@ -76,7 +77,7 @@ class Game:
self.tilemap: Tilemap = Tilemap(game=self, tile_size=16) self.tilemap: Tilemap = Tilemap(game=self, tile_size=16)
self.level: int | str = 0 self.level: int = 0
self.load_level(map_id=self.level) self.load_level(map_id=self.level)
self.screenshake = 0 self.screenshake = 0
@ -102,6 +103,7 @@ class Game:
for spawner in self.tilemap.extract(id_pairs=[("spawners", 0), ("spawners", 1)]): for spawner in self.tilemap.extract(id_pairs=[("spawners", 0), ("spawners", 1)]):
if spawner["variant"] == 0: if spawner["variant"] == 0:
self.player.pos = spawner["pos"] self.player.pos = spawner["pos"]
self.player.air_time = 0
else: else:
self.enemies.append(Enemy(game=self, pos=spawner["pos"], size=(8, 15))) self.enemies.append(Enemy(game=self, pos=spawner["pos"], size=(8, 15)))
@ -110,6 +112,9 @@ class Game:
self.sparks: list[Spark] = [] self.sparks: list[Spark] = []
self.dead: int = 0 self.dead: int = 0
self.scroll: list[float] = [0, 0] self.scroll: list[float] = [0, 0]
self.transition: int = -30
def run(self) -> None: def run(self) -> None:
while self.running: while self.running:
@ -123,6 +128,14 @@ class Game:
self.screenshake = max(0, self.screenshake - 1) self.screenshake = max(0, self.screenshake - 1)
if not len(self.enemies):
self.transition += 1
if self.transition > 30:
self.level = min(self.level + 1, len(os.listdir("data/maps")) - 1)
self.load_level(self.level)
if self.transition < 0:
self.transition += 1
self.scroll[0] += ( self.scroll[0] += (
self.player.rect().centerx self.player.rect().centerx
- self.display.get_width() / 2 - self.display.get_width() / 2
@ -272,6 +285,17 @@ class Game:
if event.key == pygame.K_m: if event.key == pygame.K_m:
self.boost = False self.boost = False
if self.transition:
transition_surface = pygame.Surface(self.display.get_size())
pygame.draw.circle(
transition_surface,
(255, 255, 255),
(self.display.get_width() // 2, self.display.get_height() // 2),
(30 - abs(self.transition)) * 8,
)
transition_surface.set_colorkey((255, 255, 255))
self.display.blit(transition_surface, (0, 0))
screenshake_offset = ( screenshake_offset = (
random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2,
random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2,