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, körperFarbe, 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 ApfelKollision():
    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))

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)

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
    
    ApfelKollision()
    Zeichnen()
    pygame.display.flip()
    
pygame.quit()



