import pygame
import random

def Zeichnen():
    
    screen.fill(screenFarbe) # Screen mit scharzer Farbe füllen
    
    #for i in range(zeilen):
    #    pygame.draw.line(screen, linienFarbe, (0, i * quadratLänge), (screenBreite, i * quadratLänge))
    #for i in range(spalten):
    #    pygame.draw.line(screen, linienFarbe, (i * quadratLänge, 0), (i * quadratLänge, screenHöhe))
        
    pygame.draw.rect(screen, kopfFarbe, kopf) # Kopf zeichnen
    pygame.draw.rect(screen, apfelFarbe, apfel) # Apfel zeichnen
    for quadrat in körper:
        pygame.draw.rect(screen, (random.randint(0,255), random.randint(0,255), random.randint(0,255)), quadrat)

def Bewegen():
    
    # Körper bewegen
    if len(körper) > 0:
        letztesQuadrat = körper.pop() # entfernt das letzte Element und setzt es auf den Kopf
        letztesQuadrat.left = kopf.left
        letztesQuadrat.top = kopf.top
        körper.insert(0, letztesQuadrat)
    
    # Kopf bewegen
    if richtung == "rechts":
        kopf.left = kopf.left + quadratLänge
    elif richtung == "links":
        kopf.left = kopf.left - quadratLänge
    elif richtung == "rauf":
        kopf.top = kopf.top - quadratLänge
    elif richtung == "runter":
        kopf.top = kopf.top + quadratLänge

def KollisionApfel():
    if kopf.colliderect(apfel):
        apfel.left = random.randint(0, spalten - 1) * quadratLänge
        apfel.top = random.randint(0, zeilen - 1) * quadratLänge
        körper.insert(0, pygame.Rect(kopf.left, kopf.top, quadratLänge, quadratLänge))
        return True
    return False

def KollisionGameOver():
    if richtung == "rauf" and kopf.top < 0:
        return True
    if richtung == "runter" and kopf.top > screenBreite - quadratLänge:
        return True
    if richtung == "links" and kopf.left < 0:
        return True
    if richtung == "rechts" and kopf.left > screenHöhe - quadratLänge :
        return True
    
    for tElem in körper:
        if tElem.colliderect(kopf):
            return True
    
    return False



pygame.init()

quadratLänge = 30
spalten = 20
zeilen = 20

screenBreite = spalten * quadratLänge
screenHöhe = zeilen * quadratLänge

screen = pygame.display.set_mode((screenBreite,screenHöhe))
screenFarbe = (0, 0, 0) 

gameOver = False

linienFarbe = (255, 255, 255)

kopf = pygame.Rect((spalten // 2) * quadratLänge, (zeilen // 2) * quadratLänge, quadratLänge, quadratLänge)
kopfFarbe = (0, 255, 0) # RGB: Red, Green, Blue

fps = 9
uhr = pygame.time.Clock()

richtung = "keine"

apfel = pygame.Rect(random.randint(0, spalten - 1) * quadratLänge, random.randint(0, zeilen - 1) * quadratLänge, quadratLänge, quadratLänge)
apfelFarbe = (255, 0, 0)

körper = []
körperFarbe = (255, 0, 255)

punkte = 0
gameLäuft = True

while gameLäuft:
    while not gameOver:
        # alle Benutzerevents
        for event in pygame.event.get():
            if event.type == pygame.QUIT: 
                gameOver = True
            if event.type == pygame.KEYDOWN: # Pfeiltasten
                if event.key == pygame.K_RIGHT:
                    richtung = "rechts"
                if event.key == pygame.K_LEFT:
                    richtung = "links"
                if event.key == pygame.K_UP:
                    richtung = "rauf"
                if event.key == pygame.K_DOWN: 
                    richtung = "runter"
        
        uhr.tick(fps)
        Bewegen()
        
        if KollisionGameOver():
            gameOver = True
            break
        
        if KollisionApfel():
            punkte += 1
            pygame.display.set_caption("Punkte: " + str(punkte))
        
        KollisionApfel()
        Zeichnen()
        pygame.display.flip()
        

    #-------Game Over----------
    schrift = pygame.font.SysFont("Comic Sans MS", int(quadratLänge * 0.9)) #Schriftart + Größe
    schriftFarbe = (255, 255, 255)
    text = schrift.render("Game Over!" + " Sie haben " + str(punkte) + " Punkte errreicht", True, schriftFarbe) #Text, Antialiasing, Farbe

    while gameOver:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:   # user drückt auf das "x" rechts oben
                gameOver = False
                gameLäuft = False
                break
            if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
                gameOver = False
                punkte = 0
                richtung = "Keine"
                kopf.left = (spalten // 2) * quadratLänge
                kopf.top =  (zeilen // 2) * quadratLänge
                apfel.left = random.randint(0, spalten - 1) * quadratLänge
                apfel.top = random.randint(0, zeilen - 1) * quadratLänge
                fps = 9
                körper = []
                break
            
        # Get Screen Width
        screen.fill(screenFarbe)
        screen.blit(text, ((screenBreite - text.get_width()) // 2, (screenHöhe - text.get_height()) // 2))
        pygame.display.flip()
    
pygame.quit()
