You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
3.6 KiB

import pygame
import settings
from player import Player
from obstacle import Obstacle
import random
from item import Item
class World:
def __init__(self, screen):
# Hindernisse
self.obstacles = []
while len(self.obstacles) < settings.world.obstacle.amount:
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) > 800 for obs in self.obstacles):
self.obstacles.append(Obstacle(x, 500, settings.world.obstacle.box))
# ITEMS
self.items = []
while len(self.items) < settings.world.items.amount:
x = random.randint(200, 12800)
y = random.randint(100, 500)
# Prüfen, ob der neue x weit genug entfernt ist von bestehenden Hindernissen
if all(abs(x - item.rect.x) > 200 for item in self.items):
self.items.append(Item(x, y))
# Welt Generierung
self.screen = screen
self.background = pygame.image.load(settings.BACKGROUND_IMG).convert()
self.bg_width = self.background.get_width()
# Boden
self.ground_rect = pygame.Rect(0, 650, 5000 * 2.7, 80) # Boden
full_image = pygame.image.load(settings.world.ground.img).convert_alpha()
# --- Ausschneiden des Bereichs
cropped = pygame.Surface((settings.world.ground.crop_scale_right, settings.world.ground.crop_height), pygame.SRCALPHA)
cropped.blit(full_image, (0, 0), (0, settings.world.ground.crop_top, settings.world.ground.crop_scale_right, settings.world.ground.crop_height))
# --- Skalieren für Anzeige
self.ground_image = pygame.transform.scale(cropped, (settings.world.ground.scale_width, settings.world.ground.scale_height))
self.tile_width = self.ground_image.get_width()
# 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))
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) if settings.DEBUG else None
bg_offset = int(camera_offset * 0.3) # Parallax: langsamer bewegen
self.screen.blit(self.background, (-bg_offset, 0))
# Boden kacheln ohne Parallax
start_tile = (camera_offset // self.tile_width) * self.tile_width
end_x = camera_offset + settings.SCREEN_WIDTH
x = start_tile
while x < end_x:
screen_x = x - camera_offset
self.screen.blit(self.ground_image, (screen_x, self.ground_rect.top))
x += self.tile_width
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))
def handle_event(self, event):
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
if settings.DEBUG:
print("ESC-Pressed")
return "menu"
# self.player.handle_event(event)
return None

Powered by TurnKey Linux.