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

这篇具有很好参考价值的文章主要介绍了Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、开发环境

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

二、功能模块

素材模块
游戏图片素材:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

BGM及音效素材:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

字体素材:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

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

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 = 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 __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 = position
    self.speed = 18
    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 __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 = position
    self.speed = speed
    self.active = False
    self.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 = 8

    def __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), -100
        self.speed = 5
        self.active = False
        self.mask = pygame.mask.from_surface(self.image)

    def move(self):
        if self.rect.top < self.height:
            self.rect.top += self.speed
        else:
            self.active = False

    def reset(self):
        self.active = True
        self.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 = 0
    self.BULLET_NUM = 4
    for i in range(self.BULLET_NUM):
        self.bullet1.append(bullet.Bullet1(self.hero.rect.midtop))

定义游戏难度部分源码:

def __create_start_image(self):
        # 定义难度属性
        self.easy = True
        self.common = False
        self.difficult = False
        # 飞机大战主题
        self.start = False
        self.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)

三、游戏效果

游戏开始效果:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

游戏战斗效果:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

游戏结束效果:
Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

四、完整项目下载

点我下载

五、作者Info

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

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

版权说明:本文禁止抄袭、转载 ,侵权必究!文章来源地址https://www.toymoban.com/news/detail-514288.html

到了这里,关于Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(54)
  • 第一篇【传奇开心果系列】Python的游戏库pygame技术点案例示例:深度解读实战开发飞机大战经典游戏案例

    开发飞机大战游戏不仅能满足广大玩家的娱乐需求,提供寓教于乐的学习机会,也是技术实践、创新实验和商业探索的重要载体,具有多维度的社会与经济价值。 开发飞机大战游戏具有多方面的意义,涵盖娱乐、教育、技术实践与创新等多个层面: 娱乐价值 : 休闲娱乐 :

    2024年04月23日
    浏览(89)
  • 基于Python的飞机大战游戏的设计与实现

    收藏关注不迷路    飞机大战是一种非常传统的电脑游戏,也是非常经典的游戏之一,经常可以在电脑,手机,以及各类便携式游戏机中见到。传统的老式飞行游戏以平面,灰白画面为主。而现在,随着计算机性能的飞速发展,我们目前可以在计算机上见到种类更加繁多的

    2024年02月04日
    浏览(41)
  • python小游戏毕设 飞机大战设计与实现

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 飞机大战小游戏设计与实现 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:3分 利用Python制作的一个简易版类\\\"飞机大

    2024年02月10日
    浏览(57)
  • python+pygame之飞机大战-第一版源代码分析

    目录 一、源代码 二、源代码梳理分析: (一)代码的主要结构 1、引用需要的模块 2、定义的类 3、定义main()函数:主程序 (二)代码分析收获 最好的学习方法是学习别人的代码,加上自己以前比较喜欢雷电这款游戏,所以就从飞机大战入手了,从网上下的源代码和图片素材

    2023年04月10日
    浏览(41)
  • python---简单游戏制作(飞机大战)

    1.开发软件 pycharm 编程软件 pygame 第三方库 sprite Group 2.技术介绍      pycharm: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供

    2024年02月12日
    浏览(47)
  • python——飞机大战小游戏

    目录 1、导入模块 2、窗口操作 3、事件操作 4、长按事件 5、添加游戏背景 6、添加英雄飞机 7、获取飞机的图片矩形 8、基本游戏窗口 9、添加游戏窗口图片 10、英雄飞机登场 11、英雄飞机装备子弹并发射 1、enemy_plane 2、game_main 3、game_map 4、game_score 5、hero_plane 6、plane_bullet 先安

    2024年02月03日
    浏览(66)
  • Python飞机大战小游戏

    游戏规则:键盘上下左右键控制飞机移动 游戏展示图片: 源码: 第一个py命名为:plane_main.py 第二py命名为:plane_sprites.py 素材图片image关注私信我获取!!!

    2024年02月10日
    浏览(55)
  • python小游戏开发(飞机大战)

    目录 一:背景       1. pygame 模块初识 二.项目设计内容 开发一款飞机大战游戏,要求: (1)实现飞机的移动、子弹发射,对本次游戏有一个初步的编写及认识。 (2)飞机的持续按键移动和飞机自爆优化。 (3)进行基类的抽取,使代码更具有层次性和简化重复代码。 (

    2024年02月16日
    浏览(48)
  • Pygame —— 一个好玩的游戏 Python 库

    在电子游戏的世界里,每一个精彩跳跃、每一个刺激冲刺、每一次动听的背景音乐,都是通过精心设计的代码和资源组合出来的奇幻体验。 想象一下,如果你能够制作自己的电子游戏,将内心的奇思妙想实现在屏幕上,那会是多么令人兴奋和自豪的事情。这个梦想,并不遥远

    2024年02月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包