Я не понимаю, почему вы застряли на том, что мертвые враги исчезают, когда код вообще не запускается из-за этой ошибки:
if player.direction == "up":
AttributeError: 'Turtle' object has no attribute 'direction'
Также вы не могли поразить врага, так как ваш игроки враги не могут двигаться, и игрок не указывает на врага, чтобы начать с.Слишком много магического мышления и недостаточно кода.
Чтобы ответить на ваш вопрос, это не сработает:
for k in enimis:
if bullet.distance(k) < 25:
# ...
del k
# ...
break
Это должно быть либо:
for k in enimis:
if bullet.distance(k) < 25:
# ...
enimis.remove(k) # remove by value
# ...
break
или:
for k in range(len(enimis)):
if bullet.distance(enimis[k]) < 25:
# ...
del enimis[k] # remove by index
# ...
break
Ниже приведен мой полный переписать ваш код, чтобы заставить его играть в основном: игрок может двигаться влево и вправо;пули стреляют, поражают врагов, набирают очки и враги исчезают;оценка показывается на экране;и т. д.
from turtle import Screen, Turtle
BASELINE = -250
FONT = ('Arial', 18, 'bold')
def left():
player.setx(player.xcor() - 5)
def right():
player.setx(player.xcor() + 5)
def shoot():
global firing
firing = True
firing = False
enemies = []
score = 0
bullet = Turtle('triangle')
bullet.hideturtle()
bullet.speed('fastest')
bullet.shapesize(0.5)
bullet.setheading(90)
bullet.penup()
player = Turtle('turtle')
player.hideturtle()
player.speed('fastest')
player.color('green')
player.setheading(90)
player.penup()
player.sety(BASELINE)
player.showturtle()
marker = Turtle()
marker.hideturtle()
marker.penup()
marker.goto(-300, 300)
marker.write("Score: {}".format(score), align='center', font=FONT)
def play():
global firing, score
if not enemies:
screen.tracer(False)
for x in range(-210, 210, 60):
for y in range(100, 260, 60):
enemy = Turtle('turtle')
enemy.color('red')
enemy.setheading(270)
enemy.penup()
enemy.setpos(x, y)
enemies.append(enemy)
screen.tracer(True)
if firing:
bullet.setx(player.xcor())
bullet.sety(BASELINE)
bullet.showturtle()
for p in range(0, 550, 5):
bullet.sety(BASELINE + p)
for enemy in enemies:
if bullet.distance(enemy) < 20:
score += 10
marker.undo()
marker.write("Score: {}".format(score), align='center', font=FONT)
enemy.clear()
enemy.hideturtle()
enemies.remove(enemy)
break
else: # no break
continue
break
bullet.clear()
bullet.hideturtle()
firing = False
screen.ontimer(play, 100)
screen = Screen()
screen.onkey(shoot, 'space')
screen.onkey(left, 'Left')
screen.onkey(right, 'Right')
screen.listen()
play()
screen.mainloop()
По-прежнему необходимо: перемещать врагов влево, вправо и вниз;обеспечение одновременной стрельбы пулями и движением игрока / врага;добавить обратно highscore
;и т. д.