48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""Die Raumkapsel Apollo kreist um den Mond."""
|
|
|
|
import pygame
|
|
|
|
from compute import rot_2d
|
|
from moon import MOON_RADIUS, Moon, Point
|
|
|
|
APOLLO_RADIUS = 4
|
|
APOLLO_DISTANCE = MOON_RADIUS + 15 # Abstand Mond-Apollo (Mittelpunkte)
|
|
RED = (255, 0, 0)
|
|
|
|
|
|
class Apollo(Moon):
|
|
"""Erweitert die Mond-Simulation um die Raumkapsel Apollo."""
|
|
|
|
def __init__(
|
|
self,
|
|
title: str = "Apollo",
|
|
fps: int = 60,
|
|
size: tuple[int, int] = (640, 400),
|
|
) -> None:
|
|
"""Legt Startposition und Rotationsmatrix von Apollo fest."""
|
|
super().__init__(title, fps, size)
|
|
self.position_apollo: Point = (APOLLO_DISTANCE, 0.0) # relativ zum Mond
|
|
# doppelte Winkelgeschwindigkeit, entgegengesetzte Drehrichtung
|
|
self.rot_apollo: list[list[float]] = rot_2d(-2 * self.theta, unit="rad")
|
|
|
|
def update_game(self) -> bool:
|
|
"""Bewegt erst den Mond, dann Apollo."""
|
|
running = super().update_game()
|
|
self.position_apollo = self.rotate(self.position_apollo, self.rot_apollo)
|
|
return running
|
|
|
|
def draw_bodies(self) -> None:
|
|
"""Zeichnet Erde und Mond und zusätzlich Apollo."""
|
|
super().draw_bodies()
|
|
moon_x, moon_y = self.moon_screen_position()
|
|
apollo_pos = (
|
|
moon_x + self.position_apollo[0],
|
|
moon_y + self.position_apollo[1],
|
|
)
|
|
pygame.draw.circle(self.screen, RED, apollo_pos, APOLLO_RADIUS)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
apollo = Apollo()
|
|
apollo.run()
|