Как переместить штамп черепахи в питоне

Как переместить штамп в модуле черепахи Python?

Вот мой код:

import turtle

def draw_start():
    turtle.pu()
    turtle.setpos(-350,300)
    turtle.pendown()
    turtle.right(90)
    turtle.forward(520)


def draw_finish():
    turtle.speed(15)
    turtle.pu()
    for i in range(18):
        turtle.setpos(200,(300-(i*30)))
        square()
    for j in range(18):
        turtle.setpos(215,(285-(j*30)))
        square()

def stamp_turtle(x,y,color):
    turtle.pu()
    turtle.setheading(0)
    turtle.shape("turtle")
    turtle.color(color)
    turtle.setpos(x,y)
    stamp_list.append(turtle.stamp())

def square():
    turtle.pu()
    turtle.fill(True)    
    for i in range(4):
        turtle.forward(15)
        turtle.right(90)
    turtle.fill(False)

print "Welcome to Turtle Racing : "
number_of_turtles = int(raw_input("How many turtles (between 3 and 6) : "))
bet_amount = int(raw_input("How much do you want to bet? $ "))
bet_turtle = raw_input("Which turtle (1 to 5)? ")

color_list=["red","blue","green","brown","yellow","purple"]
stamp_list=[]
draw_start()
draw_finish()
for i in range(number_of_turtles):
    stamp_turtle(-370,280-i*90,color_list[i])`

person jnthndavis    schedule 01.08.2014    source источник
comment
docs.python.org/2/library/turtle.html ?   -  person Mike Bell    schedule 02.08.2014
comment
Я уже просмотрела и прочитала почти все, и ничем не могла помочь. @МайкБелл   -  person jnthndavis    schedule 02.08.2014
comment
Чтобы быстро удалить всех штампованных черепах, просто вызовите turtle.clearstamp() с каждым из идентификаторов, которые были сохранены в файле stamp_list. После этого вы можете снова проштамповать их все в несколько иных положениях. Вам нужно будет каким-то образом отслеживать, где находится каждый из них, чтобы вы могли немного изменить это, прежде чем перерисовывать их все снова в их обновленных позициях.   -  person martineau    schedule 02.08.2014
comment
Использование методов здесь, похоже, отлично сработало для меня, но, возможно, я не понимаю всего контекста вопроса. docs.python.org/2/library/turtle.html#turtle- движение   -  person Mike Bell    schedule 02.08.2014


Ответы (2)


Переместите штамп черепахи: сотрите его, вызвав функцию penup() и повторно поставив штамп в другом месте:

import turtle
import time
a = turtle.Turtle()
a.penup()
a.goto(0, -200)
a.pendown()
a.stamp()
time.sleep(1)
a.clear()
a.penup()
a.goto(10,10)
a.stamp()

Штамп начинается с 0,200, затем исчезает и снова появляется на 10,10.

person Eric Leschinski    schedule 03.07.2015
comment
Вы стерли все, что могла нарисовать черепаха. Что вам нужно сделать, так это зафиксировать результат a.stamp() и попросить этот идентификатор штампа очистить (просто) себя. - person cdlane; 06.06.2017

Ответ: вы не перемещаете марки, вы перемещаете черепах! Штампы должны быть удалены и перештампованы, тогда как черепахи могут двигаться без перерисовки:

import random
import turtle

STAMP_SIZE = 20
SQUARE_SIZE = 15
FINISH_LINE = 200
COLOR_LIST = ['red', 'blue', 'green', 'brown', 'yellow', 'purple']

def draw_start():
    turtle.speed('fastest')
    turtle.penup()
    turtle.setpos(-350, 300)
    turtle.pendown()
    turtle.right(90)
    turtle.forward(520)

def draw_finish():
    turtle.shape('square')
    turtle.shapesize(SQUARE_SIZE / STAMP_SIZE)
    turtle.penup()

    for i in range(18):
        turtle.setpos(FINISH_LINE, (300 - (i * SQUARE_SIZE * 2)))
        turtle.stamp()

    for j in range(18):
        turtle.setpos(FINISH_LINE + SQUARE_SIZE, ((300 - SQUARE_SIZE) - (j * SQUARE_SIZE  * 2)))
        turtle.stamp()

    turtle.hideturtle()

def move_turtle(who):
    who.forward(random.randint(1, 10))
    if who.xcor() < FINISH_LINE:
        turtle.ontimer(lambda who=who: move_turtle(who), 50)

print('Welcome to Turtle Racing!')
number_of_turtles = int(input('How many turtles (between 3 and 6): '))

draw_start()
draw_finish()

turtle_list = []

for idx in range(number_of_turtles):
    racer = turtle.Turtle('turtle', visible=False)
    racer.speed('fastest')  # affects drawing speed, not forward motion
    racer.penup()
    racer.setpos(-350 - STAMP_SIZE, 280 - idx * 90)
    racer.color(COLOR_LIST[idx])
    racer.showturtle()

    turtle_list.append(racer)

for racer in turtle_list:
    turtle.ontimer(lambda who=racer: move_turtle(who), 100)

turtle.exitonclick()

Место, где штамповка ускоряет процесс, заключается в создании финишной линии, которая занимает гораздо больше времени, если вы пытаетесь ее нарисовать.

введите здесь описание изображения

Обратите внимание, что хотя ваш исходный код — Python 2, мой ответ — Python 3, поэтому вам может потребоваться настроить пару вещей, если вы все еще используете старую версию.

person cdlane    schedule 05.06.2017
comment
Спасибо! Да, я понял это около 2 лет 10 месяцев назад, когда я был еще на первом курсе CompSci. Прошло много времени.... - person jnthndavis; 07.06.2017