если расстояние () <20, строка никогда не выполняется - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь сделать игру в python, где пользователь управляет черепахой с помощью клавиатуры. Событие должно происходить, когда оно достигает точки на экране. Эта проблема встречается дважды в игре. Это часть моего кода, которая доставляет мне неприятности:

#user character
turt = turtle.Turtle()

bg = turtle.Screen()
bg.setup(width=600,height=700)

#identifying coordinate for 'treasure'
x1 = random.randrange(-280, 280)
y1 = random.randrange(-320, -20)
x2 = random.randrange(-280, 280)
y2 = random.randrange(-320, -20)
x3 = random.randrange(-280, 280)
y3 = random.randrange(-320, -20)
x4 = random.randrange(-280, 280)
y4 = random.randrange(-320, -20)
x5 = random.randrange(-280, 280)
y5 = random.randrange(-320, -20)

listofcoordinates = [(x1, y1), (x2, y2), (x3, y3), (x4, y4), (x5, y5)]
treasure = random.choice(listofcoordinates)

#user controls
def moveup():
    turt.setheading(90)
    turt.forward(10)
def movedown():
    turt.setheading(270)
    turt.forward(10)
def moveright():
    turt.setheading(0)
    turt.forward(10)
def moveleft():
    turt.setheading(180)
    turt.forward(10)
bg.onkeypress(moveright, "Right")
bg.onkeypress(moveleft, "Left")
bg.onkeypress(moveup, "Up")
bg.onkeypress(movedown, "Down")
bg.listen()

#issue
if turt.distance(treasure) < 20: #This line is never executed
    turt.goto(treasure)
    print("You found the treasure!!")

В игре есть еще одна часть, где другая черепаха следует за черепахой пользователя. Когда следующая черепаха достигает (другой) точки на экране, должно произойти другое событие. Опять же, оператор if никогда не срабатывает.

#turtle that follows user character
badturt = turtle.Turtle()

health = 3
b = 5
while turt.distance(badturt) > 0:
    badturt.setheading(badturt.towards(turt))
    badturt.forward(b)

if badturt.distance(-25, 120) < 10:
    health = health - 1
    print("The health is down to", health)
    badturt.goto(0,0)
    b = b + 1

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

1 Ответ

0 голосов
/ 13 марта 2020

Ваша функция никогда не определяется и никогда не вызывается (поскольку она никогда не определяется):

def checkTreasureReached(turtle, treasure, dist):
    if turtle.distance(treasure) < dist:
        turtle.goto(treasure)
        print("You found the treasure!!")

Затем вы должны вызывать эту функцию после движения:

def checkTreasureReached(turtle, treasure, dist):
    #...

#user controls
min_distance = 20

def moveup():
    turt.setheading(90)
    turt.forward(10)
    checkTreasureReached(turtle, treasure, min_distance)

def movedown():
    turt.setheading(270)
    turt.forward(10)
    checkTreasureReached(turtle, treasure, min_distance)

def moveright():
    turt.setheading(0)
    turt.forward(10)
    checkTreasureReached(turtle, treasure, min_distance)

def moveleft():
    turt.setheading(180)
    turt.forward(10)
    checkTreasureReached(turtle, treasure, min_distance)

Или в ваше время л oop:

min_distance = 20
while turt.distance(badturt) > 0:
    badturt.setheading(badturt.towards(turt))
    badturt.forward(b)
    checkTreasureReached(turt, treasure, min_distance)
...