Есть несколько проблем с вашей программой. Во-первых, неверный или сомнительный синтаксис Python:
if XYcord==2 or 4:
wn=turtle.Screen();
Должен быть примерно таким:
if XYcord == 2 or XYcord == 4:
wn = turtle.Screen()
Это эквивалентные методы, и вы должны использовать один или другой, а не оба. И mainloop()
- это метод экрана или функции в пакете 'черепаха', а не метод экземпляра черепахи:
myTurtle.mainloop()
window.exitonclick()
Вместо этого:
window.mainloop()
или :
window.exitonclick()
Переопределение Python встроенных элементов, таких как list
- это плохо идея:
def InsertEnemyturtleintolist(list):
...
list.append(Enemy)
вместо этого:
def InsertEnemyturtleintolist(myEnemiesList):
...
myEnemiesList.append(Enemy)
Наконец, бесконечное l oop, как это не имеет места в управляемом событиями мире, таком как черепаха:
while (True):
нам нужно заменить его на событие таймера . Ниже я переписал ваш код, чтобы решить вышеуказанные проблемы и заставить его работать в основном:
from turtle import Screen, Turtle
from random import randrange
def main():
screen = Screen()
turtle = Turtle()
SetupUser(turtle, screen)
SetupControls(turtle, screen)
RandomAngleGenerator(turtle)
enemies = []
for _ in range(5):
InsertEnemyTurtleIntoList(enemies, turtle)
HitChecker(turtle, screen, enemies)
screen.mainloop()
def SetupUser(myTurtle, myScreen):
myScreen.bgcolor('white')
myScreen.setup(width=400, height=400, startx=100, starty=100)
myTurtle.speed('slow')
myTurtle.shape('turtle')
myTurtle.penup()
def SetupControls(myTurtle, myScreen):
myScreen.onkey(lambda: myTurtle.sety(myTurtle.ycor() + 15), 'w')
myScreen.onkey(lambda: myTurtle.setx(myTurtle.xcor() - 15), 'a')
myScreen.onkey(lambda: myTurtle.setx(myTurtle.xcor() + 15), 'd')
myScreen.onkey(lambda: myTurtle.sety(myTurtle.ycor() - 15), 's')
myScreen.listen()
def HitChecker(myTurtle, myScreen, enemyTurtles):
dead = False
for myEnemy in enemyTurtles:
if myTurtle.distance(myEnemy) <= 10:
print("You lost a life >:^D")
dead = True
break
if dead:
myScreen.onkey(None, 'w')
myScreen.onkey(None, 'a')
myScreen.onkey(None, 'd')
myScreen.onkey(None, 's')
else:
myScreen.ontimer(lambda: HitChecker(myTurtle, myScreen, enemyTurtles), 100)
def InsertEnemyTurtleIntoList(array, myTurtle):
enemy = Turtle()
enemy.hideturtle()
enemy.shape('triangle')
enemy.speed('normal')
enemy.penup()
enemy.left(90)
enemy.showturtle()
while enemy.distance(myTurtle) < 30:
enemy.setposition(randrange(-190, 190), randrange(-190, 190))
array.append(enemy)
def RandomAngleGenerator(myTurtle):
turns = randrange(1, 3)
for _ in range(turns):
myTurtle.left(90)
main()
Я уверен, что он не работает все вы хотите, чтобы это делалось еще , но это должно дать вам работоспособную отправную точку для завершения sh вашей программы.