import math import sys import pygame class Moon: def __init__( self, center: tuple[float, float] = (400, 300), distance: float = 180.0, speed: float = 0.02, radius: int = 15, color: tuple[int, int, int] = (200, 200, 200), ): self.center = center # Drehzentrum (standardmäßig die Erde) self.distance = distance # Bahnradius self.angle = 0.0 # Aktueller Winkel self.speed = speed # Winkelgeschwindigkeit self.radius = radius # Darstellungsradius self.color = color # Farbe (Mond: grau) self.x = 0.0 self.y = 0.0 self.update_position() def update_angle(self) -> None: """Erhöht den Drehwinkel um die eigene Geschwindigkeit.""" self.angle += self.speed def compute_relative_position(self) -> tuple[float, float]: """Berechnet die relative Position zum Mittelpunkt über Polar- zu Kartesischen Koordinaten.""" dx = self.distance * math.cos(self.angle) dy = self.distance * math.sin(self.angle) return dx, dy def update_position(self) -> None: """Setzt die absolute Position basierend auf dem Zentrum und dem relativen Offset.""" self.update_angle() dx, dy = self.compute_relative_position() self.x = self.center[0] + dx self.y = self.center[1] + dy def draw(self, screen: pygame.Surface) -> None: """Zeichnet das Objekt auf den Bildschirm.""" pygame.draw.circle( screen, self.color, (int(self.x), int(self.y)), self.radius, ) def main(): pygame.init() screen = pygame.display.set_mode((800, 600)) pygame.display.set_caption("Mond-Simulation") clock = pygame.time.Clock() earth_pos = (400, 300) moon = Moon(center=earth_pos) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Aktualisierung moon.update_position() # Zeichnen screen.fill((10, 10, 25)) # Weltraum-Hintergrund # Erde zeichnen pygame.draw.circle(screen, (30, 100, 220), earth_pos, 40) # Mond zeichnen moon.draw(screen) pygame.display.flip() clock.tick(60) pygame.quit() sys.exit() if __name__ == "__main__": main()