Почему враг не двигается? - PullRequest
0 голосов
/ 20 января 2020

У меня проблема, все работает, кроме случаев, когда противник должен двигаться правильно, и там говорится, что есть строка ошибки, самая последняя строка. Это началось, когда я сделал свою пулю; до этого все работало нормально. Я не знаю, почему он это делает, но я не могу понять это; это странно. Пожалуйста, помогите мне большое спасибо и, пожалуйста, не судите о моей читабельности, потому что я только начал писать code.here файл сообщения "E: \ Code \ Space Invaders.py", строка 106, в врага.setx (x)

 import turtle
 import os

 wn = turtle.Screen()
 wn.bgcolor("black")
 wn.title('Space Invasders')

 border_pen = turtle.Turtle()
 border_pen.speed(0)
 border_pen.color('white')
 border_pen.penup()
 border_pen.setposition(-300,-300)
 border_pen.pendown()
 border_pen.pensize(3)
 for side in range(4):
    border_pen.fd(600)
    border_pen.lt(90)
 border_pen.hideturtle()

 player = turtle.Turtle()
 player.color('blue')
 player.shape('triangle')
 player.penup()
 player.speed(0)
 player.setposition(0, -250)
 player.setheading(90)
 playerspeed = 15

 enemy = turtle.Turtle()
 enemy.color('red')
 enemy.shape('circle')
 enemy.penup()
 enemy.speed(0)
 enemy.setposition(-200, 250)

 enemyspeed = 2

 bullet = turtle.Turtle()
 bullet.color('yellow')
 bullet.shape('triangle')
 bullet.penup()
 bullet.speed(0)
 bullet.setheading(90)
 bullet.shapesize(0.5, 0.5)
 bullet.setposition(player.xcor(), player.ycor() + 10)
 bullet.ht()
 bulletspeed = 20

 player_alive = True

 if enemy.xcor() == player.xcor() and enemy.ycor() == player.ycor():
    player_alive = False


 def fire():

        x = player.xcor()
        y = player.ycor() + 10
        bullet.st()
        bullet.setposition(x, y)

 def right():
    x = player.xcor()
    x += playerspeed
    if x > 280:
        x = 280
    player.setx(x)


 def left():
    x = player.xcor()
    x -= playerspeed
    if x < -280:
        x = - 280
    player.setx(x)


 wn.onkey(left, "Left")
 wn.onkey(right, "Right")
 wn.onkey(fire, "space")
 wn.listen()
 wn.mainloop()

 while player_alive == True:
    x = enemy.xcor()
    x += enemyspeed
    enemy.setx(x) #this line is messed up

1 Ответ

0 голосов
/ 21 января 2020

Это проблема:

wn.mainloop()

while player_alive == True:
    x = enemy.xcor()
    x += enemyspeed
    enemy.setx(x) #this line is messed up

Метод mainloop() должен быть последним вызовом в вашей программе - вызов его переводит обработку события в событие tkinter l oop. Никакой код, следующий за ним, не будет выполняться до тех пор, пока мир черепах не закроется.

Для немедленного исправления, я предлагаю вам переместить ваш mainloop() вызов до тех пор, пока не будет while l oop:

while player_alive:
    x = enemy.xcor()
    x += enemyspeed
    enemy.setx(x)

wn.mainloop()

Для долгосрочного исправления я предлагаю не использовать while l oop, а скорее событие ontimer().

...