建议从python_飞机大战_main_py_一 开始看
import pygame
from bullets import *
# 飞机
class HeroPlane(object):
# 飞机初始化
def __init__(self,scene,hero_life):
# 加载飞机资源
self.image = pygame.image.load("images/plane.png").convert_alpha()
# 缓存主场景对象
self.main_scene = scene
# 飞机矩形
self.rect = self.image.get_rect()
# 飞机矩形起始点, rect[2] 120 是英雄飞机的宽rect[3]是 79 是英雄飞机的高
self.rect[0] = self.main_scene.size[0] / 2 - self.rect[2] / 2
self.rect[1] = self.main_scene.size[1] - self.rect[3] * 2
# 飞机子弹列表
self.bullets = [Bullet(self.main_scene)for _ in range(1,30)]
# 飞机速度
self.speed = 2
self.visible = True
#飞机移动:
self.center = float(self.rect.centerx)
self.bottom = float(self.rect.bottom)
self.moving_right = False
self.moving_left = False
self.moving_up = False
self.moving_down = False
#飞机生命
self.jiange = 0
self.herolife = hero_life
self.life_image = pygame.image.load("images/plane_life.png").convert_alpha()
self.life_rect = self.life_image.get_rect()
#更新飞机
def moving(self):
if self.moving_right and self.rect.right < self.main_scene.size[0]:
self.center += self.speed
if self.moving_left and self.rect.left > 0:
self.center -= self.speed
if self.moving_up and self.rect.top > 0:
self.bottom -= self.speed
if self.moving_down and self.rect.bottom < self.main_scene.size[1]:
self.bottom += self.speed
self.rect.centerx = self.center
self.rect.bottom = self.bottom
# 获得飞机 self.mImage = pygame.image.load("./res/bullet_11.png")矩形
def rect(self):
return self.rect
# 发子弹
def shot(self):
if self.visible:
posx = self.rect[0]-5
# 发射子弹
wait_for_shot = []
# 如果子弹的visible为false,说明子弹尚未发射
for bullet in self.bullets:
# 如果子弹不可见,说明子弹闲置状态
if not bullet.visible:
wait_for_shot.append(bullet)
if len(wait_for_shot) >= 1:
break
# 依次设置选择子弹的初始位置,并将其设置为发射状态、移动速度
for bullet in wait_for_shot:
bullet.visible = True
bullet.set_speed(5)
#bullet.set_pos(posx + 5, self.rect[1] - self.rect[3] / 2)
bullet.set_pos(posx,self.rect[1]-self.rect[3]-5)
# 飞机绘制
def draw(self):
if self.visible and self.herolife >= 0:
self.main_scene.scene.blit(self.image, (self.rect[0], self.rect[1]))
self.hero_lifes()
# 飞机生命数绘制
def hero_lifes(self):
for number in range(self.herolife):
#排列飞机生命 间隔 生命 飞机一半的宽度
self.life_rect[0] = 10 + number* 70
self.main_scene.scene.blit(self.life_image,((452-self.life_rect[0]),10))