|
|
|
@ -3,6 +3,7 @@ import settings
|
|
|
|
from player import Player
|
|
|
|
from player import Player
|
|
|
|
from obstacle import Obstacle
|
|
|
|
from obstacle import Obstacle
|
|
|
|
import random
|
|
|
|
import random
|
|
|
|
|
|
|
|
from item import Item
|
|
|
|
|
|
|
|
|
|
|
|
class World:
|
|
|
|
class World:
|
|
|
|
def __init__(self, screen):
|
|
|
|
def __init__(self, screen):
|
|
|
|
@ -12,11 +13,17 @@ class World:
|
|
|
|
min_distance = 800 # Mindestabstand zwischen Hindernissen
|
|
|
|
min_distance = 800 # Mindestabstand zwischen Hindernissen
|
|
|
|
|
|
|
|
|
|
|
|
while len(self.obstacles) < obstacle_count:
|
|
|
|
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
|
|
|
|
# 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):
|
|
|
|
if all(abs(x - obs.rect.x) > min_distance for obs in self.obstacles):
|
|
|
|
self.obstacles.append(Obstacle(x, 500, settings.world.obstacle.box))
|
|
|
|
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
|
|
|
|
# Welt Generierung
|
|
|
|
self.screen = screen
|
|
|
|
self.screen = screen
|
|
|
|
self.background = pygame.image.load(settings.BACKGROUND_IMG).convert()
|
|
|
|
self.background = pygame.image.load(settings.BACKGROUND_IMG).convert()
|
|
|
|
@ -35,12 +42,19 @@ class World:
|
|
|
|
# Spieler
|
|
|
|
# Spieler
|
|
|
|
self.player = Player(200, 500) # Spieler
|
|
|
|
self.player = Player(200, 500) # Spieler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SCORE
|
|
|
|
|
|
|
|
self.save_score = 0
|
|
|
|
|
|
|
|
|
|
|
|
def draw(self):
|
|
|
|
def draw(self):
|
|
|
|
self.screen.fill((0, 0, 0)) # Bildschirm löschen, bevor gezeichnet wird
|
|
|
|
self.screen.fill((0, 0, 0)) # Bildschirm löschen, bevor gezeichnet wird
|
|
|
|
camera_offset = self.player.rect.centerx - settings.SCREEN_WIDTH // 2
|
|
|
|
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]))
|
|
|
|
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))
|
|
|
|
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
|
|
|
|
bg_offset = int(camera_offset * 0.3) # Parallax: langsamer bewegen
|
|
|
|
self.screen.blit(self.background, (-bg_offset, 0))
|
|
|
|
self.screen.blit(self.background, (-bg_offset, 0))
|
|
|
|
@ -56,6 +70,9 @@ class World:
|
|
|
|
for obs in self.obstacles:
|
|
|
|
for obs in self.obstacles:
|
|
|
|
obs.draw(self.screen, camera_offset)
|
|
|
|
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
|
|
|
|
player_screen_x = self.player.rect.x - camera_offset
|
|
|
|
self.screen.blit(self.player.image, (player_screen_x, self.player.rect.y))
|
|
|
|
self.screen.blit(self.player.image, (player_screen_x, self.player.rect.y))
|
|
|
|
|
|
|
|
|
|
|
|
|