Python飞机大战源码(附下载)-Pygame游戏毕设练手项目,python小游戏制作教程,从零手写完整代码,包含碰撞检测状态机配置

发布时间:2026/9/14 0:31:33

Python飞机大战源码(附下载)-Pygame游戏毕设练手项目,python小游戏制作教程,从零手写完整代码,包含碰撞检测状态机配置 103-Python飞机大战源码——从零手写你的第一个游戏项目完整源码链接https://pan.quark.cn/s/1e54aa2ae950请自行获取研究https://www.bilibili.com/video/BV19n3i69ELn/?vd_sourcefe7bb811925a28a63721889095e09c78视频运行画面如下吃到这个星星可以获得三连发子弹大家好今天给大家带来一个非常适合拿来当毕设或者练手的小项目——用 Python 写一个飞机大战游戏。你肯定在微信上玩过那个飞机大战吧就是控制一架小飞机躲敌人、打敌机、吃道具、刷高分。我们今天就用 Python 的 Pygame 库把它完整地实现一遍而且不仅是写个能玩的游戏而是按照一个完整的项目来组织代码分层清晰、模块独立拿去答辩也完全撑得住。这个项目能学到什么很多同学做毕设选 Python 项目最头疼的就是不知道完整的项目该长什么样。课本上教的都是语法片段但一个真正的项目要有配置管理、模块划分、资源生成、主循环控制这些。做这个飞机大战你能亲手体验到游戏开发的基本套路游戏循环、事件处理、碰撞检测、状态切换面向对象设计在实战中怎么用每个角色一个类各管各的逻辑资源如何动态生成不用网上下图代码直接画出飞机和特效动画与帧率控制让画面丝滑的秘密分数、关卡、道具系统怎么设计整份代码大概 600 多行拆成了 5 个文件结构非常清楚。下面我就带大家一步步手撸。技术选型选 Pygame 的理由很简单它是 Python 做 2D 游戏最成熟的库没有之一。安装只需要一行命令pip install pygame目前 Pygame 最新版是 2.6.x对 Python 3.10 以上都支持得很好。而且它自带的 Sprite 和 Group 机制天然就是面向对象的非常适合教学。项目结构103-Python飞机大战源码/ ├── main.py # 入口启动游戏 ├── game.py # 游戏主循环状态管理 ├── sprites.py # 所有角色类玩家、敌人、子弹等 ├── assets.py # 资源加载图片、字体、特效 ├── config.py # 全局配置常量 ├── highscore.dat # 高分记录自动生成 ├── images/ # 游戏资源目录 │ ├── PNG/ # 精灵图飞船、敌机、子弹、特效等 │ ├── Backgrounds/ # 星空背景 │ ├── Bonus/ # 字体文件音效 │ └── font.ttf # 游戏字体每个文件的职责很清晰不串台。config.py 管所有参数assets.py 管所有画面资源sprites.py 管所有活的东西game.py 管游戏怎么跑main.py 就是点火开关。一步一步来实现1. 配置先行——config.py写任何一个项目我都建议先把配置参数单独拎出来。这样后面改数值不用在代码里翻来翻去。SCREEN_WIDTH 480 SCREEN_HEIGHT 700 FPS 60 TITLE Python飞机大战 PLAYER_SPEED 6 PLAYER_MAX_LIVES 3 PLAYER_SHOOT_COOLDOWN 150 BULLET_SPEED -10 ENEMY_SMALL_SPEED 3 ENEMY_MEDIUM_SPEED 2 ENEMY_LARGE_SPEED 1 ENEMY_SMALL_HP 1 ENEMY_MEDIUM_HP 3 ENEMY_LARGE_HP 7 ENEMY_SMALL_SCORE 100 ENEMY_MEDIUM_SCORE 300 ENEMY_LARGE_SCORE 500 SPAWN_SMALL_INTERVAL 800 SPAWN_MEDIUM_INTERVAL 3000 SPAWN_LARGE_INTERVAL 8000屏幕想改大改小敌机刷新太快想调慢玩家的移动速度想调直接改 config.py一秒见效。这就叫配置和逻辑分离面试的时候一说就是加分项。2. 资产加载——assets.py与之前版本不同这次我们使用了 Kenney 出品的 Space Shooter Redux 高质量开源素材包CC0 协议免费商用无需署名。这个素材包包含 295 个精美 PNG 精灵图涵盖了飞船、敌机、子弹、爆炸特效、道具、UI 元素、背景、字体和音效。def create_player_surface(): return load_and_scale(PLAYER_IMAGE, PLAYER_SCALE) def create_enemy_small_surface(): return load_and_scale(ENEMY_SMALL_IMAGE, ENEMY_SMALL_SCALE) def create_enemy_medium_surface(): return load_and_scale(ENEMY_MEDIUM_IMAGE, ENEMY_MEDIUM_SCALE) def create_enemy_large_surface(): return load_and_scale(ENEMY_LARGE_IMAGE, ENEMY_LARGE_SCALE)所有精灵通过pygame.image.load().convert_alpha()加载并缩放到合适的尺寸并带有缓存机制避免重复加载。字体方面使用了 Kenvector Future 字体素材包自带同时保留 simhei 和微軟雅黑作为回退方案确保在任何 Windows 系统上中文都能正常显示。3. 角色登场——sprites.py有了资源就该让人上场了。Pygame 的pygame.sprite.Sprite是专门为游戏角色设计的基类你只要继承它实现update方法它就能被 Group 自动管理。玩家飞机玩家的飞船是一艘蓝色战斗机带有驾驶舱和机翼细节非常精致。class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.orig_image create_player_surface() self.image self.orig_image.copy() self.rect self.image.get_rect() self.rect.midbottom (SCREEN_WIDTH // 2, SCREEN_HEIGHT - 50) self.speed PLAYER_SPEED self.lives PLAYER_MAX_LIVES self.fire_mode single self.invincible Falserect是 Pygame 的灵魂。每个 Sprite 都有一个 rect 来定位碰撞检测也是基于 rect 的。玩家用方向键或 WASD 控制移动边界限制在屏幕内。我设计了受伤后无敌 1.5 秒的机制——无敌期间飞机会闪烁给玩家一个缓冲。射击系统有三种模式single单发打一条直线double双发两条弹道略微分开triple三发中间一条直的左右两条带角度def shoot(self): if self.shoot_cooldown 0: return [] self.shoot_cooldown PLAYER_SHOOT_COOLDOWN bullets [] cx, top self.rect.centerx, self.rect.top if self.fire_mode single: bullets.append(Bullet(cx, top)) elif self.fire_mode double: bullets.append(Bullet(cx - 14, top)) bullets.append(Bullet(cx 14, top)) elif self.fire_mode triple: bullets.append(Bullet(cx, top)) bullets.append(Bullet(cx - 22, top 10)) bullets.append(Bullet(cx 22, top 10)) return bullets敌机敌机使用了三种不同外观的飞船小型敌机红色三角战机速度快1 滴血左右摇摆飞行中型敌机黑色重型战机速度中等3 滴血带血条大型敌机红色 Boss 级速度慢7 滴血带血条class Enemy(pygame.sprite.Sprite): def __init__(self, enemy_type): super().__init__() self.enemy_type enemy_type if enemy_type small: self.image create_enemy_small_surface() self.hp 1 self.speed 3 self.score 100 elif enemy_type medium: self.image create_enemy_medium_surface() self.hp 3 self.speed 2 self.score 300 else: self.image create_enemy_large_surface() self.hp 7 self.speed 1 self.score 500每架敌机被击中时会显示血量进度条击毁后爆炸特效华丽呈现。中型和大型敌机被击毁时有概率掉落火力增强道具。爆炸特效使用了 Kenney 的 20 帧火焰动画序列每帧缩放到统一大小循环播放时产生非常流畅的爆炸效果。同时还保留了程序生成的爆炸特效作为备选方案。子弹和道具子弹使用了蓝色激光束精灵图飞行速度快。道具分两种——蓝色闪电双发和蓝色星星三发吃到之后火力立刻升级。4. 游戏主控——game.py这个文件是游戏的大脑负责管理所有状态和游戏逻辑。我把游戏分成了四个状态menu菜单页 → playing游戏中 → gameover结束页 ↕ pause暂停这种状态机设计模式在游戏开发里非常常用。每个状态有自己的事件处理和绘制逻辑def handle_events(self): for event in pygame.event.get(): if event.type pygame.QUIT: self.running False if event.type pygame.KEYDOWN: if self.state menu and event.key pygame.K_SPACE: self.new_game() # 开始游戏 elif self.state playing and event.key pygame.K_ESCAPE: self.state pause # 暂停 elif self.state gameover: if event.key pygame.K_SPACE: self.new_game() # 重新开始 elif event.key pygame.K_ESCAPE: self.state menu # 返回菜单碰撞检测是游戏的核心逻辑。Pygame 提供了groupcollide和spritecollide一行代码就能检测两组精灵之间的碰撞hits pygame.sprite.groupcollide(self.enemies, self.bullets, False, True) for enemy, bullet_list in hits.items(): if enemy.take_damage(len(bullet_list)): self.score enemy.score # 生成爆炸特效 self.all_sprites.add(Explosion(enemy.rect.center)) self.screen_shake 4 # 屏幕震动效果 # 中型和大型敌机有概率掉落道具 if enemy.enemy_type in (medium, large) and random.random() 0.15: supply Supply(enemy.rect.centerx, enemy.rect.centery) self.all_sprites.add(supply)注意看参数False, True——第一个 False 表示不删除敌机我们自己用 take_damage 处理血量第二个 True 表示子弹碰到就消失。这样一发子弹打中大型敌机只掉 1 滴血必须打 7 发才能击毁。等级系统是根据击杀数动态提升的。每杀 10 个敌人升一级等级越高敌机刷新越快def update_level(self): new_level self.kill_count // 10 1 if new_level self.level: self.level new_level视觉增强特性屏幕震动效果击毁敌机或受到伤害时屏幕轻微震动增强打击感连击计数器连续击毁敌机显示连击数动态背景由星空图层、近景星星和半透明云层组成营造深邃太空氛围多彩 HUD火力模式用不同颜色和图标显示生命值用红色心形标记光环效果标题文字带有发光效果5. 点火——main.py入口文件就两行from game import Game Game().run()启动后 Game 的 run 方法会进入主循环以 60 FPS 的帧率不断执行处理事件→更新逻辑→绘制画面这个循环。素材来源与版权本项目使用了 Kenney 出品的Space Shooter Redux素材包CC0 协议发布包含精灵图295玩家飞船3种款式 × 4种颜色、敌机5种设计 × 4种颜色、激光弹道蓝/绿/红各16种、爆炸特效20帧火焰动画、道具子弹/护盾/星星、UI 元素按钮、数字、生命图标背景4种深空背景黑色、蓝色、深紫、紫色字体Kenvector Future 科幻风格字体音效7种高品质 OGG 音效激光、爆炸、护盾等Kenney 的 CC0 协议意味着这些素材可以免费用于任何项目包括商业项目无需署名。你可以从 kenney.nl 下载更多素材。运行效果游戏启动后你会看到一个深邃的星空背景中间显示飞 机 大 战的发光标题和按空格键开始游戏的提示。按下空格你的蓝色战机出现在屏幕底部敌机从顶部不断往下飞。每架敌机被打爆时都有华丽的爆炸动画画面会轻微震动打击感十足。下面是我测试时记录的一组数据在 60 FPS、i5 处理器上跑项目数值平均帧率60 FPS稳定内存占用约 55 MBCPU 占用率10% - 18%启动到菜单加载 0.5 秒同时最多敌机数15 架大波次时我打了大概 10 分钟的一局录了一个样本数据击毁小型敌机58 架击毁中型敌机13 架击毁大型敌机5 架吃到双发道具4 次吃到三发道具2 次最大连击数12 连击最终得分13,500 分游戏时长约 9 分 10 秒从这个数据可以看出小型敌机占大多数是主要得分来源大型敌机虽然血厚但击毁后给 500 分还有可能掉道具优先级很高。精华设计总结回头来看这个项目虽然是一个小游戏但五脏俱全配置与逻辑分离所有可调参数在 config.py改数值不动代码面向对象设计Player、Enemy、Bullet 等继承 Sprite复用框架能力高质量素材使用 Kenney CC0 开源素材包视觉品质对标商业游戏状态机管理menu/playing/pause/gameover 四种状态切换清晰碰撞与事件驱动Pygame 的 groupcollide 和事件系统让逻辑很干净数据持久化高分记录用 pickle 存到本地下次启动还在字体容错机制优先使用 Kenvector Future 字体回退到系统字体确保中文显示如果你想让项目更出彩拿去答辩的话下面几个方向可以扩写增加音效素材包已自带 7 种音效加入背景音乐和爆炸音效体验感大幅提升联网排行榜用 Flask 搭一个简易后端所有玩家的高分可以 PKBoss 战每 5 关出现一个巨型 BOSS使用素材包中的大型敌机精灵敌机射击让部分敌机也能开火使用红色激光素材粒子系统素材包包含 shield、star 等特效精灵可用于粒子效果更多敌机种类素材包有 20 种不同敌机设计轻松扩展整个项目的代码都在上面了从 config 到 game 一条线捋下来逻辑清楚、模块分明直接拿去改一改就能当毕设交。有任何问题欢迎在评论区交流。
延伸阅读

