效果图:

完整素材源码打包:https://pan.baidu.com/s/1YLn1FZ2IXBxIs53x8pqlrw 提取码: m28g

运行方式:将完整文件夹导入Pycharm后运行 雷霆战机3.0.py 即可

主要代码:

# coding:UTF-8
import pygame
from pygame import locals
from sys import exit
from pygame.sprite import Sprite,Group
import random , time , mathclass BGSprite(Sprite):                             #背景精灵def __init__(self,imagepath):super().__init__()self.image = pygame.image.load(imagepath)self.rect = self.image.get_rect()class EnemySprite(Sprite):                          #敌方战机def __init__(self,imagepath,pos,speed,screen,movetype,bullettype,hp): #self,图片路径,创建位置,速度,背景,移动方式,子弹发射方式,血量super().__init__()self.image = pygame.image.load(imagepath)# self.image = self.image.subsurface(rect)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]self.speed = speedself.xspeed = random.randint(0,speed+1) * movetypeself.timer = 0self.timer2 = 3self.bulletgroup = Group()self.screen = screenself.bullettype = bullettypeself.hp = hpdef update(self):self.bulletgroup.update()self.bulletgroup.draw(self.screen)if self.bullettype == 0:self.timer += 0.01if self.timer > 1:# print("敌机发射子弹")bullet = EnemyBulletSprite("images/bullet/enemy_bullet1.png", [self.rect.x + 40, self.rect.y + 39.5],-2, 0)bullet2 = EnemyBulletSprite("images/bullet/enemy_bullet1.png", [self.rect.x + 40, self.rect.y + 39.5],-2, -1)bullet3 = EnemyBulletSprite("images/bullet/enemy_bullet1.png", [self.rect.x + 40, self.rect.y + 39.5],-2, 1)self.bulletgroup.add(bullet)self.bulletgroup.add(bullet2)self.bulletgroup.add(bullet3)self.timer = 0else:self.timer += 0.01self.timer2 += 0.01if self.timer > 1:bullet = EnemyBulletSprite("images/bullet/enemy_bullet2.png", [self.rect.x + 40, self.rect.y + 39.5],-2, -1)bullet2 = EnemyBulletSprite("images/bullet/enemy_bullet2.png", [self.rect.x + 120, self.rect.y + 39.5],-2, 1)self.bulletgroup.add(bullet)self.bulletgroup.add(bullet2)self.timer = 0if self.timer2 > 4:     #BOSS发射导弹bullet = EnemyBulletSprite("images/bullet/boss_bullet.png", [self.rect.x + 80, self.rect.y + 39.5],-2, 0)self.bulletgroup.add(bullet)self.timer2 = 0self.rect.y += self.speedself.rect.x += self.xspeedif self.rect.x > 400:self.xspeed *= -1self.rect.x += self.xspeedif self.rect.x < 0:self.xspeed *= -1self.rect.x += self.xspeedif self.rect.y > 800:self.kill()def bomb(self):            #爆炸效果bombimages = ["images/boom/boom01.png","images/boom/boom02.png","images/boom/boom03.png","images/boom/boom04.png","images/boom/boom05.png","images/boom/boom06.png",]for i in bombimages :self.screen.blit(pygame.image.load(i),(self.rect.x,self.rect.y))time.sleep(0.005)pygame.display.update()self.kill()class BulletHelp(Sprite):                               #补给品def __init__(self,imagepath,rect,pos,speed,screen,movetype):    #self,图片路径,创建位置,背景,移动方式super().__init__()self.image = pygame.image.load(imagepath)self.image = self.image.subsurface(rect)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]self.speed = speedself.xspeed = random.randint(0, speed) * movetypeself.screen = screendef update(self):self.rect.y += self.speedself.rect.x += self.xspeedif self.rect.x > 400:self.xspeed *= -1self.rect.x += self.xspeedif self.rect.x < 0:self.xspeed *= -1self.rect.x += self.xspeedif self.rect.y > 800:self.kill()class BulletSprite(Sprite):                             #玩家子弹精灵租def __init__(self,imagepath,pos,speed,direction):    #self,图片路径,位置,速度,方向super().__init__()self.image = pygame.image.load(imagepath)# self.image = self.image.subsurface(rect)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]self.speed = speedself.dir = directiondef move(self):if self.dir == 0:self.rect.y -= self.speedelif self.dir > 0 :self.rect.y -= self.speed * math.sin(self.dir)self.rect.x -= self.speed * math.cos(self.dir+90)else:self.rect.y -= self.speed * math.sin(self.dir * -1 )self.rect.x += self.speed * math.cos(self.dir * -1 + 90)if self.rect.y < -50:self.kill()def update(self):self.move()class EnemyBulletSprite(Sprite):                             #敌机子弹精灵组def __init__(self,imagepath,pos,speed,direction):     #self,图片路径,位置,速度,方向super().__init__()self.image = pygame.image.load(imagepath)# self.image = self.image.subsurface(rect)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]self.speed = speedself.dir = directiondef move(self):self.rect.y -= self.speedif self.rect.y < -50:self.kill()def move2(self):self.rect.y -= self.speedself.rect.x -= self.speed/2if self.rect.y < -50:self.kill()def move3(self):self.rect.y -= self.speedself.rect.x += self.speed/2if self.rect.y < -50:self.kill()def update(self):       #子弹发射方向if self.dir == 0:self.move()elif self.dir == -1:self.move2()elif self.dir == 1:self.move3()class PlayerSprite(Sprite):                                 #玩家战机def __init__(self,imagepath,rect,pos,speed,screen):     #self,图片路径,位置,速度,背景super().__init__()self.image = pygame.image.load(imagepath)self.image = self.image.subsurface(rect)self.rect = self.image.get_rect()self.rect.x = pos[0]self.rect.y = pos[1]self.speed = speedself.screen = screenself.bulletgroup = Group()self.score = 0self.hp = 10000self.timer = 0# self.canfire = Falseself.bullettype = 0self.bulletnum = 10def move(self):keys = pygame.key.get_pressed()if keys[locals.K_RIGHT]:self.rect.x += self.speedif self.rect.x > 412:self.rect.x = 412if keys[locals.K_LEFT]:self.rect.x -= self.speedif self.rect.x < 0:self.rect.x = 0if keys[locals.K_UP]:self.rect.y -= self.speedif self.rect.y < 0:self.rect.y = 0if keys[locals.K_DOWN]:self.rect.y += self.speedif self.rect.y > 702:self.rect.y = 702def fire(self):self.timer += 1if self.timer > 50:self.timer = 0if self.bullettype == 0:bullet = BulletSprite("images/bullet/bullet1.png",  [self.rect.x + 45, self.rect.y - 20], 6,0)self.bulletgroup.add(bullet)elif self.bullettype == 1:bullet = BulletSprite("images/bullet/bullet1.png", [self.rect.x + 30, self.rect.y - 20], 6,0)bullet2 = BulletSprite("images/bullet/bullet1.png", [self.rect.x + 60, self.rect.y - 20], 6,0)self.bulletgroup.add(bullet)self.bulletgroup.add(bullet2)elif self.bullettype == 2:bullet = BulletSprite("images/bullet/bullet1.png", [self.rect.x + 30, self.rect.y - 20], 6,0)bullet2 = BulletSprite("images/bullet/bullet1.png", [self.rect.x + 60, self.rect.y - 20], 6,0)bullet3 = BulletSprite("images/bullet/bullet3r.png", [self.rect.x + 60, self.rect.y - 20], 6,15)bullet4 = BulletSprite("images/bullet/bullet3l.png", [self.rect.x + 28, self.rect.y - 20], 6,-15.076)bullet5 = BulletSprite("images/bullet/bullet4r.png", [self.rect.x + 60, self.rect.y - 20], 6,45.5)bullet6 = BulletSprite("images/bullet/bullet4l.png", [self.rect.x + 25, self.rect.y - 20], 6,-45.5)self.bulletgroup.add(bullet)self.bulletgroup.add(bullet2)self.bulletgroup.add(bullet3)self.bulletgroup.add(bullet4)self.bulletgroup.add(bullet5)self.bulletgroup.add(bullet6)self.bulletnum -= 1if self.bulletnum <= 0:self.bullettype = 1def update(self):self.bulletgroup.update()self.bulletgroup.draw(self.screen)self.move()self.fire()CREATE_ENEMY = locals.USEREVENT + 1        #加入用户事件
CREATE_BOSS = locals.USEREVENT + 2
CREATE_BULLET_HELP = locals.USEREVENT + 3def main():pygame.init()pygame.display.set_caption("雷霆战机")           #标题名称screen = pygame.display.set_mode((512,768))     #背景大小bggroup = Group()bgsprite = BGSprite("images/bg/bg0.jpg")bggroup.add(bgsprite)playergroup = Group()playersprite = PlayerSprite("images/hero/hero_b_03.png",[0,0,122,105],[bgsprite.rect.w/2 - 61 ,600],5,screen)        #玩家战机playergroup.add(playersprite)enemygroup = Group()         #敌机精灵组bullethelpgroup = Group()    #子弹精灵组bossgroup = Group()          #boss精灵组pygame.time.set_timer(CREATE_ENEMY,random.randint(500,1000))        #事件触发计时器pygame.time.set_timer(CREATE_BOSS, random.randint(3000, 5000))pygame.time.set_timer(CREATE_BULLET_HELP,random.randint(3000,5000))font = pygame.font.Font(None,32)        #字体设置while True:bggroup.update()        #保持更新bggroup.draw(screen)playergroup.update()playergroup.draw(screen)enemygroup.update()enemygroup.draw(screen)bossgroup.update()bossgroup.draw(screen)bullethelpgroup.update()bullethelpgroup.draw(screen)screen.blit(font.render("Score:"+str(playersprite.score) , True,(255, 0, 0)),(20,20))    #显示分数screen.blit(font.render("HP:" + str(playersprite.hp), True, (255, 0, 0)), (20, 60))        #显示血量pygame.display.update()check1 = pygame.sprite.groupcollide(playersprite.bulletgroup,enemygroup,True,False)#碰撞检测 销毁子弹 销毁敌机if check1:enemy.hp -= 1        #如果检测到碰撞,hp-1if enemy.hp <= 0:list(check1.values())[0][0].bomb()    #当hp<=0时,播放爆炸动画,玩家分数+100playersprite.score += 100check11 = pygame.sprite.groupcollide(playersprite.bulletgroup, bossgroup, True, False)  # 碰撞检测 销毁子弹 销毁敌机if check11:boss.hp -= 1if boss.hp <= 0:list(check11.values())[0][0].bomb()playersprite.score += 500check2 = pygame.sprite.groupcollide(playergroup,enemygroup,False,True)if check2:list(check2.values())[0][0].bomb()playersprite.hp -= 1check22 = pygame.sprite.groupcollide(playergroup, bossgroup, False, True)if check22:list(check22.values())[0][0].bomb()playersprite.hp -= 1#print(enemygroup)for enemy in enemygroup:check3 = pygame.sprite.groupcollide(playergroup,enemy.bulletgroup,False,True)if check3:playersprite.hp -= 1#playersprite.bullettype = 0for boss in bossgroup:check33 = pygame.sprite.groupcollide(playergroup,boss.bulletgroup,False,True)if check33:playersprite.hp -= 1#playersprite.bullettype = 0if playersprite.hp <= 0:playersprite.kill()check4 = pygame.sprite.groupcollide(playergroup,bullethelpgroup,False,True)if check4:if playersprite.bullettype <= 1:playersprite.bullettype += 1playersprite.bulletnum = 10else:playersprite.bulletnum = 10playersprite.fire()for event in pygame.event.get():# if event.type == locals.KEYUP:#     if event.key == locals.K_SPACE:#         playersprite.fire()if event.type == locals.QUIT:pygame.quit()exit()if event.type == CREATE_ENEMY:    #创建普通敌机enemy = EnemySprite("images/enemy/enemy2.png",[random.randint(0,410),-50],2,screen,random.randrange(-1,1,2),0,1)enemygroup.add(enemy)    #加入敌机精灵组if event.type == CREATE_BOSS:     #创建BOSS敌机boss = EnemySprite("images/enemy/boss.png",  [random.randint(0, 410), -50], 1,screen, 0,1,15)bossgroup.add(boss)      #加入boss精灵组if event.type == CREATE_BULLET_HELP:    #创建补给道具bullethelp = BulletHelp("images/hero/supply.png",[0,0,40,41],[random.randint(0,410),-50],2,screen,random.randrange(-1,1,2))bullethelpgroup.add(bullethelp)    #加入补给精灵组if __name__ == '__main__':main()

