import pygame
from plane_sprites import *
from plane_home import *
class PlaneGame(object):
def __init__(self,screen):
print("游戏初始化...")
self.screen = screen
# 2. 创建游戏的时钟
self.clock = pygame.time.Clock()
# 3. 调用私有方法,精灵和精灵组的创建
self.__create_sprites()
# 4.设置定时事件 创建敌机 1s一个
pygame.time.set_timer(CREATE_ENEMY_EVENT,500)
pygame.time.set_timer(HERO_FIRE_EVENT,300)
pygame.time.set_timer(ENEMY_HIDE_EVENT,200)
def __create_sprites(self):
## 两张背景图交替滚动
bg1 = BackGround()
bg2 = BackGround(True)
self.back_group = pygame.sprite.Group(bg1,bg2)
# 创建敌机的精灵组
self.enemy_group = pygame.sprite.Group()
# 创建英雄的精灵和精灵组
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
# 创建英雄生命的精灵和精灵组
life1 = Life(1)
life2 = Life(2)
life3 = Life(3)
self.life_group = pygame.sprite.Group(life1,life2,life3)
self.blast_group = pygame.sprite.Group()
@staticmethod
def __play_music():
""" 播放音乐"""
pygame.mixer.music.load('./sound/back_music.mp3') # 加载背景音乐
pygame.mixer.music.set_volume(0.5) # 设置音量
pygame.mixer.music.play(-1) # 播放背景音乐
def start_game(self):
print("游戏开始...")
self.__play_music()
while True:
# 1. 设置刷新帧率
self.clock.tick(FRAME_PER_SEC)
# 2. 事件监听
self.__event_handler()
# 3. 碰撞检测
self.__check_collide()
# 4. 更新/绘制精灵组
self.__update_sprites()
# 5. 更新显示
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
# 判断是否退出游戏
if event.type == pygame.QUIT:
PlaneGame.__game_over()
elif event.type == CREATE_ENEMY_EVENT:
print("敌机出场...")
# 创建敌机精灵
enemy = Enemy()
self.enemy_group.add(enemy)
elif event.type == HERO_FIRE_EVENT:
self.hero.fire()
elif event.type == ENEMY_HIDE_EVENT:
for blast1 in self.blast_group.sprites():
self.blast_group.remove(blast1)
elif event.type == pygame.MOUSEBUTTONDOWN:
pressed_array = pygame.mouse.get_pressed()
for index in range(len(pressed_array)):
if pressed_array[index]:
if index == 0:
print('Pressed LEFT Button!')
plane.start_game()
# elif index == 1:
# print('The mouse wheel Pressed!')
# elif index == 2:
# print('Pressed RIGHT Button!')
# 使用键盘提供的方法获取键盘按键 - 按键元组
keys_pressed =pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
print("向右...")
self.hero.speed = 2
self.hero.update(self,1)
elif keys_pressed[pygame.K_LEFT]:
print("向左...")
self.hero.speed = -2
self.hero.update(self, 1)
elif keys_pressed[pygame.K_DOWN]:
print("向下...")
self.hero.speed = 1
self.hero.update(self, 0)
elif keys_pressed[pygame.K_UP]:
print("向上...")
self.hero.speed = -1
self.hero.update(self, 0)
else:
self.hero.speed = 0
def __check_collide(self):
blast_list = []
# 1. 子弹摧毁敌机
collisions = pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
if collisions:
for hero_bullet in collisions: # in hero_shot_enemy.keys():
# 击中的爆炸效果
rect = hero_bullet.rect
# print("rect==",rect)
blast = Blast(rect)
self.blast_group.add(blast)
self.hero.score += 1
# print("得分: " , self.hero.score)
# 2. 敌机撞毁英雄
enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
# 判断列表是否有内容
if len(enemies) > 0:
# 获取精灵组生命数
nums = len(self.life_group)
if nums > 0:
for life in self.life_group.sprites():
# 按照位置从左至右删除
if life.num == nums:
self.life_group.remove(life)
else:
# 让英雄牺牲
self.hero.kill()
# 结束游戏
PlaneGame.__game_over()
# pygame.quit()
# plane_home = PlaneHome()
# plane_home.load()
def __update_sprites(self):
self.back_group.update()
self.back_group.draw(self.screen)
self.enemy_group.update()
self.enemy_group.draw(self.screen)
self.hero_group.update(self,1)
self.hero_group.draw(self.screen)
self.hero.bullets.update()
self.hero.bullets.draw(self.screen)
self.life_group.update()
self.life_group.draw(self.screen)
self.blast_group.update()
self.blast_group.draw(self.screen)
# 动态添加分数
self.drawText()
def drawText(self):
game_font = pygame.font.SysFont('SimHei',30) # 字体
# 绘制游戏得分
self.screen.blit(game_font.render('当前得分:%d' % self.hero.score, True, [255, 0, 0]), [20, 20])
# 静态方法
@staticmethod
def __game_over():
print("游戏结束...")
pygame.quit()
exit()
if __name__ == '__main__':
# 创建游戏对象
plane = PlaneGame()
# 启动游戏
# plane.start_game()
没有合适的资源?快使用搜索试试~ 我知道了~
pygame之飞机大战planewar.zip

共50个文件
png:39个
xml:4个
py:3个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-05-12
19:28:03
上传
评论
收藏 766KB ZIP 举报
温馨提示
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论


























收起资源包目录























































共 50 条
- 1
资源评论


枫蜜柚子茶
- 粉丝: 9083
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- B二B型电子商务应用.pptx
- 固定资产管理系统软件工程.doc
- 项目管理期末作业.docx
- 神舟上网本BIOS设置.doc
- 国家开放大学电大《社会工作概论》网络核心课形考网考作业及答案2.docx
- 服务器虚拟化技术与应用-第5章.pptx
- 一体机软件操作说明书.doc
- 《web前端开发基础》作业考核试题题库大全.doc
- 数字图像处理考试卷以及答案.pdf
- 基于单片机的烟雾报警系统设计.docx
- 算法设计与分析电子科技大学肖明宇研究生课件-(6).ppt
- 软件工程简答题必考.doc
- 跨境电子商务概述.ppt
- 网络工程设计与系统集成知识点.doc
- 全国植物检疫信息化管理系统用户手册.doc
- 新版网站运营手册.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
