turtle-graphics: у меня возникли проблемы с использованием ключей для уменьшения и увеличения черепахи

#python #python-turtle

#python #python-turtle

Вопрос:

Я написал код, который заставляет черепаху перемещаться внутри коробки. Я пытаюсь написать часть, чтобы изменить ее размер, если вы нажмете определенные клавиши, такие как g для увеличения и s для сокращения. Однако я чувствую, что то, как я заставляю его расти и сжиматься, не очень хорошо. Всякий раз, когда черепаха имеет размер по умолчанию, и я нажимаю shrink, я получаю сообщение об ошибке, указывающее, что его stetch_len / stretch_wid не должно быть 0 .

Я пытался if сделать так, чтобы он не мог уменьшаться, если его размер равен единице, но я не могу заставить его работать. Я думаю, что это может иметь какое-то отношение к моему методу его сокращения, но я не уверен.

Полу-связанный, у меня была кнопка, которую я установил для сброса черепахи по умолчанию при нажатии. Однако, если я увеличу черепаху, она не будет уменьшаться так сильно. Чем больше я это делаю, тем больше становится значение по умолчанию. Опять же, я думаю, что это связано с методом, который я использовал для изменения размера, но я не уверен.

 import turtle
import os

#Creates the window for the game
wn = turtle.Screen()
wn.bgcolor("cyan")
wn.title("Game Test")

#Creates the background for the game
border_pen = turtle.Turtle()
border_pen.speed(0)
border_pen.color("black")
border_pen.penup()
border_pen.setposition(-250,-250)
border_pen.pendown()
border_pen.pensize(1)
for side in range(4):
    border_pen.fd(500)
    border_pen.lt(90)
border_pen.hideturtle()

#Creates the turtle
player = turtle.Turtle()
player.color("black")
player.shape("square")
player.pensize(2)
#player.penup()
player.setposition(0, 0)
player.setheading(90)
player.shapesize(1)

playerspeed = 10



# This resets the player to its default, beginning state
def reset():
    player.setposition(0, 0)
    player.setheading(90)
    player.shapesize(1)


# Makes the character grow larger
def grow():
    size = player.turtlesize()
    increase = tuple([1   num for num in size])
    player.turtlesize(*increase)
    return

#Makes the character shrink
def shrink():
    size = player.turtlesize()
    decrease = tuple([-1   num for num in size])
    if player.turtlesize() == 1:
        return
    else:
        player.turtlesize(*decrease)
    return

# Prints the characters coordinates in a seperate window from the game
def place():
    b, c = player.pos()
    print("n")
    print(b, ",", c)


# These are the keys you push to activate different things
# The movement uses a number pad, which make programming diagonal keys easier.
turtle.listen()
turtle.onkeypress(reset, "5")
turtle.onkey(grow, "g")
turtle.onkey(shrink, "s")
turtle.onkey(place, "p")


input("Press any key to exit...")
  

Комментарии:

1. turtlesize похоже, что возвращает не целое число, а list кортеж or, проверка `== 1` всегда будет false, возможно, проверьте определенный или все индексы.

Ответ №1:

Юрия Харпенесс привлекла мое внимание к тому, что я использовал turtlesize . Я переключил это shapesize , что позволило мне исправить код.

Чтобы устранить проблему, я использовал shapesize и установил переменную в a, b, c вместо size . Это позволило мне просто добавлять к каждому из них, а затем устанавливать новые значения как shapesize .

Это также означало функцию сброса, мне просто нужно было написать player.shapesize(1, 1, 1) .

 #Makes the character shrink
def shrink():
    a, b, c = player.shapesize()
    if a > 1:
        a = a - 1
        b = b - 1
        c = c - 1
        player.shapesize(a, b, c)
        print(a, b, c)
    else:
        print(a, b, c)
        return