Compare commits

..

7 Commits

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

@ -0,0 +1,17 @@
import pygame
import random
import settings
class Item(pygame.sprite.Sprite):
def __init__(self, x, y):
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(topleft=(x, y))
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

@ -4,7 +4,7 @@ import settings
class Obstacle: class Obstacle:
def __init__(self, x, y, image_path): def __init__(self, x, y, image_path):
self.image = pygame.image.load(image_path).convert_alpha() self.image = pygame.image.load(image_path).convert_alpha()
self.image = pygame.transform.scale(self.image, (300, 150)) # Größe anpassen self.image = pygame.transform.scale(self.image, (400, 150)) # Größe anpassen
self.rect = self.image.get_rect(topleft=(x, y)) self.rect = self.image.get_rect(topleft=(x, y))
def draw(self, screen, camera_offset): def draw(self, screen, camera_offset):

@ -21,7 +21,7 @@ class Player:
self.jump_strength = settings.player.jump_strength self.jump_strength = settings.player.jump_strength
self.on_ground = False self.on_ground = False
def update(self, ground_y, obstacles=[]): def update(self, ground_y, obstacles=[], items=[], score=0):
keys = pygame.key.get_pressed() keys = pygame.key.get_pressed()
# Bewegung seitlich # Bewegung seitlich
@ -40,14 +40,27 @@ class Player:
self.rect.y += self.velocity_y self.rect.y += self.velocity_y
self.on_ground = False # zurücksetzen self.on_ground = False # zurücksetzen
# Plattform-Kollision prüfen # HINDERNISSE-KOLLISION
for obs in obstacles: for obs in obstacles:
if self.rect.colliderect(obs.get_rect()): if self.rect.colliderect(obs.get_rect()):
# nur wenn Spieler von oben kommt # Prüfen: Spieler kommt von oben und fällt drauf
if self.velocity_y > 0 and self.rect.bottom <= obs.get_rect().top + 20: if self.velocity_y > 0 and self.rect.bottom <= obs.get_rect().top + 10:
self.rect.bottom = obs.get_rect().top self.rect.bottom = obs.get_rect().top
self.velocity_y = 0 self.velocity_y = 0
self.on_ground = True self.on_ground = True
else:
# Seitliche Kollision
if self.rect.right > obs.get_rect().left and self.rect.left < obs.get_rect().left:
self.rect.right = obs.get_rect().left
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 # Boden-Kollision
if self.rect.bottom >= ground_y: if self.rect.bottom >= ground_y:
@ -65,5 +78,7 @@ class Player:
else: else:
self.image = self.image_normal self.image = self.image_normal
return score
def draw(self, screen): def draw(self, screen):
screen.blit(self.image, self.rect) screen.blit(self.image, self.rect)

@ -1,8 +1,10 @@
import random
# Einstellungen # Einstellungen
SCREEN_WIDTH = 1280 SCREEN_WIDTH = 1280
SCREEN_HEIGHT = 720 SCREEN_HEIGHT = 720
FPS = 60 FPS = 60
DEBUG = True DEBUG = False
Mute = True Mute = True
START_POINT = "world" # world, menu START_POINT = "world" # world, menu
BACKGROUND_IMG = "../assets/backgrounds/background_III.png" BACKGROUND_IMG = "../assets/backgrounds/background_III.png"
@ -13,7 +15,7 @@ class fonts:
class player: class player:
size = (110, 200) size = (110, 200)
speed = 12 if DEBUG else 5 speed = 12 if DEBUG else 6
gravity = 0.8 gravity = 0.8
jump_strength = -20 jump_strength = -20
@ -32,8 +34,15 @@ class world:
crop_scale_right = 1400 crop_scale_right = 1400
class obstacle: class obstacle:
amount = random.randint(4, 8)
box = "../assets/obstacles/box.png" box = "../assets/obstacles/box.png"
class items:
amount = 15
class beer:
img = "../assets/images/items/bier.png"
size = (100, 100)
# Farben # Farben
class MyColors: class MyColors:
# Allgemein # Allgemein

@ -3,16 +3,30 @@ 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):
# Hindernisse # Hindernisse
self.obstacles = [] self.obstacles = []
obstacle_count = random.randint(2, 3)
for _ in range(obstacle_count): while len(self.obstacles) < settings.world.obstacle.amount:
x = random.randint(500, 4000) # X-Position irgendwo in der Welt x = random.randint(500, 12500)
self.obstacles.append(Obstacle(x, 520, settings.world.obstacle.box)) # 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 # 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()
@ -31,12 +45,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) if settings.DEBUG else None
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))
@ -52,6 +73,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))

Loading…
Cancel
Save

Powered by TurnKey Linux.