Add Background and backdrive image and hindernisse

pull/1/head
Samuel Zielke 8 months ago
parent 1d31264c31
commit de87d1410e

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

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(): def main():
pygame.init() pygame.init()
screen = pygame.display.set_mode((settings.SCREEN_WIDTH, settings.SCREEN_HEIGHT)) 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() clock = pygame.time.Clock()
menu = Menu(screen) menu = Menu(screen)
@ -39,7 +39,7 @@ def main():
if current_scene == "menu": if current_scene == "menu":
menu.draw() menu.draw()
elif current_scene == "world": elif current_scene == "world":
world.player.update(world.ground_rect.top) world.player.update(670)
world.draw() world.draw()
pygame.display.flip() 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(), pygame.image.load(settings.player.fred.olli).convert_alpha(),
settings.player.size 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.image = self.image_normal # Anfangszustand
self.rect = self.image.get_rect(topleft=(x, y)) self.rect = self.image.get_rect(topleft=(x, y))
self.velocity_y = 0 self.velocity_y = 0
@ -19,25 +23,33 @@ 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): def update(self, ground_y, obstacles=[]):
keys = pygame.key.get_pressed() keys = pygame.key.get_pressed()
was_on_ground = self.on_ground
# Bewegung seitlich
if keys[pygame.K_LEFT]: if keys[pygame.K_LEFT]:
self.rect.x -= self.speed self.rect.x -= self.speed
if keys[pygame.K_RIGHT]: if keys[pygame.K_RIGHT]:
self.rect.x += self.speed self.rect.x += self.speed
# Sprung
if keys[pygame.K_SPACE] and self.on_ground: if keys[pygame.K_SPACE] and self.on_ground:
self.velocity_y = self.jump_strength self.velocity_y = self.jump_strength
self.on_ground = False 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.velocity_y += self.gravity
self.rect.y += self.velocity_y 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 # Boden-Kollision
if self.rect.bottom >= ground_y: if self.rect.bottom >= ground_y:
@ -45,5 +57,15 @@ class Player:
self.velocity_y = 0 self.velocity_y = 0
self.on_ground = True 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): def draw(self, screen):
screen.blit(self.image, self.rect) screen.blit(self.image, self.rect)

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

@ -1,18 +1,38 @@
import pygame import pygame
import settings import settings
from player import Player from player import Player
from obstacle import Obstacle
import random
class World: class World:
def __init__(self, screen): 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.screen = screen
self.background_color = (135, 206, 235) # Himmelblau self.background = pygame.image.load(settings.BACKGROUND_IMG).convert()
self.ground_rect = pygame.Rect(0, 600, 1280, 120) # Boden self.bg_width = self.background.get_width()
self.ground_rect = pygame.Rect(0, 740, 5000, 80) # Boden
self.player = Player(200, 500) # Spieler self.player = Player(200, 500) # Spieler
def draw(self): def draw(self):
self.screen.fill(self.background_color) camera_offset = self.player.rect.centerx - settings.SCREEN_WIDTH // 2
pygame.draw.rect(self.screen, (124, 252, 0), self.ground_rect) # Grün für Boden camera_offset = max(0, min(camera_offset, self.bg_width - settings.SCREEN_WIDTH))
self.player.draw(self.screen) 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): def handle_event(self, event):
if event.type == pygame.KEYDOWN: if event.type == pygame.KEYDOWN:

Loading…
Cancel
Save

Powered by TurnKey Linux.