分模块来写
每个模块具备它独特的属性和方法
自己飞机模块myplan.py
敌方飞机模块enemy.py
自己飞机发射子弹模块bullet.py
补给包模块supply.py
主要模块 飞机大战
自己飞机模块myplan.py
import pygame
#定义了一个myplane类,给定图片参数和移动方法
class MyPlane(pygame.sprite.Sprite): # 精灵图派生子类
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
self.image1 = pygame.image.load(
"images/me1.png").convert_alpha() # 加载图片
self.image2 = pygame.image.load("images/me2.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([
pygame.image.load("images/me_destroy_1.png").convert_alpha(),
pygame.image.load("images/me_destroy_2.png").convert_alpha(),
pygame.image.load("images/me_destroy_3.png").convert_alpha(),
pygame.image.load("images/me_destroy_4.png").convert_alpha()
])
self.rect = self.image1.get_rect()
self.width, self.height = bg_size[0], bg_size[1] # 给定形参,调用模块时候给实参
self.rect.left, self.rect.top = \
(self.width - self.rect.width) // 2, \
self.height - self.rect.height - 60
self.speed = 10
self.active = True
self.invincible = False
self.mask = pygame.mask.from_surface(self.image1)
# 分别定义moveUp()、moveDown()、moveLeft()和moveRight()控制我方飞机上、下、左、右移动:
def moveUp(self):
if self.rect.top > 0:
self.rect.top -= self.speed
else:
self.rect.top = 0
def moveDown(self):
if self.rect.bottom < self.height - 60:
self.rect.top += self.speed
else:
self.rect.bottom = self.height - 60
def moveLeft(self):
if self.rect.left > 0:
self.rect.left -= self.speed
else:
self.rect.left = 0
def moveRight(self):
if self.rect.right < self.width:
self.rect.left += self.speed
else:
self.rect.right = self.width
def reset(self):
self.rect.left, self.rect.top = \
(self.width - self.rect.width) // 2, \
self.height - self.rect.height - 60
self.active = True
self.invincible = True
敌方飞机模块enemy.py
这里要注意出现的随机性,
import pygame
from random import * # 将随机函数从模块中导入,依旧是
class SmallEnemy(pygame.sprite.Sprite):
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("images/enemy1.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([
pygame.image.load("images/enemy1_down1.png").convert_alpha(),
pygame.image.load("images/enemy1_down2.png").convert_alpha(),
pygame.image.load("images/enemy1_down3.png").convert_alpha(),
pygame.image.load("images/enemy1_down4.png").convert_alpha()
])
self.rect = self.image.get_rect()
self.width, self.height = bg_size[0], bg_size[1]
self.speed = 2
self.active = True
self.rect.left, self.rect.top = \
randint(0, self.width - self.rect.width), \
randint(-5 * self.height, 0)
self.mask = pygame.mask.from_surface(self.image)
def move(self):
if self.rect.top < self.height:
self.rect.top += self.speed
else:
self.reset()
def reset(self):
self.active = True
self.rect.left, self.rect.top = \
randint(0, self.width - self.rect.width), \
randint(-5 * self.height, 0)
class MidEnemy(pygame.sprite.Sprite):
energy = 8
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("images/enemy2.png").convert_alpha()
self.image_hit = pygame.image.load(
"images/enemy2_hit.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([
pygame.image.load("images/enemy2_down1.png").convert_alpha(),
pygame.image.load("images/enemy2_down2.png").convert_alpha(),
pygame.image.load("images/enemy2_down3.png").convert_alpha(),
pygame.image.load("images/enemy2_down4.png").convert_alpha()
])
self.rect = self.image.get_rect()
self.width, self.height = bg_size[0], bg_size[1]
self.speed = 1
self.active = True
self.rect.left, self.rect.top = \
randint(0, self.width - self.rect.width), \
randint(-10 * self.height, -self.height)
self.mask = pygame.mask.from_surface(self.image)
self.energy = MidEnemy.energy
self.hit = False # 先给一个没打中的值,打中则改变
def move(self):
if self.rect.top < self.height:
self.rect.top += self.speed
else:
self.reset()
def reset(self):
self.active = True
self.energy = MidEnemy.energy
self.rect.left, self.rect.top = \
randint(0, self.width - self.rect.width), \
randint(-10 * self.height, -self.height)
class BigEnemy(pygame.sprite.Sprite):
energy = 20
def __init__(self, bg_size):
pygame.sprite.Sprite.__init__(self)
self.image1 = pygame.image.load("images/enemy3_n1.png").convert_alpha()
self.image2 = pygame.image.load("images/enemy3_n2.png").convert_alpha()
self.image_hit = pygame.image.load(
"images/enemy3_hit.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([
pygame.image.load("images/enemy3_down1.png").convert_alpha(),
pygame.image.load("images/enemy3_down2.png").convert_alpha(),
pygame.image.load("images/enemy3_down3.png").convert_alpha(),
pygame.image.load("images/enemy3_down4.png").convert_alpha(),
pygame.image.load("images/enemy3_down5.png").co