Feinde aktualisieren und entfernen, wenn sie tot sind; Funken- und Partikel-Logik bei Kollision mit Spieler hinzugefügt

This commit is contained in:
Benjamin 2026-06-12 18:20:36 +02:00
parent c6d4cef993
commit 3fe918c082
2 changed files with 25 additions and 7 deletions

18
game.py
View file

@ -79,7 +79,7 @@ class Game:
self.load_level("map")
self.leaf_spawners: list[pygame.Rect] = []
self.enemys: list[Enemy] = []
self.enemies: list[Enemy] = []
for tree in self.tilemap.extract([("large_decor", 2)], keep=True):
self.leaf_spawners.append(
@ -90,7 +90,7 @@ class Game:
if spawner["variant"] == 0:
self.player.pos = spawner["pos"]
else:
self.enemys.append(Enemy(self, spawner["pos"], (8, 15)))
self.enemies.append(Enemy(self, spawner["pos"], (8, 15)))
self.particles: list[Particle] = []
self.projectiles: list = []
@ -101,7 +101,7 @@ class Game:
self.scroll: list[float] = [0, 0]
# self.boost: bool = False
def load_level(self, map_id: str|int):
def load_level(self, map_id: str | int):
try:
self.tilemap.load(path="data/maps/" + str(map_id) + ".json")
except FileNotFoundError:
@ -142,9 +142,11 @@ class Game:
self.clouds.update()
self.clouds.render(surface=self.display, offset=render_scroll)
self.tilemap.render(surface=self.display, offset=render_scroll)
for enemy in self.enemys.copy():
enemy.update(self.tilemap, (0, 0))
for enemy in self.enemies.copy():
kill = enemy.update(self.tilemap, (0, 0))
enemy.render(self.display, offset=render_scroll)
if kill:
self.enemies.remove(enemy)
self.player.update(
self.tilemap, movement=((self.movement[1] - self.movement[0]), 0)
)
@ -183,7 +185,11 @@ class Game:
angle = random.random() * math.pi * 2
speed = random.random() * 5
self.sparks.append(
Spark(self.player.rect().center, angle, 2 + random.random())
Spark(
self.player.rect().center,
angle,
2 + random.random(),
)
)
self.particles.append(
Particle(

View file

@ -168,6 +168,18 @@ class Enemy(PhysicsEntity):
else:
self.set_action("idle")
if abs(self.game.player.dashing) >= 50:
if self.rect().colliderect(self.game.player.rect()):
for _ in range(30):
angle = random.random() * math.pi * 2
speed = random.random() * 5
self.game.sparks.append(Spark(self.rect().center, angle, 2 + random.random()))
self.game.particles.append(Particle(self.game, 'particle', self.rect().center, velocity=[math.cos(angle + math.pi) * speed * 0.5, math.sin(angle + math.pi) * speed * 0.5], frame=random.randint(0, 7)))
self.game.sparks.append(Spark(self.rect().center, 0, 5 + random.random()))
self.game.sparks.append(Spark(self.rect().center, math.pi, 5 + random.random()))
return True
def render(self, surface: pygame.Surface, offset: tuple = (0, 0)):
super().render(surface, offset)