#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