Add Background and backdrive image and hindernisse

Samuel Zielke 8 months ago
parent 1d31264c31
commit 00fdf1b02b

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

@ -8,7 +8,7 @@ from world import World
def main():
pygame.init()
screen = pygame.display.set_mode((settings.SCREEN_WIDTH, settings.SCREEN_HEIGHT))
pygame.display.set_caption("The Last Ollie \n A Fred Story")
pygame.display.set_caption("The Last Ollie - A Fred Story")
clock = pygame.time.Clock()
menu = Menu(screen)
@ -39,7 +39,7 @@ def main():
if current_scene == "menu":
menu.draw()
elif current_scene == "world":
world.player.update(world.ground_rect.top)
world.player.update(670)
world.draw()
pygame.display.flip()

@ -0,0 +1,14 @@
import pygame
import settings
class Obstacle:
def __init__(self, x, y, image_path):
self.image = pygame.image.load(image_path).convert_alpha()
self.image = pygame.transform.scale(self.image, (300, 150)) # Größe anpassen
self.rect = self.image.get_rect(topleft=(x, y))
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

@ -11,6 +11,10 @@ class Player:
pygame.image.load(settings.player.fred.olli).convert_alpha(),
settings.player.size
)
self.image_left = pygame.transform.scale(
pygame.image.load(settings.player.fred.left).convert_alpha(),
settings.player.size
)
self.image = self.image_normal # Anfangszustand
self.rect = self.image.get_rect(topleft=(x, y))
self.velocity_y = 0
@ -19,25 +23,33 @@ class Player:
self.jump_strength = settings.player.jump_strength
self.on_ground = False
def update(self, ground_y):
def update(self, ground_y, obstacles=[]):
keys = pygame.key.get_pressed()
was_on_ground = self.on_ground
# Bewegung seitlich
if keys[pygame.K_LEFT]:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT]:
self.rect.x += self.speed
# Sprung
if keys[pygame.K_SPACE] and self.on_ground:
self.velocity_y = self.jump_strength
self.on_ground = False
if self.on_ground and self.image != self.image_normal:
self.image = self.image_normal
elif not self.on_ground and self.image != self.image_jump:
self.image = self.image_jump
if not self.on_ground and was_on_ground and settings.DEBUG:
print("Fred springt!")
# Gravitation
self.velocity_y += self.gravity
self.rect.y += self.velocity_y
self.on_ground = False # zurücksetzen
# Plattform-Kollision prüfen
for obs in obstacles:
if self.rect.colliderect(obs.get_rect()):
# nur wenn Spieler von oben kommt
if self.velocity_y > 0 and self.rect.bottom <= obs.get_rect().top + 20:
self.rect.bottom = obs.get_rect().top
self.velocity_y = 0
self.on_ground = True
# Boden-Kollision
if self.rect.bottom >= ground_y:
@ -45,5 +57,15 @@ class Player:
self.velocity_y = 0
self.on_ground = True
# Bildlogik
if not self.on_ground:
self.image = self.image_jump
elif keys[pygame.K_LEFT]:
self.image = self.image_left
elif keys[pygame.K_RIGHT]:
self.image = self.image_normal
else:
self.image = self.image_normal
def draw(self, screen):
screen.blit(self.image, self.rect)

@ -5,20 +5,25 @@ FPS = 60
DEBUG = True
Mute = True
START_POINT = "world" # world, menu
BACKGROUND_IMG = "../assets/backgrounds/background.png"
# Schriftarten
class fonts:
PressStart2P = '../assets/fonts/PressStart2P-Regular.ttf'
class player:
size = (100, 100)
speed = 5
size = (200, 200)
speed = 10
gravity = 1
jump_strength = -18
class fred:
normal = "../assets/images/player/fred.png"
olli = "../assets/images/player/fred_olli.png"
left = "../assets/images/player/fred_back.png"
class obstacles:
box = "../assets/obstacles/box.png"
# Farben
class MyColors:

@ -1,18 +1,38 @@
import pygame
import settings
from player import Player
from obstacle import Obstacle
import random
class World:
def __init__(self, screen):
# Hindernisse
self.obstacles = []
obstacle_count = random.randint(2, 3)
for _ in range(obstacle_count):
x = random.randint(500, 4000) # X-Position irgendwo in der Welt
self.obstacles.append(Obstacle(x, 520, settings.obstacles.box))
# Welt Generierung
self.screen = screen
self.background_color = (135, 206, 235) # Himmelblau
self.ground_rect = pygame.Rect(0, 600, 1280, 120) # Boden
self.background = pygame.image.load(settings.BACKGROUND_IMG).convert()
self.bg_width = self.background.get_width()
self.ground_rect = pygame.Rect(0, 740, 5000, 80) # Boden
self.player = Player(200, 500) # Spieler
def draw(self):
self.screen.fill(self.background_color)
pygame.draw.rect(self.screen, (124, 252, 0), self.ground_rect) # Grün für Boden
self.player.draw(self.screen)
camera_offset = self.player.rect.centerx - settings.SCREEN_WIDTH // 2
camera_offset = max(0, min(camera_offset, self.bg_width - settings.SCREEN_WIDTH))
self.player.update(self.ground_rect.top, self.obstacles)
self.screen.blit(self.background, (-camera_offset, 0))
# pygame.draw.rect(self.screen, (124, 252, 0), self.ground_rect)
for obs in self.obstacles:
obs.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:

Loading…
Cancel
Save

Powered by TurnKey Linux.