Dateien nach "/" hochladen

This commit is contained in:
2026-09-07 13:47:20 +00:00
commit 49c80ef0ea
5 changed files with 422 additions and 0 deletions
+282
View File
@@ -0,0 +1,282 @@
import pygame
import random
import time
from kart import Kart, Item
# -------------------------
# Einstellungen
# -------------------------
WIDTH = 1000
HEIGHT = 700
FPS = 60
BACKGROUND = (40, 40, 40)
# -------------------------
# Hilfsfunktion zum Zeichnen
# -------------------------
def draw_kart(screen, kart):
# Kart als Rechteck
width = 40
height = 25
surface = pygame.Surface((width, height), pygame.SRCALPHA)
pygame.draw.rect(surface, kart.color, (0, 0, width, height))
# Richtung des Karts
rotated = pygame.transform.rotate(surface, -kart.rotation)
rect = rotated.get_rect(
center=(int(kart.position[0]), int(kart.position[1]))
)
screen.blit(rotated, rect)
# -------------------------
# Pool zeichnen
# -------------------------
def draw_pool(screen, pool):
pygame.draw.ellipse(
screen,
pool.color,
(
int(pool.position[0] - pool.size),
int(pool.position[1] - pool.size / 2),
int(pool.size * 2),
int(pool.size)
)
)
# -------------------------
# Main
# -------------------------
def main():
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Kart Game")
clock = pygame.time.Clock()
# -------------------------
# Karts erzeugen
# -------------------------
kart1 = Kart(
"Player 1",
(255, 50, 50),
acceleration=0.2,
vMax=5,
handling=4
)
kart2 = Kart(
"Player 2",
(50, 100, 255),
acceleration=0.2,
vMax=5,
handling=4
)
# Startpositionen
kart1.position = [250, 350]
kart1.rotation = 0
kart2.position = [750, 350]
kart2.rotation = 180
# -------------------------
# Pool
# -------------------------
pool = None
# Zeitpunkt, wann der nächste Pool erscheint
nextPoolTime = time.time() + random.uniform(3, 8)
running = True
while running:
# -------------------------
# Events
# -------------------------
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# -------------------------
# Pool erzeugen / entfernen
# -------------------------
currentTime = time.time()
# Wenn momentan kein Pool existiert
# und die Wartezeit vorbei ist
if pool is None and currentTime >= nextPoolTime:
pool = Item("pool")
pool.typ()
# Zufällige Position
pool.position = [
random.randint(80, WIDTH - 80),
random.randint(80, HEIGHT - 80)
]
# Zufällige Größe
pool.size = random.randint(40, 80)
# Pool bleibt unterschiedlich lange sichtbar
poolEndTime = currentTime + random.uniform(3, 7)
# Pool verschwinden lassen
if pool is not None and currentTime >= poolEndTime:
pool = None
# Unregelmäßige Zeit bis zum nächsten Pool
nextPoolTime = currentTime + random.uniform(3, 10)
keys = pygame.key.get_pressed()
# -------------------------
# Kart 1
# WASD + E
# -------------------------
# W = Gas
if keys[pygame.K_w]:
kart1.acc(False)
# S = Rückwärts / Bremsen
elif keys[pygame.K_s]:
kart1.acc(True)
# Wenn kein Gas/Bremse -> langsam abbremsen
else:
kart1.speed *= 0.98
# A = links
if keys[pygame.K_a]:
kart1.turn(-1)
# D = rechts
if keys[pygame.K_d]:
kart1.turn(1)
# E = Rammen
if keys[pygame.K_e]:
kart1.ram(kart2)
# -------------------------
# Kart 2
# IJKL + O
# -------------------------
# I = Gas
if keys[pygame.K_i]:
kart2.acc(False)
# K = Rückwärts / Bremsen
elif keys[pygame.K_k]:
kart2.acc(True)
else:
kart2.speed *= 0.98
# J = links
if keys[pygame.K_j]:
kart2.turn(-1)
# L = rechts
if keys[pygame.K_l]:
kart2.turn(1)
# O = Rammen
if keys[pygame.K_o]:
kart2.ram(kart1)
# -------------------------
# Position aktualisieren
# -------------------------
kart1.pos()
kart2.pos()
# -------------------------
# Bildschirm verlassen?
# -> auf andere Seite wechseln
# -------------------------
# Abstand zum Bildschirmrand
border = 20
for kart in [kart1, kart2]:
# Linker Rand
if kart.position[0] < border:
kart.position[0] = border
# Rechter Rand
if kart.position[0] > WIDTH - border:
kart.position[0] = WIDTH - border
# Oberer Rand
if kart.position[1] < border:
kart.position[1] = border
# Unterer Rand
if kart.position[1] > HEIGHT - border:
kart.position[1] = HEIGHT - border
# -------------------------
# Zeichnen
# -------------------------
screen.fill(BACKGROUND)
# Pool zeichnen
if pool is not None:
draw_pool(screen, pool)
draw_kart(screen, kart1)
draw_kart(screen, kart2)
# Namen anzeigen
font = pygame.font.Font(None, 28)
text1 = font.render(
f"{kart1.name}: {kart1.speed:.1f}",
True,
kart1.color
)
text2 = font.render(
f"{kart2.name}: {kart2.speed:.1f}",
True,
kart2.color
)
screen.blit(text1, (20, 20))
screen.blit(text2, (20, 50))
pygame.display.flip()
# FPS
clock.tick(FPS)
pygame.quit()
if __name__ == "__main__":
main()