12-坦克大战3
2020-05-15 本文已影响0人
痞子_4ae7
坦克大战之实现敌方坦克的随机射击
def shot(self):
num = random.randint(1,1000)
if num <= 20:
return Bullet(self)
坦克大战之我方子弹与敌方坦克的碰撞处理
ef hit_tank(self):
for eTank in MainGame.enemy_tank_list:
result = pygame.sprite.collide_rect(eTank,self)
if result:
self.live = False
eTank.live = False
坦克大战之实现爆炸效果
class Explode(BaseItem):
def __init__(self,rect):
self.images = [
pygame.image.load('img/blast0.gif'),
pygame.image.load('img/blast1.gif'),
pygame.image.load('img/blast2.gif'),
pygame.image.load('img/blast3.gif'),
pygame.image.load('img/blast4.gif'),
pygame.image.load('img/blast5.gif'),
pygame.image.load('img/blast6.gif')
]
self.rect = rect
self.image = self.images[0]
self.live = True
#记录当前图片的索引
self.step = 0
#展示爆炸效果
def display_explode(self):
if self.step < len(self.images):
MainGame.window.blit(self.image,self.rect)
self.image = self.images[self.step]
self.step += 1
else:
self.live = False
self.step = 0
坦克大战之敌方子弹与我方坦克的碰撞
def hit_my_tank(self):
for eBullet in MainGame.enemy_bullet_list:
if MainGame.PI_TANK and MainGame.PI_TANK.live:
result = pygame.sprite.collide_rect(eBullet, MainGame.PI_TANK)
if result:
#创建一个爆炸,加入到爆炸效果列表
explode = Explode(MainGame.PI_TANK.rect)
MainGame.explode_list.append(explode)
# 修改状态
eBullet.live = False
MainGame.PI_TANK.live = False
else:
break
坦克大战之实现墙壁类
class Wall(BaseItem):
def __init__(self,left,top):
self.image = pygame.image.load('img/steels.gif')
self.rect = self.image.get_rect()
self.rect.left = left
self.rect.top = top
def display_wall(self):
# 将墙壁加到窗口中
MainGame.window.blit(self.image,self.rect)
坦克大战之实现子弹不能穿墙
def hit_wall(self):
for wall in MainGame.wall_list:
result = pygame.sprite.collide_rect(wall, self)
if result:
self.live = False
坦克大战之实现坦克不能穿墙
def move(self):
#先记录移动之前的坐标(供还原时用)
self.old_top = self.rect.top
self.old_left = self.rect.left
#修改tank的坐标:取决于坦克的方向
if self.direction == 'U':
if self.rect.top > 0:
self.rect.top -= self.speed
elif self.direction == 'D':
if self.rect.top < MainGame.SCREEN_HEIGHT-self.rect.height:
self.rect.top += self.speed
elif self.direction == 'L':
if self.rect.left > 0:
self.rect.left -= self.speed
elif self.direction == 'R':
if self.rect.left < MainGame.SCREEN_WIDTH-self.rect.width:
self.rect.left += self.speed
# 坦克坐标还原的方法
def stay(self):
self.rect.left = self.old_left
self.rect.top = self.old_top
# 坦克与墙壁的碰撞方法
def hit_wall(self):
for wall in MainGame.wall_list:
result = pygame.sprite.collide_rect(wall,self)
if result:
#碰撞后,调用坐标还原方法
self.stay()
坦克大战之音效处理
class Musice():
def __init__(self,music):
pygame.mixer.init()
self.music = music
pygame.mixer.music.load(self.music)
def play_music(self,count):
pygame.mixer.music.play(count)