相关文件
想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
需要源码的小伙伴可以在公众号回复飞机大战
Python源码、问题解答学习交流群:773162165
开发环境
Python版本:3.7.8
相关模块:
pygame
traceback
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
效果展示
补给到位
代码实现
def main():
pygame.mixer.music.play(-1)
# 生成我方飞机
me = myplane.MyPlane(bg_size)
enemies = pygame.sprite.Group()
# 生成敌方小型飞机
small_enemies = pygame.sprite.Group()
add_small_enemies(small_enemies, enemies, 15)
# 生成敌方中型飞机
mid_enemies = pygame.sprite.Group()
add_mid_enemies(mid_enemies, enemies, 4)
# 生成敌方大型飞机
big_enemies = pygame.sprite.Group()
add_big_enemies(big_enemies, enemies, 2)
# 生成普通子弹
bullet1 = []
bullet1_index = 0
BULLET1_NUM = 4
for i in range(BULLET1_NUM):
bullet1.append(bullet.Bullet1(me.rect.midtop))
# 生成超级子弹
bullet2 = []
bullet2_index = 0
BULLET2_NUM = 8
for i in range(BULLET2_NUM//2):
bullet2.append(bullet.Bullet2((me.rect.centerx-33, me.rect.centery)))
bullet2.append(bullet.Bullet2((me.rect.centerx+30, me.rect.centery)))
clock = pygame.time.Clock()
# 中弹图片索引
e1_destroy_index = 0
e2_destroy_index = 0
e3_destroy_index = 0
me_destroy_index = 0
# 统计得分
score = 0
score_font = pygame.font.Font("static/font/font.ttf", 36)
# 标志是否暂停游戏
paused = False
pause_nor_image = pygame.image.load("static/img/pause_nor.png").convert_alpha()
pause_pressed_image = pygame.image.load("static/img/pause_pressed.png").convert_alpha()
resume_nor_image = pygame.image.load("static/img/resume_nor.png").convert_alpha()
resume_pressed_image = pygame.image.load("static/img/resume_pressed.png").convert_alpha()
paused_rect = pause_nor_image.get_rect()
paused_rect.left, paused_rect.top = width - paused_rect.width - 10, 10
paused_image = pause_nor_image
# 设置难度级别
level = 1
# 全屏炸弹
bomb_image = pygame.image.load("static/img/bomb.png").convert_alpha()
bomb_rect = bomb_image.get_rect()
bomb_font = pygame.font.Font("static/font/font.ttf", 48)
bomb_num = 3
# 每30秒发放一个补给包
bullet_supply = supply.Bullet_Supply(bg_size)
bomb_supply = supply.Bomb_Supply(bg_size)
SUPPLY_TIME = USEREVENT
pygame.time.set_timer(SUPPLY_TIME, 30 * 1000)
# 超级子弹定时器
DOUBLE_BULLET_TIME = USEREVENT + 1
# 标志是否使用超级子弹
is_double_bullet = False
# 解除我方无敌状态定时器
INVINCIBLE_TIME = USEREVENT + 2
# 生命数量
life_image = pygame.image.load("static/img/life.png").convert_alpha()
life_rect = life_image.get_rect()
life_num = 3
# 用于阻止重复打开记录文件
recorded = False
# 游戏结束画面
gameover_font = pygame.font.Font("static/font/font.TTF", 48)
again_image = pygame.image.load("static/img/again.png").convert_alpha()
again_rect = again_image.get_rect()
gameover_image = pygame.image.load("static/img/gameover.png").convert_alpha()
gameover_rect = gameover_image.get_rect()
# 用于切换图片
switch_image = True
# 用于延迟
delay = 100
running = True
class Bullet1(pygame.sprite.Sprite):
def __init__(self, position):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("static/img/bullet1.png").convert_alpha()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = position
self.speed = 12
self.active = False
self.mask = pygame.mask.from_surface(self.image)
def move(self):
self.rect.top -= self.speed
if self.rect.top < 0:
self.active = False
def reset(self, position):
self.rect.left, self.rect.top = position
self.active = True
class Bullet2(pygame.sprite.Sprite):
def __init__(self, position):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("static/img/bullet2.png").convert_alpha()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = position
self.speed = 14
self.active = False
self.mask = pygame.mask.from_surface(self.image)
def move(self):
self.rect.top -= self.speed
if self.rect.top < 0:
self.active = False
def reset(self, position):
self.rect.left, self.rect.top = position
self.active = True
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("static/img/enemy1.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([\
pygame.image.load("static/img/enemy1_down1.png").convert_alpha(), \
pygame.image.load("static/img/enemy1_down2.png").convert_alpha(), \
pygame.image.load("static/img/enemy1_down3.png").convert_alpha(), \
pygame.image.load("static/img/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("static/img/enemy2.png").convert_alpha()
self.image_hit = pygame.image.load("static/img/enemy2_hit.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([\
pygame.image.load("static/img/enemy2_down1.png").convert_alpha(), \
pygame.image.load("static/img/enemy2_down2.png").convert_alpha(), \
pygame.image.load("static/img/enemy2_down3.png").convert_alpha(), \
pygame.image.load("static/img/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("static/img/enemy3_n1.png").convert_alpha()
self.image2 = pygame.image.load("static/img/enemy3_n2.png").convert_alpha()
self.image_hit = pygame.image.load("static/img/enemy3_hit.png").convert_alpha()
self.destroy_images = []
self.destroy_images.extend([\
pygame.image.load("static/img/enemy3_down1.png").convert_alpha(), \
pygame.image.load("static/img/enemy3_down2.png").convert_alpha(), \
pygame.image.load("static/img/enemy3_down3.png").convert_alpha(), \
pygame.image.load("static/img/enemy3_down4.png").convert_alpha(), \
pygame.image.load("static/img/enemy3_down5.png").convert_alpha(), \
pygame.image.load("static/img/enemy3_down6.png").convert_alpha() \
])
self.rect = self.image1.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(-15 * self.height, -5 * self.height)
self.mask = pygame.mask.from_surface(self.image1)
self.energy = BigEnemy.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 = BigEnemy.energy
self.rect.left, self.rect.top = \
randint(0, self.width - self.rect.width), \
randint(-15 * self.height, -5 * self.height)
详细代码需要的小伙伴可以在公众号回复:飞机大战 就可以领取的哈
公众号:Python日志
Python源码、问题解答学习交流群:773162165