Загрузка данных
import turtle
import time
import random
class Snake:
def __init__(self):
self.segments = []
self.create_snake()
self.direction = "stop"
self.tail_color = "orange" # Цвет хвоста по умолчанию
def create_snake(self):
head = turtle.Turtle()
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
self.segments.append(head)
def move(self):
# Двигаем тело змейки
for index in range(len(self.segments) - 1, 0, -1):
x = self.segments[index - 1].xcor()
y = self.segments[index - 1].ycor()
self.segments[index].goto(x, y)
# Двигаем голову змейки
if self.direction == "up":
self.segments[0].sety(self.segments[0].ycor() + 20)
elif self.direction == "down":
self.segments[0].sety(self.segments[0].ycor() - 20)
elif self.direction == "left":
self.segments[0].setx(self.segments[0].xcor() - 20)
elif self.direction == "right":
self.segments[0].setx(self.segments[0].xcor() + 20)
def add_segment(self):
new_segment = turtle.Turtle()
new_segment.speed(0)
new_segment.shape("square")
new_segment.color(self.tail_color) # Устанавливаем цвет хвоста в зависимости от цвета еды
new_segment.penup()
self.segments.append(new_segment)
def set_direction(self, direction):
if direction == "up" and self.direction != "down":
self.direction = "up"
elif direction == "down" and self.direction != "up":
self.direction = "down"
elif direction == "left" and self.direction != "right":
self.direction = "left"
elif direction == "right" and self.direction != "left":
self.direction = "right"
def reset(self):
for segment in self.segments:
segment.goto(1000, 1000) # Убираем сегменты с экрана
self.segments.clear() # Очищаем список сегментов
self.create_snake() # Создаем новую голову змейки
self.direction = "stop" # Сбрасываем направление
class Food:
def __init__(self):
self.food = turtle.Turtle()
self.food.speed(0)
self.food.penup()
self.place_food()
def random_color(self):
return random.choice(['red', 'green', 'orange', 'yellow', 'purple'])
def random_shape(self):
return random.choice(['square', 'circle', 'triangle'])
def place_food(self):
self.food.shape(self.random_shape()) # Случайная форма еды
self.food.color(self.random_color()) # Случайный цвет еды
x = random.randint(-270, 270)
y = random.randint(-270, 270)
self.food.goto(x, y)
class Game:
def __init__(self):
self.delay = 0.1
self.score = 0
self.high_score = 0
self.wn = turtle.Screen()
self.wn.title("Snake Game")
self.wn.bgcolor("blue")
self.wn.setup(width=600, height=600)
self.wn.tracer(0)
self.snake = Snake()
self.food = Food()
self.pen = turtle.Turtle()
self.pen.speed(0)
self.pen.color("white")
self.pen.penup()
self.pen.hideturtle()
self.pen.goto(0, 250)
self.update_scoreboard()
self.wn.listen()
self.wn.onkeypress(lambda: self.snake.set_direction("up"), "w")
self.wn.onkeypress(lambda: self.snake.set_direction("down"), "s")
self.wn.onkeypress(lambda: self.snake.set_direction("left"), "a")
self.wn.onkeypress(lambda: self.snake.set_direction("right"), "d")
def update_scoreboard(self):
self.pen.clear()
self.pen.write(f"Score: {self.score} High Score: {self.high_score}", align="center", font=("candara", 24, "bold"))
def play(self):
while True:
self.wn.update()
# Проверка на столкновение со стенами
if (self.snake.segments[0].xcor() > 290 or self.snake.segments[0].xcor() < -290 or
self.snake.segments[0].ycor() > 290 or self.snake.segments[0].ycor() < -290):