Habt Ihr Verbesserungsvorschläge meines Python Scripts?
Ich habe letztens ein Python Script geschrieben, welches eine Goldene Spirale über Pygame zeichnet. Nun weiß ich aber nicht, ob das eine effektive (und schöne) Möglichkeit ist, dies zu bewerkstelligen.
Habt Ihr Verbesserungsvorschläge?
1 Antwort
Deine Quadrat Funktion kann man sehr gut aufteilen, da sich einiges wiederholt.
Mein Vorschläg wäre:
def setKoordinaten(invertieren, zaehler):
faktor1 = -1 if invertieren[0] else 1
faktor2 = -1 if invertieren[1] else 1
koordinaten[1] = [koordinaten[0][0], koordinaten[0][1] + (faktor1 * array[zaehler])]
koordinaten[2] = [koordinaten[1][0] + (faktor2 * array[zaehler]), koordinaten[1][1]]
koordinaten[3] = [koordinaten[2][0], koordinaten[0][1]]
def Quadrat():
global zaehler, orientierung
zaehler += 1
koordinaten[0], koordinaten[2] = koordinaten[2], koordinaten[0]
invertieren = [
(True, False),
(True, True),
(False, True),
(False, False),
]
setKoordinaten(invertieren[orientierung], zaehler)
orientierung = (orientierung + 1) % 4
Das Ändern des Vorzeichens kann man mit dem Multiplizieren von -1 umsetzen. Ein Boolean bietet sich sehr gut zum Setzen an.
Mit einem Array und dem Zugriff über den Index kann man dei IFs umgehen.
Das Hochzählen bzw. Zurücksetzen von orientierung kann auch kürzer umsetzen. Die Modulo Operation setzt die Variable dann wieder auf 0. Den Bereich von orientierung würde ich auf 0 - 3 verschieben.
Das invertieren vom Boolean in der Funktion compute_bezier_points kann auch sehr gut so umsetzen:
boolean = not boolean
Die pygame.draw.line() im Main Loop sprechen auch sehr gut für eine Funktion mit Loop.
def drawLines(GUI, index):
pygame.draw.line(GUI, (255, 0, 0), (koordinaten[index][0], koordinaten[index][1]),
(koordinaten[(index + 1) % 4][0], koordinaten[(index + 1) % 4][1]))
for i in range(4):
drawLines(GUI, i)
Die Initialisierung des Koordinaten Arrays könnte man auch auf Basis der Auflösung initialiseren. So kann man die Auflösung änder und der Startpunkt ist immer in der Mitte.
Ich würde etwas von den vielen globalen Variablen wegkommen und verstärkt die Variablen als Parameter in die Funktionen übergeben.
Das koordinaten würde ich global behalten.
Die Zählervariablen zaehler und orientierung würde ich auch eher im Loop hochzählen und nicht in der Hilfsfunktion.