1 Star 0 Fork 0

任佳乐/aircraft_battle

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
enemy.py 6.56 KB
一键复制 编辑 原始数据 按行查看 历史
任佳乐 提交于 2021-03-20 09:12 . 把项目提交上去
import pygame
import random
'''
飞机大战敌机类
'''
# 小敌机类
class LittleEnemy(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.append(pygame.image.load("images/enemy1_down1.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy1_down2.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy1_down3.png").convert_alpha())
self.destroy_images.append(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.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-5 * self.height, 0)
# 设置敌机初始速度
self.speed = 2
# 定义敌机状态 True为正常,False为爆炸
self.active = True
# 定义敌机用于碰撞检测的范围(mask的from_surface方法返回Surface对象图片中非透明的部分)
self.mask = pygame.mask.from_surface(self.image)
# 敌机移动只会从上往下冲,所以只需要修改y坐标的值就可以,如果敌机从页面消失了就重新初始化敌机的位置
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 = random.randint(0, self.width - self.rect.width), random.randint(-5 * self.height, 0)
# 中敌机类
class MiddleEnemy(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.append(pygame.image.load("images/enemy2_down1.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy2_down2.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy2_down3.png").convert_alpha())
self.destroy_images.append(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.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-10 * self.height, -self.height)
# 设置敌机初始速度
self.speed = 1
# 定义敌机状态 True为正常,False为爆炸
self.active = True
# 定义敌机用于碰撞检测的范围(mask的from_surface方法返回Surface对象图片中非透明的部分)
self.mask = pygame.mask.from_surface(self.image)
# 定义中型飞机的血条
self.energy = MiddleEnemy.energy
# 定义属性,用于表示当前敌机是否被击中
self.hit = False
# 敌机移动只会从上往下冲,所以只需要修改y坐标的值就可以,如果敌机从页面消失了就重新初始化敌机的位置
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 = MiddleEnemy.energy
# 设置敌机初始化位置
self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.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.append(pygame.image.load("images/enemy3_down1.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy3_down2.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy3_down3.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy3_down4.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy3_down5.png").convert_alpha())
self.destroy_images.append(pygame.image.load("images/enemy3_down6.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 = random.randint(0, self.width - self.rect.width), random.randint(-15 * self.height, -5 * self.height)
# 设置敌机初始速度
self.speed = 1
# 定义敌机状态 True为正常,False为爆炸
self.active = True
# 定义敌机用于碰撞检测的范围(mask的from_surface方法返回Surface对象图片中非透明的部分)
self.mask = pygame.mask.from_surface(self.image1)
# 定义大型飞机的血条
self.energy = BigEnemy.energy
# 定义属性,用于表示当前敌机是否被击中
self.hit = False
# 敌机移动只会从上往下冲,所以只需要修改y坐标的值就可以,如果敌机从页面消失了就重新初始化敌机的位置
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 = BigEnemy.energy
# 设置敌机初始化位置
self.rect.left, self.rect.top = random.randint(0, self.width - self.rect.width), random.randint(-15 * self.height, -5 * self.height)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/renjiale/aircraft_battle.git
git@gitee.com:renjiale/aircraft_battle.git
renjiale
aircraft_battle
aircraft_battle
master

搜索帮助