import math
import random

import pygame # Packet laden
import sys

pygame.init() # Muss immer bei der Verwendung von Pygame am Anfang gemacht werden zur internen Initialisierung

# Fenstergrösse definieren
width = 400
height = 300
screen = pygame.display.set_mode((width, height))

pygame.display.set_caption("Mein Erstes Pygame Programm")

# Farben definieren mit RGB Wert
white = [255, 255, 255] # noch besser: white = (255, 255, 255), der Wert diese "Tuple"-Objekts kann der Wert nicht mehr verändert werden
yellow = [255, 255, 0] # oder yellow = (255, 255, 0)
red = [255, 0, 0]

# Zeitmesser einführen
clock = pygame.time.Clock()

gegner_groesse = 50
gegner = pygame.Rect(170, 120, gegner_groesse, gegner_groesse)
gegner_geschwindigkeit = 1
bewegungs_richtung = [1,0] # dieser Vektor sollte immer Länge 1 haben, da er nur die Richtung, aber nicht die Geschwindigkeit angibt mit der sich Gegner bewegt
richtungswechselstaerke = 0.3
richtungswechselhaeufigkeit = 30
stophaeufigkeit = 800 # gelegentlich sollte der Gegner einfach stoppen und sich nicht mehr bewegen und danach in umgekehrte richtung weiter gehen
stop = False
stopduration = 100
stopcounter = 0

framecount = 0

def update_velocity(vel, speed=5):
    angle = random.uniform(0, 2 * math.pi)
    vel[0] = speed * math.cos(angle)
    vel[1] = speed * math.sin(angle)

while True:

    framecount += 1

    for event in pygame.event.get():
        # If the player clicks the red 'x', it is considered a quit event
        if event.type == pygame.QUIT:
            pygame.quit() # Gegenteil von pygame.init()
            sys.exit() # Programm regulär beenden

    screen.fill(yellow)


    # Gegnerrechteck bewegen
    if framecount % richtungswechselhaeufigkeit == 0 and stop == False:
        bewegungs_richtung[0] += random.gauss(0,richtungswechselstaerke) # Alternative: random.uniform(-richtungswechselstaerke,richtungswechselstaerke)
        bewegungs_richtung[1] += random.gauss(0,richtungswechselstaerke) # Alternative: random.uniform(-richtungswechselstaerke,richtungswechselstaerke)
        normierung = math.sqrt(bewegungs_richtung[0]**2 + bewegungs_richtung[1]**2)
        bewegungs_richtung[0] = bewegungs_richtung[0] / normierung
        bewegungs_richtung[1] = bewegungs_richtung[1] / normierung

    if framecount % stophaeufigkeit == 0:
        stop = True

    if stop == True:
        stopcounter += 1
        if stopcounter == stopduration:
            stopcounter = 0
            stop = False
            bewegungs_richtung[0] = -bewegungs_richtung[0]
            bewegungs_richtung[1] = -bewegungs_richtung[1]

    if stop == False:
        gegner.x += gegner_geschwindigkeit * bewegungs_richtung[0]
        gegner.y += gegner_geschwindigkeit * bewegungs_richtung[1]

    # Gegner soll im Bildschirm bleiben
    if gegner.x < 0 or gegner.x > width - gegner_groesse:
        bewegungs_richtung[0] = -bewegungs_richtung[0]
        gegner.x += gegner_geschwindigkeit * 2*bewegungs_richtung[0]
    if gegner.y < 0 or gegner.y > height - gegner_groesse:
        bewegungs_richtung[1] = -bewegungs_richtung[1]
        gegner.y += gegner_geschwindigkeit * 2*bewegungs_richtung[1]


    pygame.draw.rect(screen, red, gegner)

    # pygame vollständig updaten
    pygame.display.update()

    clock.tick(60) # while-Schleife soll nicht öffters als 60 mal pro Sekunde ausgeführt werden.



