飞机大战游戏设计
1、代码框架
2、每个类及函数的作用
1.子弹类
其中函数__init__()定义子弹的属性:形状图片、位置、移动速度。函数move()定义子弹移动位置。
# 子弹类
class Bullet(pygame.sprite.Sprite):
def __init__(self, bullet_img, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = bullet_img
self.rect = self.image.get_rect()
self.rect.midbottom = init_pos
self.speed = 10
def move(self):
self.rect.top -= self.speed
2.玩家飞机类
其中函数__init__()定义了玩家飞机类的基本属性,对其进行初始化。函数shoot()定义如何发射子弹,调用Bullet类,传递子弹的形状图片以及初始位置。函数moveUP()、moveDOWN()、moveLEFT()、moveRIGHT()分别定义了飞机向上、向下、向左、向右移动,并控制移动的边界,超出边界时不能再移动,防止飞机跑出界面。
# 玩家飞机类
class Player(pygame.sprite.Sprite):
def __init__(self, plane_img, player_rect, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = [] # 用来存储玩家飞机图片的列表
for i in range(len(player_rect)):
self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())
self.rect = player_rect[0] # 初始化图片所在的矩形
self.rect.topleft = init_pos # 初始化矩形的左上角坐标
self.speed = 8 # 初始化玩家飞机速度,这里是一个确定的值
self.bullets = pygame.sprite.Group() # 玩家飞机所发射的子弹的集合
self.is_hit = False # 玩家是否被击中
# 发射子弹
def shoot(self, bullet_img):
bullet = Bullet(bullet_img, self.rect.midtop)
self.bullets.add(bullet)
# 向上移动,需要判断边界
def moveUp(self):
if self.rect.top <= 0:
self.rect.top = 0
else:
self.rect.top -= self.speed
# 向下移动,需要判断边界
def moveDown(self):
if self.rect.top >= SCREEN_HEIGHT - self.rect.height:
self.rect.top = SCREEN_HEIGHT - self.rect.height
else:
self.rect.top += self.speed
# 向左移动,需要判断边界
def moveLeft(self):
if self.rect.left <= 0:
self.rect.left = 0
else:
self.rect.left -= self.speed
# 向右移动,需要判断边界
def moveRight(self):
if self.rect.left >= SCREEN_WIDTH - self.rect.width:
self.rect.left = SCREEN_WIDTH - self.rect.width
else:
self.rect.left += self.speed
3. 敌机类
其中函数__init()__定义了敌机的基本属性,包括:形状图片、位置、速度。函数move()计算敌机移动的位置。
class Enemy(pygame.sprite.Sprite):
def __init__(self, enemy_img, enemy_down_imgs, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = enemy_img
self.rect = self.image.get_rect()
self.rect.topleft = init_pos
self.down_imgs = enemy_down_imgs
self.speed = 2
# 敌机移动,边界判断及删除在游戏主循环里处理
def move(self):
self.rect.top += self.speed