想请老师帮我看一下,我的子弹为什么打不死敌人!其他的都可以满足
"""
飞机的基类
我方的飞机 敌方的小型飞机 敌方的中型飞机 敌方的大型飞机
"""
import random
import pygame
import constants
from game.bullet import Bullet
class Plane(pygame.sprite.Sprite):
"""
飞机的基础类
"""
# 飞机的图片
plane_images = []
# 飞机爆炸的图片
destroy_images = []
# 坠毁的音乐地址
down_sound_src = None
#飞机的状态: True,活的,False,死的
active = True
# 该飞机发射的子弹精灵组
bullets = pygame.sprite.Group()
def __init__(self,screen ,speed=None):
super().__init__()
self.screen = screen
# 加载静态资源
self._img_list = []
self._destroy_img_list = []
self.down_sound = None
self.load_src()
#飞行的速度
self.speed = speed or 10
# 获取飞机的位置
self.rect = self._img_list[0].get_rect()
# 游戏窗口的宽度和高度
self.width, self.height = self.screen.get_size()
# 飞机的体积计算
self.P_width, self.P_height = self._img_list[0].get_size()
#改变飞机的初始化位置,放在屏幕下方
self.rect.left = int((self.width - self.P_width)/2)
self.rect.top = int(self.height - self.P_height)
def load_src(self):
"""加载静态资源"""
# 飞机图像
for img in self.plane_images:
self._img_list.append(pygame.image.load(img))
# 飞机坠毁的图片
for img in self.destroy_images:
self._destroy_img_list.append(pygame.image.load(img))
#坠毁的音乐
if self.down_sound_src:
self.down_sound = pygame.mixer.Sound(self.down_sound_src)
@property
def image(self):
return self._img_list[0]
def blit_me(self):
self.screen.blit(self.image, self.rect)
def move_up(self):
"""飞机向上移动"""
self.rect.top -= self.speed
def move_down(self):
"""飞机向下移动"""
self.rect.top += self.speed
def move_left(self):
"""飞机向左移动"""
self.rect.left -= self.speed
def move_right(self):
"""飞机向右移动"""
self.rect.left += self.speed
def broken_down(self):
"""飞机坠毁效果"""
#1.播放坠毁音乐
if self.down_sound:
self.down_sound.play()
#2.播放坠毁的动画
for img in self._destroy_img_list:
self.screen.blit(img, self.rect)
#3.坠毁后..
self.active = False
def shoot(self):
"""飞机发射子弹"""
bullet = Bullet(self.screen,self,50)
self.bullets.add(bullet)
class OurPlane(Plane):
"""我方的飞机"""
#飞机的图片
plane_images = [constants.OUR_PALNE_IMG_1,constants.OUR_PALNE_IMG_2]
#飞机爆炸的图片
destroy_images = constants.OUR_DESTROY_IMG_LIST
#坠毁的音乐地址
down_sound_src = None
def update(self,war):
"""更新飞机的动画效果"""
#1. 切换飞机的动画效果
if war.frame % 5:
self.screen.blit(self._img_list[0],self.rect)
else:
self.screen.blit(self._img_list[1],self.rect)
# 飞机撞击检测
rest = pygame.sprite.spritecollide(self,war.enemies,False)
if rest:
#1.游戏结束
war.status = war.OVER
#2.敌方飞机清除
war.enemies.empty()
war.small_enemies.empty()
#3.我方飞机坠毁
self.broken_down()
#4.记录游戏成绩
def move_up(self):
"""向上移动,超出范围之后,不能出屏幕范围"""
super().move_up()
if self.rect.top <= 0:
self.rect.top = 0
def move_down(self):
"""向下移动,超出范围之后,不能出屏幕范围"""
super().move_down()
if self.rect.top >= self.height - int(self.P_height):
self.rect.top = self.height- int(self.P_height)
def move_left(self):
"""向左移动,超出范围之后,不能出屏幕范围"""
super().move_left()
if self.rect.left <= 0:
self.rect.left = 0
def move_right(self):
"""向右移动,超出范围之后,不能出屏幕范围"""
super().move_right()
if self.rect.left >= self.width - int(self.P_width):
self.rect.left = self.width - int(self.P_width)
class SmallEnemyPlane(Plane):
"""敌方的小型飞机"""
# 飞机的图片
plane_images = constants.SMALL_ENEMY_PLANE_IMG
# 飞机爆炸的图片
destroy_images = constants.SMALL_ENEMY_DESTROY_IMG_LIST
# 坠毁的音乐地址
down_sound_src = constants.SMALL_ENEMY_PLANE_DOWN_SOUND
def __init__(self, screen, speed):
super().__init__(screen, speed)
#每次生成一架新的小型飞机的时候,随机的位置出现在屏幕中
#改变飞机的随机位置
self.init_pos()
def init_pos(self):
"""改变飞机的随机位置"""
#屏幕的宽度-飞机的宽度
self.rect.left = random.randint(0,self.width - self.P_width)
# 屏幕之外的随机高度
self.rect.top = random.randint(-5 * self.P_height, -self.P_height)
def update(self, *args):
"""更新飞机的移动"""
super().move_down()
#画在屏幕上
self.blit_me()
# 超出范围后如何处理
# 1. 重用
if self.rect.top >= self.height:
self.active = False
# self.kill()
self.reset()
# todo 2. 多线程,多进程
def reset(self):
""" 重置飞机的状态,达到复用的效果 """
self.active = True
# 屏幕的宽度-飞机的高度
self.init_pos()
def broken_down(self):
"""飞机坠毁效果"""
super().broken_down()
# 重复利用飞机对象
self.reset()
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星