diff --git a/src/item.py b/src/item.py new file mode 100644 index 0000000..cba2145 --- /dev/null +++ b/src/item.py @@ -0,0 +1,19 @@ +import pygame +import random +import settings + +class Item(pygame.sprite.Sprite): + def __init__(self): + super().__init__() + self.image = pygame.image.load(settings.world.items.beer.img).convert_alpha() + self.image = pygame.transform.scale(self.image, settings.world.items.beer.size) + self.rect = self.image.get_rect() + self.rect.x = random.randint(200, 12800) + self.rect.y = random.randint(100, 500) + print(f'create item {self.rect}') if settings.DEBUG else None + + def draw(self, screen, camera_offset): + screen.blit(self.image, (self.rect.x - camera_offset, self.rect.y)) + + def get_rect(self): + return self.rect \ No newline at end of file diff --git a/src/player.py b/src/player.py index 3ba56b0..a3ceea0 100644 --- a/src/player.py +++ b/src/player.py @@ -21,7 +21,7 @@ class Player: self.jump_strength = settings.player.jump_strength self.on_ground = False - def update(self, ground_y, obstacles=[]): + def update(self, ground_y, obstacles=[], items=[], score=0): keys = pygame.key.get_pressed() # Bewegung seitlich @@ -40,6 +40,7 @@ class Player: self.rect.y += self.velocity_y self.on_ground = False # zurücksetzen + # HINDERNISSE-KOLLISION for obs in obstacles: if self.rect.colliderect(obs.get_rect()): # Prüfen: Spieler kommt von oben und fällt drauf @@ -54,6 +55,13 @@ class Player: elif self.rect.left < obs.get_rect().right and self.rect.right > obs.get_rect().right: self.rect.left = obs.get_rect().right + # ITEM-KOLLISION + for item in items[:]: + if self.rect.colliderect(item.get_rect()): + items.remove(item) + score += 10 # Beispiel: 10 Punkte pro eingesammeltem Item + + # Boden-Kollision if self.rect.bottom >= ground_y: self.rect.bottom = ground_y @@ -70,5 +78,7 @@ class Player: else: self.image = self.image_normal + return score + def draw(self, screen): screen.blit(self.image, self.rect) \ No newline at end of file diff --git a/src/settings.py b/src/settings.py index e3e2265..193f36c 100644 --- a/src/settings.py +++ b/src/settings.py @@ -34,6 +34,12 @@ class world: class obstacle: box = "../assets/obstacles/box.png" + class items: + amount = 15 + class beer: + img = "../assets/images/items/bier.png" + size = (100, 100) + # Farben class MyColors: # Allgemein diff --git a/src/world.py b/src/world.py index bf42a69..af20d39 100644 --- a/src/world.py +++ b/src/world.py @@ -3,6 +3,7 @@ import settings from player import Player from obstacle import Obstacle import random +from item import Item class World: def __init__(self, screen): @@ -12,11 +13,17 @@ class World: min_distance = 800 # Mindestabstand zwischen Hindernissen while len(self.obstacles) < obstacle_count: - x = random.randint(500, 13000) + x = random.randint(500, 12500) # Prüfen, ob der neue x weit genug entfernt ist von bestehenden Hindernissen if all(abs(x - obs.rect.x) > min_distance for obs in self.obstacles): self.obstacles.append(Obstacle(x, 500, settings.world.obstacle.box)) + # ITEMS + self.items = [] + for _ in range(settings.world.items.amount): # Erzeuge 5 Items + item = Item() + self.items.append(item) + # Welt Generierung self.screen = screen self.background = pygame.image.load(settings.BACKGROUND_IMG).convert() @@ -35,12 +42,19 @@ class World: # Spieler self.player = Player(200, 500) # Spieler + # SCORE + self.save_score = 0 + def draw(self): self.screen.fill((0, 0, 0)) # Bildschirm löschen, bevor gezeichnet wird camera_offset = self.player.rect.centerx - settings.SCREEN_WIDTH // 2 world_width = max(self.bg_width, max([obs.rect.right for obs in self.obstacles] + [self.ground_rect.right])) camera_offset = max(0, min(camera_offset, world_width - settings.SCREEN_WIDTH)) - self.player.update(self.ground_rect.top, self.obstacles) + score = self.player.update(self.ground_rect.top, self.obstacles, self.items) + # print(score) + if score != 0: + self.save_score += 10 + print(self.save_score) bg_offset = int(camera_offset * 0.3) # Parallax: langsamer bewegen self.screen.blit(self.background, (-bg_offset, 0)) @@ -56,6 +70,9 @@ class World: for obs in self.obstacles: obs.draw(self.screen, camera_offset) + for items in self.items: + items.draw(self.screen, camera_offset) + player_screen_x = self.player.rect.x - camera_offset self.screen.blit(self.player.image, (player_screen_x, self.player.rect.y))