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()