diff --git a/items.py b/items.py new file mode 100644 index 0000000..18d187e --- /dev/null +++ b/items.py @@ -0,0 +1,20 @@ +class Items: + def __init__(self, name, wirkung): + self.name = name + self.wirkung = wirkung + + def benutzen(self, kart): + if self.name == "Turbo": + kart.geschwindigkeit = kart.geschwindigkeit + self.wirkung + + if kart.geschwindigkeit > kart.v_max: + kart.geschwindigkeit = kart.v_max + + elif self.name == "Bremse": + kart.geschwindigkeit = kart.geschwindigkeit - self.wirkung + + if kart.geschwindigkeit < 0: + kart.geschwindigkeit = 0 + + def beschreibung(self): + return self.name + " verändert die geschwindigkeit um " + str(self.wirkung) + " km/h." diff --git a/kart.py b/kart.py new file mode 100644 index 0000000..5d2d09f --- /dev/null +++ b/kart.py @@ -0,0 +1,37 @@ +class Kart: + def __init__(self, name, farbe, v_max, geschwindigkeit, handling, position, ramm): + self.name = name + self.farbe = farbe + self.v_max = v_max + self.geschwindigkeitindigkeit = geschwindigkeit + self.handling = handling + self.driften_anzahl = 0 + self.position = position + self.ramm = ramm + + + + def beschleunigung(self): + self.geschwindigkeit = self.geschwindigkeit + 5 + + if self.geschwindigkeit > self.v_max: + self.geschwindigkeit = self.v_max + + + def bremsen(self): + self.geschwindigkeit = self.geschwindigkeit - 10 + + if self.geschwindigkeit < 0: + self.geschwindigkeit = 0 + + + def driften(self): + self.driften_anzahl = self.driften_anzahl + 1 + self.geschwindigkeit = self.geschwindigkeit - 5 + + if self.geschwindigkeit < 0: + self.geschwindigkeit = 0 + + + def rammen(self, gegner): + self.ramm = self.ramm + 1 diff --git a/pygame_simulation.py b/pygame_simulation.py new file mode 100644 index 0000000..bec3bd7 --- /dev/null +++ b/pygame_simulation.py @@ -0,0 +1,405 @@ +import pygame +import math +import random + +# --------------------------------------------------------- +# PYGAME INITIALISIERUNG +# --------------------------------------------------------- + +pygame.init() + +BREITE = 1200 +HOEHE = 700 + +screen = pygame.display.set_mode((BREITE, HOEHE)) +pygame.display.set_caption("Kart-Rennsimulation") + +clock = pygame.time.Clock() + +# Farben +WEISS = (255, 255, 255) +SCHWARZ = (20, 20, 20) +GRAU = (100, 100, 100) +DUNKELGRAU = (45, 45, 45) +GRUEN = (50, 150, 70) +ROT = (220, 50, 50) +BLAU = (50, 100, 230) +GELB = (240, 220, 50) + + +# --------------------------------------------------------- +# KART-KLASSE +# --------------------------------------------------------- + +class Kart: + def __init__(self, name, farbe, v_max, geschw, handling, position, rammen): + self.name = name + self.farbe = farbe + self.v_max = v_max + self.geschw = geschw + self.handling = handling + self.driften_anzahl = 0 + self.position = position + self.rammen_wert = rammen + # Pygame-Werte + self.x = 0 + self.y = 0 + self.winkel = 0 + + self.beschleunigungsstaerke = 10 + self.bremsstaerke = 20 + + # ----------------------------------------------------- + # BESCHLEUNIGEN + # ----------------------------------------------------- + + def beschleunigung(self): + self.geschw += 10 + + if self.geschw > self.v_max: + self.geschw = self.v_max + + # ----------------------------------------------------- + # BREMSEN + # ----------------------------------------------------- + + def bremsen(self): + self.geschw -= 20 + + if self.geschw < 0: + self.geschw = 0 + + # ----------------------------------------------------- + # DRIFTEN + # ----------------------------------------------------- + + def driften(self): + self.driften_anzahl += 1 + + self.geschw -= 5 + + if self.geschw < 0: + self.geschw = 0 + + # ----------------------------------------------------- + # RAMMEN + # ----------------------------------------------------- + + def rammen(self): + self.rammen_wert += 1 + + # ----------------------------------------------------- + # KART ZEICHNEN + # ----------------------------------------------------- + + def zeichnen(self, surface): + + breite = 45 + hoehe = 28 + + # Kart als Rechteck erstellen + kart_surface = pygame.Surface((breite, hoehe), pygame.SRCALPHA) + + # Farbe bestimmen + if self.farbe == "rot": + farbe = ROT + elif self.farbe == "blau": + farbe = BLAU + else: + farbe = WEISS + + pygame.draw.rect( + kart_surface, + farbe, + (0, 0, breite, hoehe), + border_radius=8 + ) + + # Front des Karts + pygame.draw.rect( + kart_surface, + SCHWARZ, + (breite - 8, 5, 5, hoehe - 10) + ) + + # Fenster + pygame.draw.rect( + kart_surface, + (80, 180, 220), + (15, 5, 14, 18), + border_radius=3 + ) + + # Kart drehen + gedreht = pygame.transform.rotate( + kart_surface, + self.winkel + ) + + rechteck = gedreht.get_rect( + center=(self.x, self.y) + ) + + surface.blit(gedreht, rechteck) + + # ----------------------------------------------------- + # BEWEGUNG + # ----------------------------------------------------- + + def bewegen(self, links, rechts): + + # Handling bestimmt, wie schnell das Kart lenkt + lenkgeschwindigkeit = self.handling * 0.08 + + if self.geschw > 0: + + if links: + self.winkel += lenkgeschwindigkeit + + if rechts: + self.winkel -= lenkgeschwindigkeit + + # Geschwindigkeit in Pixel umrechnen + bewegung = self.geschw * 0.08 + + rad = math.radians(self.winkel) + + self.x += math.cos(rad) * bewegung + self.y -= math.sin(rad) * bewegung + + # Begrenzung des Spielfeldes + self.x = max(80, min(BREITE - 80, self.x)) + self.y = max(80, min(HOEHE - 80, self.y)) + + +# --------------------------------------------------------- +# KARTS ERSTELLEN +# --------------------------------------------------------- + +kart1 = Kart( + "Magic", + "rot", + 500, + 100, + 8, + 1, + 1 +) + +kart2 = Kart( + "Luigi", + "blau", + 400, + 120, + 6, + 2, + 1 +) + +# Startpositionen +kart1.x = 300 +kart1.y = 350 +kart1.winkel = 0 + +kart2.x = 300 +kart2.y = 430 +kart2.winkel = 0 + + +# --------------------------------------------------------- +# SCHRIFTEN +# --------------------------------------------------------- + +font_gross = pygame.font.SysFont("Arial", 32, bold=True) +font_normal = pygame.font.SysFont("Arial", 22) +font_klein = pygame.font.SysFont("Arial", 18) + + +# --------------------------------------------------------- +# RENNSTRECKE +# --------------------------------------------------------- + +def strecke_zeichnen(): + + # Gras + screen.fill(GRUEN) + + # Äußerer Straßenbereich + pygame.draw.rect( + screen, + DUNKELGRAU, + (80, 80, BREITE - 160, HOEHE - 160), + border_radius=100 + ) + + # Innerer Bereich + pygame.draw.rect( + screen, + GRUEN, + (200, 180, BREITE - 400, HOEHE - 360), + border_radius=70 + ) + + # Mittellinie + pygame.draw.rect( + screen, + (230, 230, 230), + (BREITE // 2 - 5, 80, 10, 100) + ) + + pygame.draw.rect( + screen, + (230, 230, 230), + (BREITE // 2 - 5, HOEHE - 180, 10, 100) + ) + + # Start-/Ziellinie + start_x = BREITE // 2 - 5 + + for y in range(180, 520, 30): + + if (y // 30) % 2 == 0: + farbe = WEISS + else: + farbe = SCHWARZ + + pygame.draw.rect( + screen, + farbe, + (start_x, y, 10, 30) + ) + + +# --------------------------------------------------------- +# INFO-BEREICH +# --------------------------------------------------------- + +def informationen_zeichnen(): + + # Hintergrund + pygame.draw.rect( + screen, + (25, 25, 25), + (0, 0, BREITE, 60) + ) + + # Kart 1 + text1 = font_normal.render( + f"{kart1.name}: {int(kart1.geschw)} km/h", + True, + ROT + ) + + screen.blit(text1, (20, 18)) + + # Kart 2 + text2 = font_normal.render( + f"{kart2.name}: {int(kart2.geschw)} km/h", + True, + BLAU + ) + + screen.blit(text2, (270, 18)) + + # Drift + text3 = font_klein.render( + f"Drifts: {kart1.driften_anzahl}", + True, + WEISS + ) + + screen.blit(text3, (520, 21)) + + text4 = font_klein.render( + f"Drifts: {kart2.driften_anzahl}", + True, + WEISS + ) + + screen.blit(text4, (650, 21)) + + + +def steuerung_zeichnen(): + + texte = [ + "MAGIC: W = Gas | S = Bremse | A/D = Lenken | Leertaste = Drift", + "LUIGI: Pfeile = Fahren | R = Drift" + ] + + y = HOEHE - 65 + + for text in texte: + + bild = font_klein.render( + text, + True, + WEISS + ) + + screen.blit( + bild, + (20, y) + ) + + y += 22 + + + +running = True + +while running: + + clock.tick(60) + + + for event in pygame.event.get(): + + if event.type == pygame.QUIT: + running = False + + keys = pygame.key.get_pressed() + + + if keys[pygame.K_w]: + kart1.beschleunigung() + + if keys[pygame.K_s]: + kart1.bremsen() + + if keys[pygame.K_SPACE]: + kart1.driften() + + kart1.bewegen( + keys[pygame.K_a], + keys[pygame.K_d] + ) + + + if keys[pygame.K_UP]: + kart2.beschleunigung() + + if keys[pygame.K_DOWN]: + kart2.bremsen() + + if keys[pygame.K_r]: + kart2.driften() + + kart2.bewegen( + keys[pygame.K_LEFT], + keys[pygame.K_RIGHT] + ) + + + strecke_zeichnen() + + kart1.zeichnen(screen) + kart2.zeichnen(screen) + + informationen_zeichnen() + steuerung_zeichnen() + + pygame.display.flip() + + +pygame.quit() diff --git a/test_kart.py b/test_kart.py new file mode 100644 index 0000000..447faac --- /dev/null +++ b/test_kart.py @@ -0,0 +1,35 @@ +from kart import Kart +from items import Items + +kart1 = Kart("Magic", "rot", 500, 100, 8, 1, 1) +kart2 = Kart("Luigi", "blau", 400, 120, 6, 2, 1) + + +turbo = Items("Turbo", 50) +bremse = Items("Bremse", 30) + +# Kart 1 +print(kart1.name, "hat die Farbe", kart1.farbe) + +kart1.beschleunigung() +print("Beschleunigen:", kart1.name, "hat jetzt", kart1.geschw, "km/h") + +kart1.bremsen() +print("Bremsen:", kart1.name, "hat jetzt", kart1.geschw, "km/h") + +turbo.benutzen(kart1) +print("Turbo:", kart1.name, "hat jetzt", kart1.geschw, "km/h") + +# Kart 2 + +print(kart2.name, "hat die Farbe", kart2.farbe) + +kart2.beschleunigung() +print("Beschleunigen:", kart2.name, "hat jetzt", kart2.geschw, "km/h") + +kart2.bremsen() +print("Bremsen:", kart2.name, "hat jetzt", kart2.geschw, "km/h") + + +bremse.benutzen(kart2) +print("Bremse:", kart2.name, "hat jetzt", kart2.geschw, "km/h")