Mengapa musuh tidak bergerak?

Saya punya masalah semuanya berfungsi kecuali ketika musuh seharusnya bergerak ke kanan dikatakan ada kesalahan pada baris, baris terakhir. Itu dimulai ketika saya membuat peluru; sebelum itu semuanya bekerja dengan baik. Saya tidak tahu kenapa dia melakukannya, tapi saya tidak bisa memahaminya; itu aneh. Tolong bantu terima kasih banyak dan tolong jangan menilai keterbacaan saya karena saya baru saja mulai menulis kode. Ini pesan File "E:\Code\Space Invaders.py", baris 106, di musuh.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

person Jonah.Jackson    schedule 20.01.2020    source sumber
comment
Apa yang terjadi jika x = - 280 diubah menjadi x = -280? Tidak yakin mengapa Anda memiliki ruang di sana   -  person KILLtheWEEZEL    schedule 20.01.2020
comment
beri komentar pada baris yang dikeluhkannya dan berikan kami pesan kesalahan yang sebenarnya   -  person hkBst    schedule 20.01.2020
comment
saya tidak dapat mereproduksi perilaku yang dijelaskan. Bisakah Anda memposting pesan kesalahan lengkap?   -  person YFrog    schedule 20.01.2020
comment
@KILLtheWEEZEL Meskipun x = - 5 tidak boleh memiliki spasi antara - dan 5, menurut pola pengkodean standar, saya yakin secara teknis boleh saja melakukannya. Membuka REPL python online menunjukkan bahwa ini bukan kesalahan yang dijamin - setidaknya beberapa kompiler menerimanya, dan saya berharap sebagian besar menerimanya. OP perlu menyertakan pesan kesalahan persis, dan juga harus menambahkan kalimat tambahan yang menunjukkan baris kode persis yang direferensikan, dengan baris tersebut diduplikasi sebagai blok kode baris tunggal.   -  person SherylHohman    schedule 21.01.2020
comment
Saya menghitung baris dan menemukan baris 75 menjadi player.setx(x) di blok kode def left():. Apakah ini benar?   -  person SherylHohman    schedule 21.01.2020
comment
BTW Space Invaders salah eja;)   -  person SherylHohman    schedule 21.01.2020
comment
aku salah mengartikan SherylHohman   -  person Jonah.Jackson    schedule 21.01.2020


Jawaban (1)


Ini adalah sebuah masalah:

wn.mainloop()

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

Metode mainloop() harus menjadi panggilan terakhir dalam program Anda -- pemanggilannya akan mengalihkan penanganan peristiwa ke loop peristiwa tkinter. Tidak ada kode yang mengikutinya yang akan dieksekusi hingga dunia penyu ditutup.

Untuk perbaikan segera, saya sarankan Anda memindahkan panggilan mainloop() Anda hingga setelah putaran while Anda:

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

wn.mainloop()

Untuk perbaikan jangka panjang, saya sarankan Anda tidak menggunakan loop while melainkan acara ontimer().

person cdlane    schedule 21.01.2020