From aa8f10a08a2d4f1095b3249d57a9bb47f48654ae Mon Sep 17 00:00:00 2001 From: Benjamin Date: Fri, 12 Jun 2026 17:43:04 +0200 Subject: [PATCH] =?UTF-8?q?Projektile=20f=C3=BCr=20Gegner=20hinzugef=C3=BC?= =?UTF-8?q?gt,=20die=20auf=20den=20Spieler=20feuern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game.py | 28 +++++++++++++++++++++++++++- scripts/entities.py | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/game.py b/game.py index 57b8c86..86bdd4e 100644 --- a/game.py +++ b/game.py @@ -67,6 +67,8 @@ class Game: "particles/particle": Animation( load_images(path="particles/particle"), image_duration=6, loop=False ), + "gun": load_image("gun.png"), + "projectile": load_image("projectile.png"), } self.player: Player = Player(game=self, pos=(50, 50), size=(8, 15)) @@ -92,6 +94,7 @@ class Game: self.enemys.append(Enemy(self, spawner["pos"], (8, 15))) self.particles: list[Particle] = [] + self.projectiles: list = [] self.clouds: Clouds = Clouds(cloud_images=self.assets["clouds"], count=16) self.isJumping: bool = False @@ -140,6 +143,29 @@ class Game: self.tilemap, movement=((self.movement[1] - self.movement[0]), 0) ) self.player.render(surface=self.display, offset=render_scroll) + + + # [[x, y], direction, timer] + for projectile in self.projectiles.copy(): + projectile[0][0] += projectile[1] + projectile[2] += 1 + img = self.assets["projectile"] + self.display.blit( + img, + ( + projectile[0][0] - img.get_width() / 2 - render_scroll[0], + projectile[0][1] - img.get_height() / 2 - render_scroll[1], + ), + ) + if self.tilemap.solid_check(projectile[0]): + self.projectiles.remove(projectile) + elif projectile[2] > 360: + self.projectiles.remove(projectile) + elif abs(self.player.dashing) < 50: + if self.player.rect().collidepoint(projectile[0]): + self.projectiles.remove(projectile) + + # self.player.boost(self.boost) # print(int(self.player.pos[0])) # print(int(self.player.pos[1])) @@ -171,7 +197,7 @@ class Game: # self.boost = True self.player.boost() - if event.key == pygame.K_x: + if event.key == pygame.K_x or event.key == pygame.K_LSHIFT or event.key == pygame.K_RSHIFT: self.player.dash() if event.type == pygame.KEYUP: diff --git a/scripts/entities.py b/scripts/entities.py index 4404fd4..d717eb9 100644 --- a/scripts/entities.py +++ b/scripts/entities.py @@ -123,8 +123,25 @@ class Enemy(PhysicsEntity): movement = (movement[0] - 0.5 if self.flip else 0.5, movement[1]) else: self.flip = not self.flip + self.walking = max(0, self.walking - 1) - elif random.random() < 0.01: + + if not self.walking: + distance = ( + self.game.player.pos[0] - self.pos[0], + self.game.player.pos[1] - self.pos[1], + ) + if abs(distance[1]) < 16: + if self.flip and distance[0] < 0: + self.game.projectiles.append( + [[self.rect().centerx - 7, self.rect().centery], -1.5, 0] + ) + if not self.flip and distance[0] > 0: + self.game.projectiles.append( + [[self.rect().centerx + 7, self.rect().centery], 1.5, 0] + ) + + elif random.random() < 0.02: self.walking = random.randint(30, 120) super().update(tilemap, movement) @@ -134,6 +151,25 @@ class Enemy(PhysicsEntity): else: self.set_action("idle") + def render(self, surface: pygame.Surface, offset: tuple = (0, 0)): + super().render(surface, offset) + + if self.flip: + surface.blit( + pygame.transform.flip(self.game.assets["gun"], True, False), + ( + self.rect().centerx + - 4 + - self.game.assets["gun"].get_width() + - offset[0], + self.rect().centery - offset[1], + ), + ) + else: + surface.blit( + self.game.assets["gun"], + (self.rect().centerx + 4 - offset[0], self.rect().centery - offset[1]), + ) class Player(PhysicsEntity): def __init__(self, game, pos: tuple[float, float], size: tuple[int, int]):