From 863bb21df76bf03c4eff85fe025380269e306888 Mon Sep 17 00:00:00 2001 From: Selin Date: Thu, 22 Oct 2026 13:42:26 +0200 Subject: [PATCH] Apollo Hausi --- Hausaufgaben/Apollo.py | 56 ++++++++++++++---- Hausaufgaben/__pycache__/Moon.cpython-311.pyc | Bin 0 -> 3214 bytes Hausaufgaben/__pycache__/game.cpython-311.pyc | Bin 0 -> 2321 bytes Hausaufgaben/game.py | 52 ++++++++++++++++ 4 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 Hausaufgaben/__pycache__/Moon.cpython-311.pyc create mode 100644 Hausaufgaben/__pycache__/game.cpython-311.pyc create mode 100644 Hausaufgaben/game.py diff --git a/Hausaufgaben/Apollo.py b/Hausaufgaben/Apollo.py index 2a72af1..26e42a2 100644 --- a/Hausaufgaben/Apollo.py +++ b/Hausaufgaben/Apollo.py @@ -1,12 +1,46 @@ -Apollo (P) -Nun wollen wir unsere Animation um die Raumkapsel Apollo -erweitern, die gerade um den Mond kreist. Sie bewegt sich mit der -doppelten Winkelgeschwindigkeit wie der Mond und in -entgegengesetzter Drehrichtung. Die Raumkapsel soll als roter -Kreis dargestellt werden. -Implementieren Sie eine Klasse Apollo als Unterklasse der Klasse -Moon aus der vorherigen Aufgabe, die diese Animation realisiert. Wenn Sie feststellen, dass Ihre bisherige Klasse -Moon nicht geeignet erweitert werden kann, dann bauen Sie Moon bitte entsprechend um, so dass sie das -Open/Closed-Principle erfüllt. Natürlich muss die reine Mond-Simulation weiterhin funktionieren. Wählen Sie die -Abstände und Größen wieder so, dass die Animation ansprechend aussieht. +from Moon import Moon +from Praktikumsaufgaben.matrixmania.compute import rot_2D, matmul, transpose +import pygame +class Apollo(Moon): + def __init__(self) -> None: + super().__init__() #ruft den konstruktor auf vom moon + self.position_apollo = (30, 0) #koordinaten sind somit relativ zum moon und nicht zum mittelpunkt + self.theta_apollo = -2 * self.theta + self.rot_apollo = rot_2D(self.theta_apollo) #doppelt so schnell und in die ntgegengesetzte richtung + def update_game(self) -> bool: + super().update_game() + point = transpose([list(self.position_apollo)]) + result = matmul(self.rot_apollo, point) #apollo wird mit dr rotationsmatrix gedreht + self.position_apollo = (result[0][0], result[1][0]) #koordinaten werden gespeichert + return True + def draw_game(self): + super().draw_game() + + center_x = self.size[0] // 2 #mittelpunkt bestimmen + center_y = self.size[1] // 2 + + apollo_x = ( #Relative Apollo Position + center_x + + self.position_moon[0] + + self.position_apollo[0] + ) + + apollo_y = ( + center_y + + self.position_moon[1] + + self.position_apollo[1] + ) + + pygame.draw.circle( + self.screen, + (255, 0, 0), + (int(apollo_x), int(apollo_y)), + 5 + ) + + pygame.display.flip() + +if __name__ == "__main__": + apollo = Apollo() + apollo.run() \ No newline at end of file diff --git a/Hausaufgaben/__pycache__/Moon.cpython-311.pyc b/Hausaufgaben/__pycache__/Moon.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e8d06722765e8133b049161a97f6ce34f4ba4bb GIT binary patch literal 3214 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 literal 0 HcmV?d00001 diff --git a/Hausaufgaben/game.py b/Hausaufgaben/game.py new file mode 100644 index 0000000..cb2f729 --- /dev/null +++ b/Hausaufgaben/game.py @@ -0,0 +1,52 @@ +import pygame + + +class Game: + """Basisklasse für Pygame-Spiele.""" + + def __init__( + self, + title: str = "Game", + fps: int = 60, + size: tuple[int, int] = (640, 400), + ) -> None: + + pygame.init() + + self.title = title + self.fps = fps + self.size = size + + self.screen = pygame.display.set_mode(size) + pygame.display.set_caption(title) + + self.clock = pygame.time.Clock() + + def update_game(self) -> bool: + """Aktualisiert den Spielzustand.""" + return True + + def draw_game(self) -> None: + """Zeichnet das Spiel.""" + pass + + def run(self) -> None: + """Startet die Spielschleife.""" + + running = True + + while running: + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + if running: + running = self.update_game() + + if running: + self.draw_game() + + self.clock.tick(self.fps) + + pygame.quit() \ No newline at end of file