Загрузка данных


#ВСЕ КОММЕНТАРИИ МОИ, ЧИТАЙТЕ ЕСЛИ ЧТО-ТО НЕЯСНО, ДАВАЙТЕ УЖЕ ДОДЕЛАЕМ ЭТОТ ПРОЕКТ


from turtle import *
import time
import random

# Создаем окно для рисования
screen = Screen()

# Устанавливаем размеры окна
screen.setup(800, 800)

# Объявляем объект черепахи
t = Turtle()
t.color('light green')
t.shape('square')
t.penup()
t.shapesize(0.5, 0.5)

writer = Turtle()
writer.hideturtle()
writer.penup()

score_t = Turtle()
score_t.hideturtle()
score_t.penup()
score_t.goto(360, 350)

def update_coords():
    writer.goto(-150, 140)
    #writer.clear()
    #coords_text = 'SNAKE: ' f"X: {t.xcor()}, Y: {t.ycor()}"
    #writer.write(coords_text, align="center", font=("Arial", 10, "normal"))
    
#score - для очков
score = 0  
a = 1
dx = 0
dy = 10  



def game_loop():
    #global - имба, делает возможным обращение к переменным, которых нет в функции
    global a, dx, dy
    if a == 1:
        x, y = t.pos()
        new_x = x + dx
        new_y = y + dy
        
        # Проверка столкновения со стеной
        if new_x <= -390 or new_x >= 390 or new_y <= -390 or new_y >= 390:
            restart_game()
            return
        
        t.goto(new_x, new_y)
        #update_coords()
        check_food()
        screen.update()
        #без ontimer игра бы не работала(это вместо while и sleep, эта штука вызывает строку кода через определенное количество миллисекунд, позволяя не проверять весь текст кода сразу,а выполнять эти действия одновременно с другими)
        screen.ontimer(game_loop, 16)
    
def restart_game():
    global a, dx, dy , score 
    # Возвращаем змейку в центр
    t.goto(0, 0)
    # Сбрасываем направление
    dx = 0
    dy = 10
    score = 0
    update_score()
    # Перемещаем еду
    move_food()
    # Продолжаем игру
    game_loop()

'''def forward():
    global a, dx, dy
    while a == 1:
        x, y = t.pos()
        t.goto(x + dx, y + dy)
        #update_coords()
        check_food()
        screen.update()
        time.sleep(0.0167)'''

def move_up():
    global dx, dy
    if dy != -10:  
        dx = 0
        dy = 10

def move_down():
    global dx, dy
    if dy != 10:   
        dx = 0
        dy = -10

def move_left():
    global dx, dy
    if dx != 10:   
        dx = -10
        dy = 0

def move_right():
    global dx, dy
    if dx != -10:  
        dx = 10
        dy = 0

def check_food():
    global score
    
    if t.distance(food) < 10:
        score+=1
        update_score()
        move_food()

# Привязка к клавишам wasd
screen.onkey(move_up, 'w')
screen.onkey(move_down, 's')
screen.onkey(move_left, 'a')
screen.onkey(move_right, 'd')

# Привязка к клавишам WASD
screen.onkey(move_up, 'W')
screen.onkey(move_down, 'S')
screen.onkey(move_left, 'A')
screen.onkey(move_right, 'D')

# Привязка к клавишам ⬆⬅⬇⮕
screen.onkey(move_up, 'Up')
screen.onkey(move_down, 'Down')
screen.onkey(move_left, 'Left')
screen.onkey(move_right, 'Right')

'''
#Привязка к клавишам цфыв
screen.onkey(move_up, 'ц')
screen.onkey(move_down, 'ы')
screen.onkey(move_left, 'ф')
screen.onkey(move_right, 'в')

# Привязка к клавишам ЦФЫВ
screen.onkey(move_up, 'Ц')
screen.onkey(move_down, 'Ы')
screen.onkey(move_left, 'Ф')
screen.onkey(move_right, 'В')
#не работает, видимо из-за ограничений turtle.onkey()
'''

screen.listen()

#счет
def update_score():
    """Обновляет счет на экране (вызывается только когда съели еду)"""
    score_t.clear()
    score_t.write(f"Счет: {score}", align="center", font=("Arial", 16, "bold"))

# Еда
food = Turtle()
food.speed(0)
food.penup()
food.shape('circle')
food.shapesize(0.5, 0.5)
food.color('red')

def move_food():
    foodx = random.randint(-39, 39) * 10
    foody = random.randint(-39, 39) * 10
    food.goto(foodx, foody)


move_food()
game_loop()
screen.mainloop()