Я программирую игру, в которой вражеские черепахи (в программе это называется бадтурт) преследуют черепаху пользователя. Пользователь может заставить свою черепаху атаковать вражеских черепах, отправив атаку (еще одну черепаху).
На 2-м уровне есть две вражеские черепахи, преследующие черепаху пользователя. Чтобы одна вражеская черепаха перестала двигаться (после того, как на нее напали / ударили), я попытался переопределить функцию, которая заставляет двигаться вражескую черепаху, что было сделано внутри другой функции. (Я переопределил его как None)
attack = turtle.Turtle()
#...attributes
def turtleattack():
global lvl
global q
global w
global e
#... positioning attack
for i in range(75):
attack.forward(10)
if lvl == 1:
Chase(badturt)
if lvl == 2:
Chase(badturt)
Chase(badturt2)
if lvl == 3:
Chase(badturt)
Chase(badturt2)
Chase(badturt3)
IfAttackHit()
bg.onkeypress(turtleattack, 'z')
bg.listen()
def Chase(bt): #makes bad turt (bt) chase turt
bt.setheading(bt.towards(turt))
bt.forward(11)
def StopChase(bt):
global lvl
global win
#global Chase <---------------- program stops running if I write it in
if lvl == 1:
#...
if lvl == 2:
def Chase(bt):
None
if q == 2 and w == 2:
lvl = 3
writeinfo()
if lvl == 3:
def Chase(bt):
None
if q == 3 and w == 3 and e == 3:
#... (winning the game)
def ChaseAgain(bt): #makes badturt chase again when it moves onto next lvl
def Chase(bt):
bt.setheading(badturt.towards(turt))
bt.forward(11)
Chase(bt)
def IfAttackHit():
global win
global lvl
global q
global w
global e
if lvl == 1:
if badturt.distance(attack) < 20:
badturt.hideturtle()
attack.hideturtle()
badturt.goto(300,350)
q = 1
StopChase(badturt) #<---- doesn't work
if lvl == 2:
if badturt.distance(attack) < 20:
badturt.hideturtle()
attack.hideturtle()
badturt.goto(300,350)
q = 2
StopChase(badturt)
if badturt2.distance(attack) < 20:
badturt2.hideturtle()
badturt2.goto(-300,350)
attack.hideturtle()
w = 2
StopChase(badturt2)
if lvl == 3:
#same format as lvl 2 but with addition of badturt3
while True:
if lvl == 1:
while True:
CheckDamage()
if turthealth == 0:
LOSE()
break
IfAttackHit()
Chase(badturt)
if q == 1:
break
break
if lvl == 2:
ChaseAgain(badturt) #make it move again
ChaseAgain(badturt2)
badturt.goto(300,350)
badturt.showturtle()
badturt2.showturtle()
while True:
CheckDamage()
if turthealth == 0:
LOSE()
break
IfAttackHit()
Chase(badturt)
Chase(badturt2)
break
if lvl == 3:
#same format as lvl 2 but with addition of badturt3
break
Это не сработало. Было ли это потому, что он был вложен в другую функцию? StopChase () никогда не вызывался? Была ли функция снова переопределена, чтобы вражеская черепаха снова начала двигаться?
Кроме того, мой учитель сказал мне, что мне нужно написать «глобальное преследование», чтобы переопределить его в другой функции, но когда я это сделаю, программа останавливается в этой точке - когда я перемещаю курсор по экрану черепахи, он просто показывает курсор загрузки, и ничего не происходит на экране / он зависает. (Было ли это неправильно, или это проблема с программой python на моем ноутбуке?)
Я также попытался переопределить Chase (), чтобы badturt двигался только вперед 0 (по сути, заставляя это делать) ничего), но это тоже не сработало.
Пожалуйста, дайте мне знать, что я делаю не так, или, если есть другой способ заставить бадтурта перестать двигаться.