Сделайте снеговика подвижным с помощью клавиш со стрелками на чертеже черепахи Python - PullRequest
0 голосов
/ 15 апреля 2019

Ожидаемые результаты: Snowman может перемещаться с помощью клавиш со стрелками вправо, влево, вверх и вниз или с помощью клавиш со стрелками на клавиатуре.

Пробовал t.speed, t.goto, t.move и т. Д. Практически все команды, которые я нашел в Интернете, касались движений с черепахой. Честно говоря, я совершенно тупик и могу использовать любую помощь.

import turtle
t = turtle.Turtle()
def create_oval(color, radius, x, y):
    t.penup()
    t.fillcolor(color)
    t.goto(x,y)
    t.pendown()
    t.begin_fill()
    t.circle(radius)
    t.end_fill()

#drawing body for snowman
create_oval("#ffffff", 30, 0, -40)
create_oval("#ffffff", 40, 0, -100)
create_oval("#ffffff", 60, 0, -200)

create_oval("#ffffff", 2, -10, -10) #drawing left eye for snowman
create_oval("#ffffff", 2, 10, -10) #drawing right eye for snowman
create_oval("#ffffff", 3, 0, -15) #drawing nose for snowman

# drawing buttons for snowman
create_oval("#ffffff", 2, 0, -40) #drawing left eye for snowman
create_oval("#ffffff", 2, 0, -55) #drawing right eye for snowman
create_oval("#ffffff", 2, 0, -65)

def create_line(x, y, length, angle):
    t.penup()
    t.goto(x, y)
    t.setheading(angle)
    t.pendown()
    t.forward(length)
    t.setheading(angle + 20)
    t.forward(20)
    t.penup()
    t.back(20)
    t.pendown()
    t.setheading(angle - 20)
    t.forward(20)
    t.penup()
    t.home()

create_line(-70, -50, 50, 160) #drawing left arm for snowman
create_line(70, -50, 50, 20) #drawing right arm for snowman


def create_rectangle(x, y, width, height): #drawing hat for snowman
    t.penup()
    t.goto(x, y)
    t.fillcolor("black")
    t.pendown()
    t.fillcolor("black")
    t.begin_fill()
    t.forward(width)
    t.left(90)
    t.forward(height)
    t.left(90)
    t.forward(width)
    t.left(90)
    t.forward(height)
    t.left(90)
    t.end_fill()

create_rectangle(-22, 20, 50, 70)

def create_rectangle(x, y, width, height): #drawing hat for snowman
    t.penup()
    t.goto(x, y)
    t.fillcolor("black")
    t.pendown()
    t.fillcolor("black")
    t.begin_fill()
    t.forward(width)
    t.left(90)
    t.forward(height)
    t.left(90)
    t.forward(width)
    t.left(90)
    t.forward(height)
    t.left(90)
    t.end_fill()

create_rectangle(-35, 20, 75, 20)

1 Ответ

0 голосов
/ 15 апреля 2019

Есть несколько способов увидеть это.Более элегантный способ - использовать измененных черепах, чтобы сделать все компоненты вашего снеговика, например, с помощью shapesize() и встроенные формы с помощью shape().Затем, чтобы переместить снеговика, вам нужно всего лишь попросить всех черепах, из которых он состоит, двигаться.Это позволило бы расширить спектр трюков.(Например, перевернуть вверх ногами!)

Более грубый метод заключается в том, чтобы заключить все команды, которые создают снеговика, в функцию, которая принимает аргументы X & Y, которые вы добавляете ко всем аргументам X & Y командты звонишь.Затем мы отключили бы видимые обновления экрана, clear() и полностью перерисовали снеговика в новом месте.

Более грубый метод требует меньше изменений в вашем коде, и это следует ниже, реализуя только влево и вправодвижение стрелы вашего снеговика:

from turtle import Screen, Turtle

def create_oval(color, radius, x, y):
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.fillcolor(color)

    turtle.begin_fill()
    turtle.circle(radius)
    turtle.end_fill()

def create_line(x, y, length, angle):
    turtle.penup()
    turtle.goto(x, y)
    turtle.setheading(angle)
    turtle.pendown()

    turtle.forward(length)
    turtle.setheading(angle + 20)
    turtle.forward(20)

    turtle.penup()
    turtle.back(20)
    turtle.pendown()

    turtle.setheading(angle - 20)
    turtle.forward(20)

    turtle.penup()

def create_rectangle(x, y, width, height): # drawing hat for snowman
    turtle.penup()
    turtle.goto(x, y)
    turtle.fillcolor("black")
    turtle.pendown()

    turtle.begin_fill()
    turtle.forward(width)
    turtle.left(90)
    turtle.forward(height)
    turtle.left(90)
    turtle.forward(width)
    turtle.left(90)
    turtle.forward(height)
    turtle.left(90)
    turtle.end_fill()

def draw_snowman(x, y):

    # drawing body for snowman
    create_oval('white', 30, 0 + x, -40 + y)
    create_oval('white', 40, 0 + x, -100 + y)
    create_oval('white', 60, 0 + x, -200 + y)

    create_oval('white', 2, -10 + x, -10 + y)  # drawing left eye for snowman
    create_oval('white', 2, 10 + x, -10 + y)  # drawing right eye for snowman
    create_oval('white', 3, 0 + x, -15 + y)  # drawing nose for snowman

    # drawing buttons for snowman
    create_oval('white', 2, 0 + x, -40 + y)  # drawing left eye for snowman
    create_oval('white', 2, 0 + x, -55 + y)  # drawing right eye for snowman
    create_oval('white', 2, 0 + x, -65 + y)

    create_line(-70 + x, -50 + y, 50, 160)  # drawing left arm for snowman
    create_line(70 + x, -50 + y, 50, 20)  # drawing right arm for snowman

    create_rectangle(-22 + x, 20 + y, 50, 70)
    create_rectangle(-35 + x, 20 + y, 75, 20)

snow_x, snow_y = 0, 0

def move_left():
    global snow_x

    turtle.clear()

    snow_x -= 10
    draw_snowman(snow_x, snow_y)

def move_right():
    global snow_x

    turtle.clear()

    snow_x += 10
    draw_snowman(snow_x, snow_y)

screen = Screen()
screen.tracer(False)

turtle = Turtle(visible=False)

draw_snowman(snow_x, snow_y)

screen.onkey(move_left, "Left")
screen.onkey(move_right, "Right")

screen.listen()
screen.mainloop()
...