import pygame
from pygame.locals import *
import random
import flier
class UserEvent(object):
# 事件的默认时间
ADD_ENEMY_TIME = 1000
ADD_ENEMY_BULLET_TIME = 500
ADD_ALLOWANCE_TIME = 5000
ADD_HERO_BULLET_TIME = 200
def __init__(self):
self.ADD_ENEMY = pygame.USEREVENT + 1 # 自定义添加敌军事件
self.ADD_ENEMY_BULLET = pygame.USEREVENT + 2 # 自定义添加敌军子弹事件
self.ADD_HERO_BULLET = pygame.USEREVENT + 3 # 自定义英雄添加子弹事件
self.ADD_ALLOWANCE = pygame.USEREVENT + 4 # 自定义添加补给事件
self.flag = False
self.set_event_time()
def set_event_time(self):
# 设置事件的间隔时间
pygame.time.set_timer(self.ADD_ENEMY, self.ADD_ENEMY_TIME)
pygame.time.set_timer(self.ADD_ENEMY_BULLET, self.ADD_ENEMY_BULLET_TIME)
pygame.time.set_timer(self.ADD_HERO_BULLET, self.ADD_HERO_BULLET_TIME)
pygame.time.set_timer(self.ADD_ALLOWANCE, self.ADD_ALLOWANCE_TIME)
def supervise_event(self, group, rect):
"""
管理事件
:return:
"""
for event in pygame.event.get():
if event.type == QUIT:
exit()
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
# 退出虚拟机
exit()
if event.type == self.ADD_HERO_BULLET:
self.hero_bullet(group)
if event.type == self.ADD_ENEMY:
self.create_enemy(group, rect)
if self.ADD_ENEMY_TIME >= 200:
self.ADD_ENEMY_TIME -= 500
pygame.time.set_timer(self.ADD_ENEMY, random.randint(self.ADD_ENEMY_TIME, 2000))
if event.type == self.ADD_ENEMY_BULLET:
self.enemy_bullet(group)
if event.type == self.ADD_ALLOWANCE:
self.create_allowance(group, rect)
pygame.time.set_timer(self.ADD_ALLOWANCE, random.randint(1000, 10000))
@staticmethod
def create_allowance(group, rect):
new_allowance = flier.Allowance(rect)
group.group_allowance.add(new_allowance) # 把补给对象添加到补给对象管理器中
group.group_all.add(new_allowance) # 把补给对象添加到全部对象管理器中
@staticmethod
def hero_bullet(group):
"""
英雄发射子弹
:param group:
:return:
"""
if pygame.key.get_pressed()[K_SPACE]:
for hero in group.group_hero:
bullet_list = hero.emit_bullet() # 调用添加子弹方法,获得一个存储子弹对象的列表
# 循环获得子弹对象
for new_bullet in bullet_list:
group.group_hero_bullet.add(new_bullet) # 把英雄子弹对象添加到英雄子弹对象管理器中
group.group_all.add(new_bullet) # 把英雄子弹对象添加到全部对象管理器中
@staticmethod
def enemy_bullet(group):
"""
敌军发射子弹
:param group:
:return:
"""
for enemy in group.group_enemy:
if enemy.enemy_life > 0:
bullet_list = enemy.emit_bullet()
for new_bullet in bullet_list:
group.group_enemy_bullet.add(new_bullet) # 把敌军子弹添加到敌军子弹对象管理器中
group.group_all.add(new_bullet) # 添加敌军子弹对象到全部的对象管理器中
@staticmethod
def create_enemy(group, rect):
new_enemy = flier.Enemy(rect) # 创建一架敌军飞机
new_life = new_enemy.life_image
group.group_enemy.add(new_enemy) # 添加敌军对象到敌军对象管理器中
group.group_all.add(new_enemy) # 添加敌军对象到全部的对象管理器中
group.group_all.add(new_life) # 添加敌军对象到全部的对象管理器中
@staticmethod
def collide_event(group):
"""
碰撞检测
:return:
"""
# 循环获取所有敌军
for enemy in group.group_enemy:
# 判断敌军是否被子弹击中
if pygame.sprite.spritecollideany(enemy, group.group_hero_bullet):
harm_num = 0
for bullet in group.group_hero_bullet:
harm_num = bullet.harm
enemy.enemy_life -= harm_num
if enemy.enemy_life > 0:
enemy.life_image.surf = pygame.Surface((enemy.enemy_life, 5))
enemy.life_image.surf.fill((233, 66, 66))
for score in group.group_score:
score.score += 10
# 循环获取所有英雄子弹对象
for bullet in group.group_hero_bullet:
# 判断英雄子弹是否打中敌军
if pygame.sprite.spritecollideany(bullet, group.group_enemy):
bullet.kill()
# 循环获取所有敌军子弹对象
for bullet in group.group_enemy_bullet:
# 判断敌军子弹是否打中英雄
if pygame.sprite.spritecollideany(bullet, group.group_hero):
for hero in group.group_hero:
hero.life -= 2
bullet.kill() # 销毁子弹
# 循环获取所有的补给对象
for allowance in group.group_allowance:
# 判断英雄是否接到补给
if pygame.sprite.spritecollideany(allowance, group.group_hero):
# 英雄接到补给,获得相应的属性,销毁补给
allowance.kill()
for hero in group.group_hero:
if hero.bullet_num < 3:
if allowance.allowance_num == 9:
hero.bullet_num += 1
if allowance.allowance_num < 9:
hero.allowance_num = allowance.allowance_num
if allowance.allowance_num >= 10:
for enemy in group.group_enemy:
enemy.enemy_life -= 100
if __name__ == '__main__':
pass
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
python飞机大战,包含图片代码,实现类补给功能,爆炸特效,敌军生命值,背景音乐 python飞机大战,包含图片代码,实现类补给功能,爆炸特效,敌军生命值,背景音乐 python飞机大战,包含图片代码,实现类补给功能,爆炸特效,敌军生命值,背景音乐 python飞机大战,包含图片代码,实现类补给功能,爆炸特效,敌军生命值,背景音乐 python飞机大战,包含图片代码,实现类补给功能,爆炸特效,敌军生命值,背景音乐
资源推荐
资源详情
资源评论
收起资源包目录
python飞机大战 (107个子文件)
雷霆战机.iml 398B
img_bg_level_1.jpg 400KB
img_bg_level_3.jpg 309KB
img_bg_level_5.jpg 266KB
img_bg_level_4.jpg 207KB
img_bg_level_2.jpg 174KB
bg.jpg 66KB
allowance_2.jpg 17KB
bg3.mp3 9.09MB
bg2.ogg 824KB
eff3.png 89KB
eff4.png 72KB
eff2.png 71KB
image 5.png 28KB
image 6.png 25KB
image 12.png 23KB
image 11.png 23KB
image 10.png 23KB
image 8.png 23KB
eff1.png 23KB
image 9.png 23KB
image 7.png 22KB
image 3.png 21KB
image 2.png 21KB
image 4.png 21KB
hero_3.png 20KB
hero2.png 19KB
image 13.png 16KB
image 14.png 16KB
image 1.png 14KB
allowance_3.png 8KB
background.png 6KB
enemy_4.png 6KB
enemy_6.png 6KB
enemy_2.png 6KB
allowance.png 6KB
enemy_1.png 6KB
enemy_3.png 6KB
enemy_5.png 6KB
hero1.png 6KB
enemy_7.png 6KB
start_1.png 5KB
bullet_6.png 5KB
bullet_8.png 5KB
bullet_7.png 5KB
bullet_5.png 5KB
bullet_2.png 5KB
bullet_4.png 5KB
bullet_3.png 5KB
bullet_6.png 4KB
bullet_7.png 4KB
bullet_2.png 4KB
bullet_4.png 4KB
bullet_1.png 4KB
bullet_5.png 4KB
bullet_3.png 4KB
bullet_1.png 4KB
start_2.png 3KB
UserEvent.py 6KB
Hero.py 3KB
Login.py 3KB
test.py 3KB
Enemy.py 2KB
main.py 1KB
Group.py 1KB
Allowance.py 956B
Bullet.py 750B
Flier.py 726B
Start.py 659B
BackGround.py 645B
Life.py 519B
Score.py 511B
__init__.py 114B
__init__.py 42B
__init__.py 25B
__init__.py 24B
__init__.py 22B
__init__.py 22B
__init__.py 19B
User.py 0B
UserEvent.cpython-36.pyc 4KB
Hero.cpython-36.pyc 3KB
Enemy.cpython-36.pyc 3KB
Login.cpython-36.pyc 2KB
main.cpython-36.pyc 1KB
Allowance.cpython-36.pyc 1KB
Flier.cpython-36.pyc 1KB
Bullet.cpython-36.pyc 1KB
Group.cpython-36.pyc 1013B
BackGround.cpython-36.pyc 1007B
Start.cpython-36.pyc 1000B
Life.cpython-36.pyc 966B
Score.cpython-36.pyc 957B
__init__.cpython-36.pyc 244B
__init__.cpython-36.pyc 188B
__init__.cpython-36.pyc 182B
__init__.cpython-36.pyc 176B
__init__.cpython-36.pyc 172B
__init__.cpython-36.pyc 172B
__init__.cpython-36.pyc 170B
共 107 条
- 1
- 2
资源评论
YanggongYang
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功