#坦克碰撞方法
def tank_hit_tank(self,tank):
print('tank ',tank.live)
if self.live and tank.live:
if collide_rect(self,tank):
self.rect.left = self.old_left
self.rect.top = self.old_top
#我方坦克
if MainGame.my_tank and MainGame.my_tank.live:
MainGame.my_tank.display_tank()
else:
MainGame.my_tank = None
if MainGame.my_tank and MainGame.my_tank.live:
if MainGame.my_tank.remove:
MainGame.my_tank.move()
MainGame.my_tank.tank_hit_wall()
for enemy in MainGame.enemy_tanks:
print("检测我方是否碰撞敌方坦克")
MainGame.my_tank.tank_hit_tank(enemy)
#敌方坦克
def display_enermy_tank(self):
for enemy_tank in self.enemy_tanks:
if enemy_tank.live:
enemy_tank.display_tank()
enemy_tank.rand_move()
enemy_tank.tank_hit_wall()
print("检测敌方是否碰撞我方坦克")
enemy_tank.tank_hit_tank(MainGame.my_tank)
enemy_bullet =enemy_tank.shot()
if enemy_bullet:
MainGame.enemy_bullet_list.append(enemy_bullet)
else:
MainGame.enemy_tanks.remove(enemy_tank)
老师,这节课讲的坦克的碰撞,上面是几段相关代码当我方坦克被击败后,代码报错live不存在,我试了改成if self.live and tank就不报错了,看问题好像出现在我方坦克被击败后,my_tank置为None,所以获取他的live失败,但是不明白,为什么敌方坦克被击败后也删除了,但是敌方坦克都被击败后也不报错。
我模拟写了一段代码:这个结果我也不是很明白,希望帮忙解答
Test:
(a):
.a = a
.live = ():
(.a)
t_list = []
i ():
t = Test(i)
t_list.append(t)
(t_list)
n t_list:
n.prin()
n.live:
()
:
(n)
t_list.remove(n)
(n.live)
(t_list)
F:\python_env\tank_env\Scripts\python.exe F:/python_env/tank_env/test.py
[<__main__.Test object at 0x000001FC6A6B3FA0>, <__main__.Test object at 0x000001FC6A6B1C90>, <__main__.Test object at 0x000001FC6A6B1B40>, <__main__.Test object at 0x000001FC6A6B2AD0>]
0
<__main__.Test object at 0x000001FC6A6B3FA0>
False
2
<__main__.Test object at 0x000001FC6A6B1B40>
False
[<__main__.Test object at 0x000001FC6A6B1C90>, <__main__.Test object at 0x000001FC6A6B2AD0>]
Process finished with exit code 0