赞
踩
添加显示子弹
- class Bullet:
- '''
- 子弹类
- '''
- def display_bullet(self) -> None:
- '''
- 显示子弹
- '''
- MainGame.window.blit(self.image,self.rect)
按空格键产生子弹,并将子弹添加到子弹列表中
- class MainGame:
- '''
- 游戏主窗口类
- '''
- # 游戏主窗口对象
- window =None
- # 设置我放坦克
- my_tank = None
- # 存储敌方坦克的列表
- enemy_tank_list = []
- # 设置敌方坦克的数量
- enemy_tank_count = 6
- # 存储我方子弹的列表
- my_bullet_list = []
- def get_event(self) -> None:
- '''
- 获取事件
- '''
- # 获取所有事件
- event_list = pygame.event.get()
- # 遍历事件
- for event in event_list:
- # 判断是什么事件,然后做出相应的处理
- if event.type == pygame.QUIT:
- # 点击关闭按钮
- self.end_game()
- if event.type == pygame.KEYDOWN:
- # 按下键盘
- if event.key == pygame.K_LEFT:
- print('坦克向左移动')
- # 修改方向
- MainGame.my_tank.direction = 'L'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_RIGHT:
- print('坦克向右移动')
- # 修改方向
- MainGame.my_tank.direction = 'R'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_UP:
- print('坦克向上移动')
- # 修改方向
- MainGame.my_tank.direction = 'U'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_DOWN:
- # 修改方向
- MainGame.my_tank.direction = 'D'
- print('坦克向下移动')
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_SPACE:
- # 发射子弹
- print('发射子弹')
- # 创建子弹
- m_bullet = Bullet(MainGame.my_tank)
- # 将子弹添加到列表中
- MainGame.my_bullet_list.append(m_bullet)
-
-
- if event.type == pygame.KEYUP and event.key in (pygame.K_LEFT,pygame.K_RIGHT,pygame.K_UP,pygame.K_DOWN):
- # 修改坦克移动的状态
- MainGame.my_tank.remove = False
-
-
将子弹添加到窗口
- def start_game(self) -> None:
- '''
- 开始游戏
- '''
- # 初始化游戏窗口
- pygame.display.init()
- # 创建一个窗口
- MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
- # 设置窗口标题
- pygame.display.set_caption('坦克大战1.0')
- # 创建一个我方 坦克
- MainGame.my_tank = MyTank(350,200)
- # 创建敌方坦克
- self.create_enemy_tank()
- # 刷新窗口
- while True:
- sleep(0.02)
- # 给窗口设置填充色
- MainGame.window.fill(BG_COLOR)
- # 增加提示文字
- # 1.要增加文字内容
- # num = 6
- text = self.get_text_surface(f'敌方坦克剩余数量{MainGame.enemy_tank_count}')
- # 2.如何把文字加上
- MainGame.window.blit(text,(10,10))
- # 增加事件
- self.get_event()
- # 显示 我方坦克
- MainGame.my_tank.display_tank()
- # 显示敌方坦克
- self.display_enemy_tank()
- # 移动坦克
- if MainGame.my_tank.remove:
- MainGame.my_tank.move()
- # 显示我方子弹
- self.display_my_bullet()
- pygame.display.update()
- #子弹的移动方法
- def move(self) -> None:
- '''
- 子弹的移动
- '''
- # 根据子弹生成的方向来的移动
- if self.direction == "L":
- # 判断子弹是否超出屏幕
- if self.rect.left > 0:
- self.rect.left -= self.speed
- elif self.direction == "R":
- # 判断子弹是否超出屏幕
- if self.rect.left + self.rect.width < SCREEN_WIDTH:
- self.rect.left += self.speed
- elif self.direction == "U":
- # 判断子弹是否超出屏幕
- if self.rect.top > 0:
- self.rect.top -= self.speed
- elif self.direction == "D":
- # 判断子弹是否超出屏幕
- if self.rect.top + self.rect.height < SCREEN_HEIGHT:
- self.rect.top += self.speed
修改MainGame类,显示子弹方法
- def display_my_bullet(self) -> None:
- '''
- 显示我方子弹
- '''
- for my_bullet in MainGame.my_bullet_list:
- # 显示我方子弹
- my_bullet.display_bullet()
- # 移动我方子弹
- my_bullet.move()
修改子弹类,创建live属性,与根据移动位置修改live状态
- class Bullet:
- '''
- 子弹类
- '''
- def __init__(self,tank) -> None:
- # 设置子弹的状态
- self.live = True
-
-
- def move(self) -> None:
- '''
- 子弹的移动
- '''
- # 根据子弹生成的方向来的移动
- if self.direction == "L":
- # 判断子弹是否超出屏幕
- if self.rect.left > 0:
- self.rect.left -= self.speed
- else:
- self.live = False
- elif self.direction == "R":
- # 判断子弹是否超出屏幕
- if self.rect.left + self.rect.width < SCREEN_WIDTH:
- self.rect.left += self.speed
- else:
- self.live = False
- elif self.direction == "U":
- # 判断子弹是否超出屏幕
- if self.rect.top > 0:
- self.rect.top -= self.speed
- else:
- self.live = False
- elif self.direction == "D":
- # 判断子弹是否超出屏幕
- if self.rect.top + self.rect.height < SCREEN_HEIGHT:
- self.rect.top += self.speed
- else:
- self.live = False
修改MainGame类,修改显示子弹类,与事件监听
- 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()
- else:
- # 从列表中移除
- MainGame.my_bullet_list.remove(my_bullet)
-
-
- def get_event(self) -> None:
- '''
- 获取事件
- '''
- # 获取所有事件
- event_list = pygame.event.get()
- # 遍历事件
- for event in event_list:
- # 判断是什么事件,然后做出相应的处理
- if event.type == pygame.QUIT:
- # 点击关闭按钮
- self.end_game()
- if event.type == pygame.KEYDOWN:
- # 按下键盘
- if event.key == pygame.K_LEFT:
- print('坦克向左移动')
- # 修改方向
- MainGame.my_tank.direction = 'L'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_RIGHT:
- print('坦克向右移动')
- # 修改方向
- MainGame.my_tank.direction = 'R'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_UP:
- print('坦克向上移动')
- # 修改方向
- MainGame.my_tank.direction = 'U'
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_DOWN:
- # 修改方向
- MainGame.my_tank.direction = 'D'
- print('坦克向下移动')
- # 修改坦克移动的状态
- MainGame.my_tank.remove = True
- elif event.key == pygame.K_SPACE:
- # 判断子弹是否上限
- if len(MainGame.my_bullet_list) < 5:
- # 发射子弹
- print('发射子弹')
- # 创建子弹
- m_bullet = Bullet(MainGame.my_tank)
- # 将子弹添加到列表中
- MainGame.my_bullet_list.append(m_bullet)
-
-
- if event.type == pygame.KEYUP and event.key in (pygame.K_LEFT,pygame.K_RIGHT,pygame.K_UP,pygame.K_DOWN):
- # 修改坦克移动的状态
- MainGame.my_tank.remove = False
-
-
实现发射子弹方法
- def shot(self):
- '''
- 敌方坦克的射击
- '''
- num = random.randint(1,100)
- if num < 5:
- return Bullet(self)
敌方坦克加入窗口后,发射子弹,并将子弹添加到敌方子弹列表中
- #将敌方坦克加入到窗口中
- def display_enemy_tank(self) -> None:
- '''
- 显示敌方坦克
- '''
- for e_tank in self.enemy_tank_list:
- # 显示敌方坦克
- e_tank.display_tank()
- # 移动敌方坦克
- e_tank.rand_move()
- # 发射子弹
- e_bullet = e_tank.shot()
- # 判断是否有子弹
- if e_bullet:
- # 将子弹增加到列表中
- MainGame.enemy_bullet_list.append(e_bullet)
将敌方发射的子弹添加到窗口
- def start_game(self) -> None:
- '''
- 开始游戏
- '''
- # 初始化游戏窗口
- pygame.display.init()
- # 创建一个窗口
- MainGame.window = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
- # 设置窗口标题
- pygame.display.set_caption('坦克大战1.0')
- # 创建一个我方 坦克
- MainGame.my_tank = MyTank(350,200)
- # 创建敌方坦克
- self.create_enemy_tank()
- # 刷新窗口
- while True:
- sleep(0.02)
- # 给窗口设置填充色
- MainGame.window.fill(BG_COLOR)
- # 增加提示文字
- # 1.要增加文字内容
- # num = 6
- text = self.get_text_surface(f'敌方坦克剩余数量{MainGame.enemy_tank_count}')
- # 2.如何把文字加上
- MainGame.window.blit(text,(10,10))
- # 增加事件
- self.get_event()
- # 显示 我方坦克
- MainGame.my_tank.display_tank()
- # 显示敌方坦克
- self.display_enemy_tank()
- # 移动坦克
- if MainGame.my_tank.remove:
- MainGame.my_tank.move()
- # 显示我方子弹
- self.display_my_bullet()
- # 显示敌方子弹
- self.display_enemy_bullet()
- pygame.display.update()
在游戏开发中,通常把显示图像的对象叫做精灵Spire,精灵需要有两个属性,image要显示的图像,rect图像要显示在屏幕的位置。
在Pygame框架中,使用pygame. sprite模块中的内置函数可以实现碰撞检测。代码如下:
pygame.sprite.collide_rect(first, second) #返回布尔值
修改坦克类,增加是否存活状态
- class Tank:
- '''
- 坦克类
- '''
- def __init__(self) -> None:
- self.live = True
在子弹类中增加我方子弹碰撞敌方坦克的方法,如果发生碰撞,修改我方子弹及敌方坦克live属性的状态值。
- 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
在我方子弹移动后判断子弹是否与敌方坦克碰撞。
- 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类敌方坦克显示逻辑,根据敌方坦克是否存活
- 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)
初始化爆炸类
- def __init__(self,tank:Tank) -> None:
- # 加载爆炸效果的图片
- 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'),
- ]
- # 设置爆炸效果的位置
- self.rect = tank.rect
- # 设置爆炸效果的索引
- self.step = 0
- # 获取需要渲染的图像
- self.image = self.images[self.step]
- # 设置爆炸的状态
- self.live = True
展示爆炸效果。
- def display_explode(self) -> None:
- '''
- 显示爆炸效果
- '''
- # 判断当前爆照的效果是否播放完毕
- if self.step < len(self.images):
- # 获取当前爆炸效果的图像
- self.image = self.images[self.step]
- # 获取下一张爆炸效果的图像的索引
- self.step += 1
- # 绘制爆炸效果
- MainGame.window.blit(self.image,self.rect)
- else:
- # 初始化爆炸效果的索引
- self.step = 0
- # 设置爆炸效果的状态,代表爆炸过了
- self.live = False
在我方子弹碰撞敌方坦克的方法中,如果检测到碰撞,产生爆炸类,并将爆炸效果添加到爆炸列表。
- def hit_enemy_tank(self):
- for e_tank in MainGame.enemy_tank_list:
- # 判断子弹是否击中坦克
- if collide_rect(self,e_tank):
- # 爆炸效果
- explode = Explode(e_tank)
- MainGame.explode_list.append(explode)
- # 修改子弹的状态
- self.live = False
- e_tank.live = False
将爆炸效果添加到窗口。
- #新增方法: 展示爆炸效果列表
-
-
- def display_explode(self) -> None:
- '''
- 显示爆炸效果
- '''
- for explode in MainGame.explode_list:
- # 判断是否活着
- if explode.live:
- # 显示爆炸效果
- explode.display_explode()
- else:
- # 从列表中移除
- MainGame.explode_list.remove(explode)
子弹类中,新增敌方子弹与我方坦克的碰撞。如果发生碰撞,修改敌方子弹、我方坦克的状态及产生爆炸效果。
- #新增敌方子弹与我方坦克的碰撞方法
- def hit_my_tank(self):
- # 判断我方坦克是否活着
- if MainGame.my_tank and MainGame.my_tank.live:
- # 判断字段是否击中我方坦克
- if collide_rect(self,MainGame.my_tank):
- # 爆炸效果
- explode = Explode(MainGame.my_tank)
- MainGame.explode_list.append(explode)
- # 修改子弹的状态
- self.live = False
- MainGame.my_tank.live = False
添加敌方子弹到窗口中时候,如果子弹还活着,显示子弹、调用子弹移动并判断敌方子弹是否与我方坦克发生碰撞。
- #将敌方子弹加入到窗口中
- 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)
坦克大战游戏中一般我方坦克有重生的功能,当按下键盘的Esc键时候,让我方坦克重生。重生指的就是重新创建我方坦克。
- def create_my_tank(self) -> None:
- '''
- 创建我方坦克
- '''
- MainGame.my_tank = MyTank(350,200)
- #获取事件
- def getEvent(self):
- #获取所有事件
- eventList= pygame.event.get()
- #遍历事件
- for event in event_list:
- if event.type == pygame.KEYDOWN:
- # 如果我方坦克死亡,按下esc键,重新生成我方坦克
- if not MainGame.my_tank and event.key == pygame.K_ESCAPE:
- print('重新生成我方坦克')
- # 按下esc键,重新生成我方坦克
- self.create_my_tank()
初始化墙壁类
- class Wall:
- '''
- 墙壁类
- '''
- def __init__(self,left,top) -> None:
- # 加载图片
- 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) -> None:
- '''
- 显示墙壁
- '''
- MainGame.window.blit(self.image,self.rect)
创建墙壁
- def create_wall(self) -> None:
- '''
- 创建墙壁
- '''
- top = 200
- for i in range(6):
- # 创建墙壁
- wall = Wall(i*128,top)
- # 添加到墙壁列表中
- MainGame.wall_list.append(wall)
墙壁加入到窗口
- def display_wall(self) -> None:
- '''
- 显示墙壁
- '''
- for wall in MainGame.wall_list:
- # 显示墙壁
- wall.display_wall()
子弹不能穿墙指子弹碰到墙壁后消失。因此,子弹类中新增方法,子弹与墙壁的碰撞,如果子弹与墙壁碰撞,修改子弹的状态。另外还需要将墙壁的生命值减少,如果墙壁的生命值小于等于零时候修改墙壁的状态。
- #新增子弹与墙壁的碰撞
- def hit_wall(self):
- '''
- 碰撞墙壁
- '''
- for wall in MainGame.wall_list:
- # 判断是否碰撞
- if collide_rect(self,wall):
- # 修改子弹的状态
- self.live = False
设置我方与敌方坦克子弹移动时,增加碰撞检测
- def display_enemy_bullet(self) -> None:
- '''
- 显示敌方子弹
- '''
- for e_bullet in MainGame.enemy_bullet_list:
- # 显示子弹
- if e_bullet.live:
- # 如果子弹存活,显示子弹
- e_bullet.display_bullet()
- e_bullet.move()
- # 判断是否击中我方坦克
- e_bullet.hit_my_tank()
- # 判断是否击中墙壁
- e_bullet.hit_wall()
- else:
- # 如果子弹不存活,从列表中移除
- MainGame.enemy_bullet_list.remove(e_bullet)
- 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()
- # 判断我方子弹是否击中墙壁
- my_bullet.hit_wall()
- else:
- # 从列表中移除
- MainGame.my_bullet_list.remove(my_bullet)
设置墙壁生命值与存活状态
- class Wall:
- '''
- 墙壁类
- '''
- def __init__(self,left,top) -> None:
- # 加载图片
- self.image = pygame.image.load('./img/steels.gif')
- # 获取墙壁的图形
- self.rect = self.image.get_rect()
- # 设置墙壁的位置
- self.rect.left = left
- self.rect.top = top
- # 设置墙壁的生命值
- self.hp = 3
- # 设置墙壁的状态
- self.live = True
修改子弹碰撞墙壁逻辑
- class Bullet:
- '''
- 子弹类
- '''
- def hit_wall(self):
- '''
- 碰撞墙壁
- '''
- for wall in MainGame.wall_list:
- # 判断是否碰撞
- if collide_rect(self,wall):
- # 修改子弹的状态
- self.live = False
- # 修改墙壁的生命值
- wall.hp -= 1
- # 判断墙壁是否依然显示
- if wall.hp <= 0:
- wall.live = False
修改显示墙壁逻辑
- def display_wall(self) -> None:
- '''
- 显示墙壁
- '''
- for wall in MainGame.wall_list:
- if wall.live:
- # 显示墙壁
- wall.display_wall()
- else:
- # 从列表中移除
- MainGame.wall_list.remove(wall)
坦克不能穿墙指坦克一旦碰到墙壁则不能再移动,也就是需要修改坦克的坐标为移动之前的。因此在坦克类中新增属性oldLeft、oldTop记录移动之前的坐标,新增stay()、hitWalls()方法。
- class Tank:
- '''
- 坦克类
- '''
- def __init__(self) -> None:
- self.live = True
- # 记录坦克原来的位置
- self.old_left = 0
- self.old_top = 0
- def move(self) -> None:
- '''
- 坦克的移动
- '''
- # 记录坦克原来的位置,为了方便还原碰撞后的位置
- self.old_left = self.rect.left
- self.old_top = self.rect.top
- if self.direction == "L":
- # 判断坦克的位置是否已左边界
- if self.rect.left > 0:
- # 修改坦克的位置 离左边的距离 - 操作
- self.rect.left = self.rect.left - self.speed
- elif self.direction == "R":
- # 判断坦克的位置是否已右边界
- if self.rect.left + self.rect.width < SCREEN_WIDTH:
- # 修改坦克的位置 离左边的距离 + 操作
- self.rect.left = self.rect.left + self.speed
- elif self.direction == "U":
- # 判断坦克的位置是否已上边界
- if self.rect.top > 0:
- # 修改坦克的位置 离上边的距离 - 操作
- self.rect.top = self.rect.top - self.speed
- elif self.direction == "D":
- # 判断坦克的位置是否已下边界
- if self.rect.top + self.rect.height < SCREEN_HEIGHT:
- # 修改坦克的位置 离上边的距离 + 操作
- self.rect.top = self.rect.top + self.speed
-
-
- def tank_hit_wall(self) -> None:
- '''
- 坦克和墙壁的碰撞
- '''
- for wall in MainGame.wall_list:
- # 检测当前坦克是否能和墙壁发生碰撞
- if pygame.sprite.collide_rect(self,wall):
- # 将位置还原到碰撞前的位置
- self.rect.left = self.old_left
- self.rect.top = self.old_top
坦克移动时,检测是否碰撞
- 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_tank.tank_hit_wall()
- # 发射子弹
- e_bullet = e_tank.shot()
- # 判断是否有子弹
- if e_bullet:
- # 将子弹增加到列表中
- MainGame.enemy_bullet_list.append(e_bullet)
- else:
- # 从列表中移除
- self.enemy_tank_list.remove(e_tank)
- # 判断我方坦克是否死亡
- if MainGame.my_tank and MainGame.my_tank.live:
- # 移动坦克
- if MainGame.my_tank.remove:
- MainGame.my_tank.move()
- # 检测我方坦克是否与墙壁发生碰撞
- MainGame.my_tank.tank_hit_wall()
如果我方坦克碰撞到敌方坦克,则我方坦克再不能继续移动。同理如果敌方坦克碰撞到我方坦克也不能继续移动。
在坦克类中新增坦克与坦克碰撞的检测方法
- class Tank:
- def tank_collide_tank(self,tank):
- '''
- 检测2个坦克是否碰撞
- '''
- # 判断是否都存活
- if self.live and tank.live:
- if pygame.sprite.collide_rect(self,tank):
- # 将位置还原到碰撞前的位置
- self.rect.left = self.old_left
- self.rect.top = self.old_top
我方坦克移动后,调用是否与敌方坦克发生碰撞。
- #根据坦克的开关状态调用坦克的移动方法
- if MainGame.TANK_P1 and not MainGame.TANK_P1.stop:
- MainGame.TANK_P1.move()
- #调用碰撞墙壁的方法
- MainGame.TANK_P1.hitWalls()
- MainGame.TANK_P1.hitEnemyTank()
在敌方坦克类中,新增敌方坦克碰撞我方坦克的方法。
- def hitMyTank(self):
- if MainGame.TANK_P1 and MainGame.TANK_P1.live:
- if pygame.sprite.collide_rect(self, MainGame.TANK_P1):
- # 让敌方坦克停下来 stay()
- self.stay()
敌方坦克添加到窗口时候,调用是否与我方坦克碰撞。
- #将敌方坦克加入到窗口中
- def blitEnemyTank(self):
- for eTank in MainGame.EnemyTank_list:
- if eTank.live:
- eTank.displayTank()
- # 坦克移动的方法
- eTank.randMove()
- #调用敌方坦克与墙壁的碰撞方法
- eTank.hitWalls()
- #敌方坦克是否撞到我方坦克
- eTank.hitMyTank()
- # 调用敌方坦克的射击
- eBullet = eTank.shot()
- # 如果子弹为None。不加入到列表
- if eBullet:
- # 将子弹存储敌方子弹列表
- MainGame.Enemy_bullet_list.append(eBullet)
- else:
- MainGame.EnemyTank_list.remove(eTank)
music是pygame中控制流音频的pygame模块,音乐模块与pygame.mixer紧密相连, pygame.mixer是一个用来处理声音的模块,其含义为“混音器”。游戏中对声音的处理一般包括制造声音和播放声音两部分。
初始化混合器
pygame.mixer.init()
加载一个播放音乐的文件
pygame.mixer.music.load()
开始播放音乐流
pygame.mixer.music.play()
初始化音效类
- class Music():
- def __init__(self,fileName):
- self.fileName = fileName
- #先初始化混合器
- pygame.mixer.init()
- pygame.mixer.music.load(self.fileName)
- #开始播放音乐
- def play(self):
- pygame.mixer.music.play()
创建坦克时,添加音效。
- #创建我方坦克的方法
- def creatMyTank(self):
- # 创建我方坦克
- MainGame.TANK_P1 = MyTank(400, 300)
- #创建音乐对象
- music = Music('img/start.wav')
- #调用播放音乐方法
- music.play()
我方坦克发射子弹时,添加音效。
- elif event.key == pygame.K_SPACE:
- print("发射子弹")
- if len(MainGame.Bullet_list) < 3:
- # 产生一颗子弹
- m = Bullet(MainGame.TANK_P1)
- # 将子弹加入到子弹列表
- MainGame.Bullet_list.append(m)
- music = Music('img/fire.wav')
- music.play()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。