Sonnensystem

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
k-net
User
Beiträge: 24
Registriert: Donnerstag 22. Oktober 2020, 16:43

Hallo,

ich habe ein Mini-Sonnensystem nachgebaut. Zum Spaß und als Übung. Natürlich nicht mit den realen Gravitationskräften.
Meine Frage an euch: Wie hättet ihr es gemacht? Welche Verbesserungen im Code würdet ihr vornehmen?

Code: Alles auswählen

import pygame as pg
import math

pg.init()
breite = 1000
hoehe = 1000
zentrum_x = breite / 2
zentrum_y = hoehe / 2
mitte = zentrum_x, zentrum_y

screen = pg.display.set_mode((breite, hoehe))
pg.display.set_caption('Solar')

#Farben
black = (0, 0, 0)
white = (255, 255, 255)
blue = (0, 0, 255)
yellow = (255, 255, 0)

weitermachen = True
clock = pg.time.Clock()

winkel_erde = 0
winkel_mond = 0

orbit_erde = zentrum_x * 0.6
orbit_mond = 50

while weitermachen:
    clock.tick(60)
    for ereignis in pg.event.get():
        if ereignis.type == pg.QUIT:
            weitermachen = False
    screen.fill((0, 0, 0))

    winkel_erde += 0.02
    winkel_mond += 0.05

    erde = orbit_erde * math.cos(winkel_erde) + zentrum_x, orbit_erde * math.sin(winkel_erde) + zentrum_y
    mond = orbit_mond * math.cos(winkel_mond) + orbit_erde * math.cos(winkel_erde) + zentrum_x, orbit_mond * math.sin(winkel_mond) + orbit_erde * math.sin(winkel_erde) + zentrum_y

    pg.draw.circle(screen, blue, erde, 20)
    pg.draw.circle(screen, white, mond, 10)
    pg.draw.circle(screen, yellow, mitte, 50, 0)

    pg.display.flip()

pg.quit()

Gruß und Dank!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Neben den ueblichen Hinweisen - keine globalen Variablen, KONSTANTEN werden gross geschrieben - faellt vor allem eines auf: das waere ein super Problem, um mit Objekten zu arbeiten. Statt fuer alles, was du so an Sonnensystembewohnern hast, einen Haufen Variablen und einen Haufen Berechnungen hinzupinnen, waere eine Hierarchie von Objekten (Sonne an der Wurzel, Planeten sind Kinder der Sonne, Monde Kinder der Planeten) gut.

Und dann noch ein klassischer Fehler: so zu tun, als ob man mit jedem Schritt der Simulation einen gleichmaessigen Zeitschritt taetigt. Das stimmt nicht, wenn der PC mal etwas rumroedelt, dauert es auch mal laenger.

Stattdesse berechnet man Animationen anhand der wirklich verflossenen Zeit.
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ergänzend `Rect`-Objekte haben eine Menge praktischer Attribute und es gibt `pygame.math.Vector2`. Man muss nicht alles selbst ausrechnen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten