turtle.xcor() работает для определенных объектов turtle, а не для других

#python

#python

Вопрос:

Итак, я довольно новичок в python, и я использую turtle. Я хочу создать базовую игру, в которой вы просто заставляете персонажа переходить с одной стороны на другую, используя координаты x (координаты y не имеют значения, поскольку есть стены, которые мешают вам дойти до точки, где вы проходите цель и все равно выигрываете), мой код в основном таков, что если вы проходите мимо цели.xcor() цели выдает сообщение «вы выиграли», я получил систему координат, работающую для стен, но она не работает для цели.

 import turtle as Turtle

Window = Turtle.Screen()
Window.title("Game")
Window.bgcolor("grey")
Window.setup(width=800, height=600)
Window.tracer(0)

Instructions = Turtle.Turtle()
Instructions.speed(0)
Instructions.color("black")
Instructions.penup()
Instructions.hideturtle()
Instructions.goto(100,300)
Instructions.write("Get to the Objective, do not touch the walls.", align="center", font=("Courier", 24, "normal"))

Player = Turtle.Turtle()
Player.speed(0)
Player.shape("square")
Player.color("black", "white")
Player.penup()
Player.goto(0, 0)
Player.shapesize(stretch_wid=5, stretch_len=5)

Objective = Turtle.Turtle()
Objective.speed(0)
Objective.shape("square")
Objective.color("black", "lightgreen")
Objective.penup()
Objective.goto(900, 0)
Objective.shapesize(stretch_wid=5, stretch_len=5)

Obstacle = Turtle.Turtle()
Obstacle.speed(0)
Obstacle.shape("square")
Obstacle.color("black", "darkgrey")
Obstacle.penup()
Obstacle.goto(450, -120)
Obstacle.shapesize(stretch_wid=2, stretch_len=50)

Obstacle2 = Turtle.Turtle()
Obstacle2.speed(0)
Obstacle2.shape("square")
Obstacle2.color("black", "darkgrey")
Obstacle2.penup()
Obstacle2.goto(450, 120)
Obstacle2.shapesize(stretch_wid=2, stretch_len=50)

Obstacle3 = Turtle.Turtle()
Obstacle3.speed(0)
Obstacle3.shape("square")
Obstacle3.color("black", "darkgrey")
Obstacle3.penup()
Obstacle3.goto(-80, 0)
Obstacle3.shapesize(stretch_wid=14, stretch_len=2,)

Obstacle4 = Turtle.Turtle()
Obstacle4.speed(0)
Obstacle4.shape("square")
Obstacle4.color("black", "darkgrey")
Obstacle4.penup()
Obstacle4.goto(980, 0)
Obstacle4.shapesize(stretch_wid=14, stretch_len=2,)


def PlayerForward():
    if Player.ycor() > -40 and Player.ycor() < 40 and Player.xcor() > -1:
        Player.forward(10)
    else:
        Turtle.setpos(0, -180)
        Turtle.write("you touched the wall", font="arial")
        Turtle.hideturtle()


def PlayerBackward():
    if Player.ycor() > -40 and Player.ycor() < 40 and Player.xcor() > -1:
        Player.backward(10)
    else:
        Turtle.setpos(0, -180)
        Turtle.write("you touched the wall", font="arial")
        Turtle.hideturtle()


def PlayerRight():
    if Player.ycor() > -40 and Player.ycor() < 40 and Player.xcor() > -1:
        Player.right(10)
    else:
        Turtle.setpos(0, -180)
        Turtle.write("you touched the wall", font="arial")
        Turtle.hideturtle()


def PlayerLeft():
    if Player.ycor() > -40 and Player.ycor() < 40 and Player.xcor() > -1:
        Player.left(10)
    else:
        Turtle.setpos(0, -180)
        Turtle.write("you touched the wall", font="arial")
        Turtle.hideturtle()

#this is the part that doesn't work, I've tried if player.xcor() > 800 ( around where it should touch Objective, haven't got the coordinates down exact as even if you went out of bounds way beyond the coords, it still wont work as this never worked either )
if Player.distance(Objective) < 10:
    Turtle.write("You got to the objective, congrats.", font="arial")
    Turtle.hideturtle()


Turtle.listen()
Turtle.onkeypress(PlayerForward, "w")
Turtle.onkeypress(PlayerBackward, "s")
Turtle.onkeypress(PlayerRight, "d")
Turtle.onkeypress(PlayerLeft, "a")

while True:
    Window.update()
 

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

1. Ваш if оператор выполняется только один раз, в начале вашей программы. Попробуйте переместить его внутри while цикла.

Ответ №1:

Вам нужно добавить код, чтобы проверять, достигнута ли цель при каждом перемещении.

Для этого создайте новую функцию, назовем ее checkObjective .

 def checkObjective():
  if Player.distance(Objective) < 10:
    Turtle.write("You got to the objective, congrats.", font="arial")
    Turtle.hideturtle()
 

Теперь вызывайте его каждый раз, когда выполняется перемещение, например, при движении вперед.

 def PlayerForward():
    if Player.ycor() > -40 and Player.ycor() < 40 and Player.xcor() > -1:
        Player.forward(10)
        checkObjective()
    else:
        Turtle.setpos(0, -180)
        Turtle.write("you touched the wall", font="arial")
        Turtle.hideturtle()