版权声明:原创不易,本文禁止抄袭、转载,侵权必究!

目录

  • 一、开发环境
  • 二、功能模块
  • 三、游戏效果
  • 四、完整项目下载
  • 五、作者Info

一、开发环境

开发环境 :Windows10 Python3.6.4
第三方库 :Pygame1.9.6
IDE :PyCharm/Sublime Text

二、功能模块

素材模块
游戏图片素材:

BGM及音效素材:

字体素材:

源码模块
子弹模块
普通子弹部分源码:

def __init__(self, position):super().__init__()self.image = pygame.image.load("images/bullet1.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 12self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):self.rect.top -= self.speedif self.rect.top < 0:self.active = False

超级子弹部分源码:

def __init__(self, position):super().__init__()self.image = pygame.image.load("images/bullet2.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 18self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):self.rect.top -= self.speedif self.rect.top < 0:self.active = False

敌机子弹部分源码:

def __init__(self, speed, position):super().__init__()self.image = pygame.image.load("images/bullet1.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = speedself.active = Falseself.mask = pygame.mask.from_surface(self.image)

敌机模块:
小型敌机部分源码:

class SmallEnemy(Enemy):def __init__(self, bg_size):super().__init__("images/enemy1.png", 2, bg_size)# 小型敌机毁灭图片切换self.destroy_images = []self.destroy_images.extend([pygame.image.load("images/enemy1_down1.png").convert_alpha(),pygame.image.load("images/enemy1_down2.png").convert_alpha(),pygame.image.load("images/enemy1_down3.png").convert_alpha(),pygame.image.load("images/enemy1_down4.png").convert_alpha()])# 设置敌机原始位置self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-5 * self.height, 0)# 表明敌机目前的状态(为True表明敌机生存,反之为碰撞时毁灭,之后播放毁灭画面,重新调用reset方法,将敌机设置到初始位置)self.active = True# 返回英雄除了空白区域的部分self.mask = pygame.mask.from_surface(self.image)

中型敌机部分源码:

class MidEnemy(Enemy):# 中型敌机打击次数energy = 8def __init__(self, bg_size):super().__init__("images/enemy2.png", 1, bg_size)# 中型敌机毁灭图片切换self.destroy_images = []self.destroy_images.extend([pygame.image.load("images/enemy2_down1.png").convert_alpha(),pygame.image.load("images/enemy2_down2.png").convert_alpha(),pygame.image.load("images/enemy2_down3.png").convert_alpha(),pygame.image.load("images/enemy2_down4.png").convert_alpha()])# 子弹打击时效果图片self.image_hit = pygame.image.load("images/enemy2_hit.png").convert_alpha()# 设置敌机原始位置# self.width, self.height = bg_size[0], bg_size[1]self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-10 * self.height,-self.height)self.active = True# 返回英雄除了空白区域的部分self.mask = pygame.mask.from_surface(self.image)# 击打次数属性self.energy = MidEnemy.energy# 是否击中属性self.hit = False

我方战机模块部分源码:

class MyPlane(pygame.sprite.Sprite):def __init__(self, bg_size):super().__init__()# 获取英雄图片(两幅图片实现动态效果)self.image1 = pygame.image.load("images/me1.png").convert_alpha()self.image2 = pygame.image.load("images/me2.png").convert_alpha()# 英雄毁灭图片切换self.destroy_images = []self.destroy_images.extend([pygame.image.load("images/me_destroy_1.png").convert_alpha(),pygame.image.load("images/me_destroy_2.png").convert_alpha(),pygame.image.load("images/me_destroy_3.png").convert_alpha(),pygame.image.load("images/me_destroy_4.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 = (self.width - self.rect.width) // 2, self.height - self.rect.height - 60# 设置英雄速度self.speed = 10# 设置英雄生存状态self.active = True# 设置飞机无敌self.invincible = False# 返回英雄除了空白区域的部分self.mask = pygame.mask.from_surface(self.image1)

技能模块部分源码:

class BulletSupply(pygame.sprite.Sprite):def __init__(self, bgsize):super().__init__()self.image = pygame.image.load("images/bullet_supply.png").convert_alpha()self.rect = self.image.get_rect()self.width, self.height = bgsize[0], bgsize[1]self.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100self.speed = 5self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.active = Falsedef reset(self):self.active = Trueself.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100

主模块
游戏初始化部分源码:

def __init__(self):# 1.变量定义self.__variate__define()# 2.pygame和音乐初始化pygame.init()pygame.mixer.init()# 3.创建游戏窗口self.screen = pygame.display.set_mode(self.bg_size)pygame.display.set_caption("飞机大战")# 4.获取背景图片self.background = pygame.image.load("images/background.png").convert()# 5.创建游戏时钟self.clock = pygame.time.Clock()# 6.载入音乐模块pygame.mixer.music.load("sound/game_music.ogg")pygame.mixer.music.set_volume(0.2)  # 设置音量self.bullet_sound = pygame.mixer.Sound("sound/bullet.wav")self.bullet_sound.set_volume(0.2)self.bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")self.bomb_sound.set_volume(0.2)

控制英雄飞机:

def __keypress_hanlder(self):"""检测用户的键盘操作,控制英雄飞机"""key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:self.hero.moveUp()if key_pressed[K_s] or key_pressed[K_DOWN]:self.hero.moveDown()if key_pressed[K_a] or key_pressed[K_LEFT]:self.hero.moveLeft()if key_pressed[K_d] or key_pressed[K_RIGHT]:self.hero.moveRight()

创建敌机源码:

def add_small_enemy(self, group1, group2, num):"""创建小型敌机对象,num为对象个数,将其添加到精灵组中"""for i in range(num):e1 = enemy_plane.SmallEnemy(self.bg_size)group1.add(e1)group2.add(e1)def add_mid_enemy(self, group1, group2, num):"""创建中型敌机对象"""for i in range(num):e1 = enemy_plane.MidEnemy(self.bg_size)group1.add(e1)group2.add(e1)def add_big_enemy(self, group1, group2, num):"""创建大型敌机对象"""for i in range(num):e1 = enemy_plane.BigEnemy(self.bg_size)group1.add(e1)group2.add(e1)

子弹生成部分源码:

def __create_bullet(self):# 生成普通子弹self.bullet1 = []self.bullet1_index = 0self.BULLET_NUM = 4for i in range(self.BULLET_NUM):self.bullet1.append(bullet.Bullet1(self.hero.rect.midtop))

定义游戏难度部分源码:

def __create_start_image(self):# 定义难度属性self.easy = Trueself.common = Falseself.difficult = False# 飞机大战主题self.start = Falseself.theme_font = pygame.font.Font("font/font.ttf", 50)self.theme_text = self.theme_font.render("Plane   War", True, self.WHILE)self.theme_text_rect = self.theme_text.get_rect()self.theme_text_rect.left, self.theme_text_rect.top = (120, 40)# 游戏开始字体self.start_font = pygame.font.Font("font/font.ttf", 40)self.start_text = self.start_font.render("Start Game", True, self.WHILE)self.start_text_rect = self.start_text.get_rect()self.start_text_rect.left, self.start_text_rect.top = (150, 200)# 简单字体self.easy_font = pygame.font.Font("font/font.ttf", 40)self.easy_text = self.easy_font.render("easy", True,  self.BLACK)self.easy_text_rect = self.easy_text.get_rect()self.easy_text_rect.left, self.easy_text_rect.top = (200, 400)# 一般字体self.common_font = pygame.font.Font("font/font.ttf", 40)self.common_text = self.common_font.render("common", True,  self.WHILE)self.common_text_rect = self.common_text.get_rect()self.common_text_rect.left, self.common_text_rect.top = (180, 450)# 困难字体self.difficult_font = pygame.font.Font("font/font.ttf", 40)self.difficult_text = self.difficult_font.render("difficult", True, self.WHILE)self.difficult_text_rect = self.difficult_text.get_rect()self.difficult_text_rect.left, self.difficult_text_rect.top = (180, 510)

三、游戏效果

游戏开始效果:

游戏战斗效果:

游戏结束效果:

四、完整项目下载

点我下载

五、作者Info

Author:小鸿的摸鱼日常,Goal:让编程更有趣!

专注于算法、爬虫,网站,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!

版权说明:本文禁止抄袭、转载 ,侵权必究!

Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)相关推荐

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

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

  2. Java小游戏之Swing框架实现飞机大战(附源码 超详细必看)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 1.项目主要工作 本次项目的题目--基于Java的飞机大战游戏的设计与实现,主要目的是实现飞机大战这个游戏.期望结果:游戏无BUG(现在人们将在电脑系 ...

  3. 新版飞机大战游戏安卓源码项目

    作者nuptboyzhb,源码newplanegame,新版飞机大战是一款以真实战机为模板的飞行射击类游戏,体验新颖,玩法炫酷.一样的经典,不一样的体验.飞机模型基于目前的主流战机:包括美国F16,F ...

  4. Python小游戏——坦克飞机大战(附源码)

    一.学习目标: 1.掌握用Python写自己的小游戏. 2.掌握面向对象编程语言的特点. 3.掌握Python基础 二.学习内容: 1.Python文件操作. 2.Python 类的定义与使用 3.P ...

  5. Python实现飞机大战-第二部分(附源码、素材、超详细教程)

    飞机大战第二部分 1.前言 2.飞机射击 2.1.添加子弹的相关设置 2.2.创建文件bullet.py 2.3.修改game_functions.py 2.4.修改mian.py 2.5.射击效果 ...

  6. PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)

    基于PyQt5 + Python3.7 + OpenCV实现的人脸识别身份认证系统,附源码. 技术选型 PyQt5 + Python3.7 + OpenCV 功能概述 实现人员注册,信息修改,人脸识别 ...

  7. 飞机小游戏 java源码下载

    两种子弹,一种白点,飞行速度较慢,发射频率高,从四周随机位置发射,发射方向总是指向飞机的中点直线方向, 另一种导弹飞行速度较快,发射频率低,同样从四周随机位置发射,发射方向总是水平或垂直跟飞机位置无关 ...

  8. 【Java游戏开发】坦克大战(附源码+课件+资料)

    本课程讲解了一个坦克大战游戏的详细编写流程,即使你是刚入门java的新手,只要你简单掌握了该游戏所需要的javase基础知识,便可以跟随教程视频完成属于你自己的坦克大战游戏!同时还可以加深和巩固你对面 ...

  9. 基础教学:用python实现儿时游戏飞机大战(带源码)

    python是一门非常简单的语言,快速入门后可以做很多事情.例如爬虫,数据分析,自动化运维,机器学习量化分析啊等等! 视频教学源码学习资料领取地址:关注+私信小编"资料"即可. 看 ...

最新文章

  1. linux安装硬盘命令,硬盘安装linux的两条命令
  2. 编码原则:不变量/前置条件/后置条件
  3. 微信小程序 蓝牙的使用
  4. python中forward_符合python风格的对象
  5. SQL Server 2016 RC0 安装(超多图)
  6. js实现关于分页的一种实现方式
  7. php元类,什么是元类-python编程入门系列图文教程-PHP中文网教程
  8. ISA Server 2004 SP2新特性(上)
  9. linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
  10. 第一次想真正的认识自己
  11. python工具包:Python Swiftclient
  12. Openjudge-NOI题库-出书最多
  13. 深入理解快速排序和 STL 的 sort 算法
  14. uni-app 的 tabBar 图标自制方法
  15. Java学习指南(15) 链表
  16. 傅里叶变换F(f)与F(w)的探究——以余弦函数为例
  17. html5拼图游戏canvas,canvas拼图游戏
  18. 坐标转换系列三 基于开源的proj4,封装成工具
  19. 【XSY2271】青蛙(栈)
  20. log4cpp-【写日志】:使用log4cpp的基本步骤

热门文章

  1. Numpy基础练习100题[前50题]
  2. 计算机三级信息安全技术电子书,计算机三级信息安全技术教材.pdf
  3. 深入解析 multipart/form-data
  4. 偷偷收藏这5个在线资源网站,第二个BT搜索很强大!
  5. 爱奇艺手机html页面,手机爱奇艺弹幕消失了
  6. 游戏SKU采集出入库-Xposed Hook
  7. 统计学习 | 正态分布 Normal Distribution
  8. 小米红外遥控器如何适配到其他应用设备之上
  9. 机器学习工具篇_sklearn_随机森林
  10. 英文拼写纠错-超详细演示