Python全系列 教程
3567个小节阅读:5931.2k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
在游戏开发中,通常把显示图像的对象叫做精灵Spire,精灵需要有两个属性,image要显示的图像,rect图像要显示在屏幕的位置。
在Pygame框架中,使用pygame. sprite模块中的内置函数可以实现碰撞检测。代码如下:
xxxxxxxxxx
pygame.sprite.collide_rect(first, second) #返回布尔值
修改坦克类,增加是否存活状态
xxxxxxxxxx
class Tank:
'''
坦克类
'''
def __init__(self) -> None:
self.live = True
在子弹类中增加我方子弹碰撞敌方坦克的方法,如果发生碰撞,修改我方子弹及敌方坦克live属性的状态值。
xxxxxxxxxx
def hit_enemy_tank(self):
for e_tank in MainGame.enemy_tank_list:
# 判断子弹是否击中坦克
if collide_rect(self,e_tank):
# 修改子弹的状态
self.live = False
e_tank.live = False
在我方子弹移动后判断子弹是否与敌方坦克碰撞。
xxxxxxxxxx
def display_my_bullet(self) -> None:
'''
显示我方子弹
'''
for my_bullet in MainGame.my_bullet_list:
# 判断子弹是否存活
if my_bullet.live:
# 显示我方子弹
my_bullet.display_bullet()
# 移动我方子弹
my_bullet.move()
# 判断我方子弹是否击中敌方坦克
my_bullet.hit_enemy_tank()
else:
# 从列表中移除
MainGame.my_bullet_list.remove(my_bullet)
修改MainGame类敌方坦克显示逻辑,根据敌方坦克是否存活
xxxxxxxxxx
def display_enemy_tank(self) -> None:
'''
显示敌方坦克
'''
for e_tank in self.enemy_tank_list:
# 判断敌方坦克是否存活
if e_tank.live:
# 显示敌方坦克
e_tank.display_tank()
# 移动敌方坦克
e_tank.rand_move()
# 发射子弹
e_bullet = e_tank.shot()
# 判断是否有子弹
if e_bullet:
# 将子弹增加到列表中
MainGame.enemy_bullet_list.append(e_bullet)
else:
# 从列表中移除
self.enemy_tank_list.remove(e_tank)