Python飞机大战游戏 附素材及源码相关推荐

  1. Python 飞机大战游戏中 获取被击中飞机的坐标位置信息

    Python 飞机大战游戏中 获取被击中飞机的坐标位置信息 在参考现有的飞机大战游戏代码,写第一个python游戏,子弹击中飞机后,飞机消失,想着如果能有爆照效果就好了. 于是新建了一个爆炸效果的sp ...

  2. python飞机大战游戏素材_python实现飞机大战微信小游戏

    0.前言 我学一种语言,可以说学任何东西都喜欢自己动手实践,总感觉自己动手一遍,就可以理解的更透彻,学python也一样,自己动手写代码,但更喜欢做点小东西出来,一边玩一边学.下面我就展示一下我最近做 ...

  3. python飞机大战游戏代码_用python语言如何实现飞机大战游戏

    python语言博大精深,它目前来说已经很火热了,在学好python的同时还要学会用python,可以使用它来开发一些项目最好不过了.下面小编用python实现一个小游戏-飞机大战,使用的python ...

  4. python飞机大战游戏高级_05.python实现飞机大战游戏

    python的核心编程跟着学习完了,终于到了第一个实战项目的演练,很是激动. 按着黑马老师指导的思路,代码主要分成两个模块主模块plane_main.py和工具模块plane_sprites.py. ...

  5. python飞机大战游戏代码_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  6. python飞机大战游戏_Python3实现飞机大战游戏

    本文实例为大家分享了Python3实现飞机大战游戏的具体代码,供大家参考,具体内容如下 1.主程序:plane_main.py import pygame from plane_sprites imp ...

  7. java实现飞机大战小游戏——————【附素材、源码、逐行注释讲解】

    java飞机小游戏,实现了以下功能: 1.我方小飞机可以通过鼠标移动来控制. 2.蜜蜂(必须打死而不是碰到,并且碰到蜜蜂会失去生命值)分为两种奖励 获得生命值或者子弹翻3倍. 3.当鼠标移动到界面外可 ...

  8. JAVA飞机大战游戏附源码

    JAVA飞机大战附源码 java飞机大战 效果图如下 java飞机大战 话不多说 直接上源码 窗体部分 package UI; //自定义窗体 //创建类 继承JFrame //创建构造方法,设置窗体 ...

  9. python飞机大战游戏——适合收藏

    目录 主函数 子弹函数 供给函数 主机函数 敌机函数 素材 本次代码来源于B站视频 [Python教程]<零基础入门学习Python>后面几节的内容,超级详细,如果有需要这段代码练手的同学 ...

  10. 【Python飞机大战游戏实战+笔记】黑马程序员Python教程项目实战记录【超详细】

    博主在哔哩哔哩上学习了黑马程序员的python教程,并且完成了老师讲的项目实战,为了巩固知识点通过这篇博客来记录一下. 目录 1. 创建python项目+pygame模块下载 1.1 创建项目 1.2 ...

