Add Items to Game

main
Samuel Zielke 7 months ago
parent 97217159a1
commit 97a62d7c50

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

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

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

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

Loading…
Cancel
Save

Powered by TurnKey Linux.