from play_and_code import *
import random

tick_speed(7)

size = 50
FIELD_WIDTH = WINDOW_WIDTH / size
FIELD_HEIGHT = WINDOW_HEIGHT / size

snake = [(FIELD_WIDTH/2, FIELD_HEIGHT/2)]

phase = 0

dir = (0,0)

def new_fruit():
    # Zufällige position für die Frucht bestimmen
    x = random.randint(0, FIELD_WIDTH-1)
    y = random.randint(0, FIELD_HEIGHT-1)
    return (x,y)

fruit = new_fruit()


def main():
    global dir, snake, size, fruit, phase

    if phase == 0:
        
        if is_key_pressed(UP):
            dir = (0,-1)
        elif is_key_pressed(DOWN):
            dir = (0,1)
        elif is_key_pressed(RIGHT):
            dir = (1,0)
        elif is_key_pressed(LEFT):
            dir = (-1,0)
        
        
        # Dir setzen wenn links, rechts oder unten gedrückt wird

        #cur current
        cur = snake[0]
        snake[0] = (snake[0][0] + dir[0], snake[0][1] + dir[1])
        for i in range(1, len(snake)):
            tmp = snake[i]
            snake[i] = cur
            cur = tmp
            i = i + 1

        # Die Frucht anzeigen

        rect(GREEN, fruit[0]*size, fruit[1]*size, size, size )

        # Alle Teile der Schlange in einer anderen Farbe als die Frucht anzeigen
        
        for part in snake:
            rect(RED, part[0] * size, part[1] * size , size, size )
        
        
        
        # Schlange verlängern wenn der Kopf auf der gleichen Stelle wie die Frucht ist.
        # Die neue position lässt sich mit: (last[0] - dir[0], last[1] - dir[1])
        # wobei last das momentan letzte teil der Schlange ist

        if fruit == snake[0]:
            last = snake[len(snake)-1]
            snake.append((last[0] - dir[0], last[1] - dir[1]))
            fruit = new_fruit()
            

        for j in range(1,len(snake)):
            if snake[0] == snake[j]:
                phase = 2
        
        if snake[0][0] == FIELD_WIDTH or snake[0][0] < 0 or snake[0][1] == FIELD_HEIGHT or snake[0][1] < 0:
            phase = 2

        # Das spiel mit der exit() funktion beenden wenn der Kopf ein anderes Teil der Schlange berührt
        
        # Die Punktzahl anzeigen

        text("Score: " + str(len(snake)-1), WHITE, 100, 30, 36  )
        
        
        # Das spiel mit der exit() funktion beenden wenn der Kopf außerhalb des Spielfelds ist

    if phase == 2:
        text("Game Over", RED, WINDOW_WIDTH/2, WINDOW_HEIGHT/2, 50 )
        text("Score: " + str(len(snake)-1), WHITE,WINDOW_WIDTH/2, WINDOW_HEIGHT/2 + 100, 36  )
start(main)

