Files
Prog_3A/Prog_3A/lab_2/apollo.py
T
2026-10-19 20:29:13 +02:00

66 lines
2.1 KiB
Python

import pygame
from _game import Game
from compute import Pi, cos, sin
class Apollo(Game):
"""A small red circle orbiting the moon in the opposite direction."""
def __init__(self, earth_x, earth_y):
super().__init__()
self.center_x = earth_x
self.center_y = earth_y
# Moon orbit parameters
self.moon_theta = 0.05
self.moon_orbit_radius = 80
self.moon_radius = 5
# Apollo orbit parameters (opposite direction)
self.apollo_theta = -0.04
self.apollo_orbit_radius = 30
self.apollo_radius = 3
# Colors
self.earth_color = (0, 0, 255)
self.moon_color = (255, 255, 255)
self.apollo_color = (255, 0, 0)
self.screen = None
def update_game(self):
# Update moon angle
self.moon_theta += 0.02
if self.moon_theta > 2 * Pi:
self.moon_theta -= 2 * Pi
# Calculate moon position
moon_x = int(self.center_x + self.moon_orbit_radius * cos(self.moon_theta))
moon_y = int(self.center_y + self.moon_orbit_radius * sin(self.moon_theta))
# Update Apollo angle (opposite direction)
self.apollo_theta -= 0.02
if abs(self.apollo_theta) > 2 * Pi:
self.apollo_theta += 2 * Pi
# Calculate Apollo position relative to moon
apollo_x = int(moon_x + self.apollo_orbit_radius * cos(self.apollo_theta))
apollo_y = int(moon_y + self.apollo_orbit_radius * sin(self.apollo_theta))
# Draw everything
screen = self.set_screen()
screen.fill((0, 0, 0))
# Earth
pygame.draw.circle(screen, self.earth_color, (self.center_x, self.center_y), 20)
# Moon
pygame.draw.circle(screen, self.moon_color, (moon_x, moon_y), self.moon_radius)
# Apollo
pygame.draw.circle(screen, self.apollo_color, (apollo_x, apollo_y), self.apollo_radius)
pygame.display.flip()
return True
def draw_game(self):
pass
def main():
apollo = Apollo(250, 250)
apollo.run()
if __name__ == "__main__":
main()