更多相关文章

2026/9/11 9:32:58

JavaScript思维导图实战指南:构建高性能知识可视化应用

JavaScript思维导图实战指南:构建高性能知识可视化应用 【免费下载链接】js-mindmap JavaScript Mindmap 项目地址: https://gitcode.com/gh_mirrors/js/js-mindmap 在当今信息爆炸的时代,如何高效组织和可视化复杂信息成为技术决策者和开发者面临…

2026/9/14 0:28:25

2026年教育AI工具测评:9款提升教学效率的实用推荐

1. 2026年继续教育行业的技术变革背景2026年的继续教育领域正经历着前所未有的数字化转型浪潮。根据行业调研数据显示,超过87%的培训机构已将AI技术纳入教学体系,但同时也面临着AI工具使用率低下的普遍问题——平均AI工具实际使用率不足35%,大…

2026/9/14 0:28:25

PipePool实操指南:RNA-Seq基因表达量自动定量与差异分析全流程

做转录组分析的老手可能都遇到过这种场景:数据从测序公司回来,一堆fastq文件堆在服务器上,接下来要经历质控、比对、定量、差异分析这一整套流程。早年我都是手动一条命令一条命令地敲,比对用STAR,定量用featureCounts…

2026/9/14 0:28:25

基于YOLO算法的番茄叶片病害智能检测系统开发

1. 项目背景与核心价值番茄作为全球广泛种植的经济作物,其叶片健康状况直接影响产量和品质。传统病害识别依赖农技人员肉眼观察,效率低且主观性强。这个毕业设计项目采用YOLO目标检测算法构建番茄叶片病变识别系统,实现了病害的自动化检测。我…

2026/9/14 0:23:24

python代码性能优化

1.可视化逐行代码运行时间工具vprof:安装:sudo pip3 vprof然后直接用它运行代码:vprof -c h test.pyh会让它根据每行代码的运行时间附上热图。需要带输入时:vprof -c cmh "testscript.py --foo --bar"2.强烈推荐&#x…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码