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


from turtle import *

# --- Настройки ---
v = 0 # максимальная скорость черепашки
step = 15 # шаг

# Основная черепашка для рисования
t = Turtle()
t.color('blue')
t.width(5)
t.shape('circle')
t.pendown()
t.speed(v)

# Черепашка для интерфейса (кнопок)
ui = Turtle()
ui.hideturtle()
ui.speed(0)
ui.penup()

# --- Функции рисования и движения (ваши исходные) ---
def draw(x, y):
    t.goto(x, y)

def move(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()

def setRed():
    t.color('red')

def setGreen():
    t.color('green')

def setBlue():
    t.color('blue')

def stepUp():
    t.goto(t.xcor(), t.ycor() + step)

def stepDown():
    t.goto(t.xcor(), t.ycor() - step)

def stepLeft():
    t.goto(t.xcor() - step, t.ycor())

def stepRight():
    t.goto(t.xcor() + step, t.ycor())

def startFill():
    t.begin_fill()

def endFill():
    t.end_fill()

# --- ФУНКЦИИ ДЛЯ ВИЗУАЛЬНОЙ ЧАСТИ ---

# Функция для рисования кнопки (прямоугольник + текст)
def draw_button(x, y, color, text, text_color="black"):
    ui.goto(x, y)
    ui.pendown()
    ui.fillcolor(color)
    ui.begin_fill()
    for _ in range(2):
        ui.forward(60)
        ui.left(90)
        ui.forward(30)
        ui.left(90)
    ui.end_fill()
    ui.penup()
    ui.goto(x + 10, y + 8) # Смещение для текста
    ui.color(text_color)
    ui.write(text, font=("Arial", 10, "bold"))
    ui.color("black") # Сброс цвета для следующих элементов

# Функция для отрисовки всего интерфейса
def draw_interface():
    ui.clear()
    # 1. Кнопки выбора цвета (Цветовая тема)
    draw_button(-280, 200, "white", "Фон белый", "black")
    draw_button(-280, 160, "black", "Фон черный", "white")
    draw_button(-280, 120, "yellow", "Фон желтый", "black")
    
    # 2. Кнопки перемещения
    draw_button(-280, 40, "lightgray", "Вверх (↑)", "black")
    draw_button(-280, 0, "lightgray", "Вниз (↓)", "black")
    draw_button(-280, -40, "lightgray", "Влево (←)", "black")
    draw_button(-280, -80, "lightgray", "Вправо (→)", "black")

    # 3. Кнопки изменения толщины пера
    draw_button(-280, -160, "lightblue", "Толще (W)", "black")
    draw_button(-280, -200, "lightblue", "Тоньше (Q)", "black")

# --- НОВЫЕ ФУНКЦИИ ПО ЗАДАНИЮ ---
def setBgWhite():
    t.getscreen().bgcolor("white")
    draw_interface() # Перерисовываем интерфейс, чтобы он не пропал

def setBgBlack():
    t.getscreen().bgcolor("black")
    draw_interface()

def setBgYellow():
    t.getscreen().bgcolor("yellow")
    draw_interface()

def changeWidthUp():
    t.width(t.width() + 1)

def changeWidthDown():
    if t.width() > 1: # Минимальная толщина 1
        t.width(t.width() - 1)

# --- ОБРАБОТКА КЛИКОВ МЫШЬЮ ПО КНОПКАМ ---
def on_click(x, y):
    # Проверяем, попал ли клик в область кнопок (координаты примерные)
    # Кнопки фона
    if -280 <= x <= -220 and 200 <= y <= 230: setBgWhite()
    elif -280 <= x <= -220 and 160 <= y <= 190: setBgBlack()
    elif -280 <= x <= -220 and 120 <= y <= 150: setBgYellow()
    
    # Кнопки движения
    elif -280 <= x <= -220 and 40 <= y <= 70: stepUp()
    elif -280 <= x <= -220 and 0 <= y <= 30: stepDown()
    elif -280 <= x <= -220 and -40 <= y <= -10: stepLeft()
    elif -280 <= x <= -220 and -80 <= y <= -50: stepRight()
    
    # Кнопки толщины
    elif -280 <= x <= -220 and -160 <= y <= -130: changeWidthUp()
    elif -280 <= x <= -220 and -200 <= y <= -170: changeWidthDown()
    
    # Если клик не по кнопке, перемещаем черепашку рисования
    else:
        move(x, y)

# --- Привязка событий ---
t.ondrag(draw)

scr = t.getscreen()
# Привязываем клик мыши к нашей новой функции on_click вместо move
scr.onscreenclick(on_click)

# Цвета пера (клавиши)
scr.onkey(setRed, 'r')
scr.onkey(setGreen, 'g')
scr.onkey(setBlue, 'b')

# Движение стрелками (клавиши)
scr.onkey(stepUp, 'Up')
scr.onkey(stepDown, 'Down')
scr.onkey(stepLeft, 'Left')
scr.onkey(stepRight, 'Right')

# Заливка (клавиши)
scr.onkey(startFill, 'f')
scr.onkey(endFill, 'e')

# Привязки по заданию (клавиши)
scr.onkey(setBgWhite, '1')
scr.onkey(setBgBlack, '2')
scr.onkey(setBgYellow, '3')
scr.onkey(changeWidthUp, 'w')
scr.onkey(changeWidthDown, 'q')

# Отрисовываем интерфейс при запуске
draw_interface()

scr.listen()