yo
This commit is contained in:
commit
a8ee8bad99
7 files changed
+458
No files matched your search
@@ -0,0 +1,85 @@
|
||||
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()
|
||||
Reference in new issue
Block a user