Загрузка данных
#ВСЕ КОММЕНТАРИИ МОИ, ЧИТАЙТЕ ЕСЛИ ЧТО-ТО НЕЯСНО, ДАВАЙТЕ УЖЕ ДОДЕЛАЕМ ЭТОТ ПРОЕКТ
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()