最新文章

  1. 数位DP 回文序列 POJ-3280 Cheapest Palindrome
  2. python怎么添加列_如何将列添加到DataFrame列?添加新列详细解释————
  3. 关于SUID、SGID、Sticky
  4. 分布式事务SEATA的AT模式的简单使用
  5. bzoj1051 [HAOI2006]受欢迎的牛 tarjan缩点
  6. 12篇学通C#网络编程——第一篇 基础之进程线程
  7. Github Pages + Jekyll 独立博客一小时快速搭建上线指南
  8. 编写基于事件的CQRS读取模型
  9. JEECG-P3开发专题 - 开发环境搭建入门
  10. P2574 XOR的艺术
  11. 6远程桌面连接不上_windows server2008 远程桌面 创建新用户和多用户登录
  12. 杭州之行--记杭电网新恩普杯程序设计邀请赛
  13. 【博客项目】—登录功能实现( 四)
  14. oracle执行外部sql_增强的PolyBase SQL 2019-Oracle DB的外部表
  15. django导入mysql_django如何直接对数据库进行插入操作?
  16. 安装mysql报curses的解决
  17. 【系列一之爬虫系列】爬取信息
  18. synchronized锁升级之偏向锁
  19. 微软官方帮助文档的中文网站和英文网站
  20. 流量卡之家:5G手机价格没那么“邪性” 门槛降低一半

热门文章

  1. 焊接工时简便计算工具_焊接工时计算表
  2. 项目初始阶段、项目立项
  3. Windows 和 Linux 上安装 TTF 字体的方法
  4. arcmap创建空间索引_ArcGIS ArcMap编辑教程-创建新的点要素
  5. Windows 系统:没有远程桌面授权服务器可以提供许可证
  6. 手机mtkcdc端口如何开启_MTK驱动安装教程(手机黑屏刷机)
  7. 迅雷对非会员进行下载限速的解决方案
  8. 分类预测 | MATLAB实现ELM极限学习机多特征分类预测
  9. 关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
  10. 爬虫入门经典(二十三) | fiddler抓包爬取QQ音乐