Habt Ihr Verbesserungsvorschläge meines Python Scripts?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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.