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 一条线捋下来逻辑清楚、模块分明直接拿去改一改就能当毕设交。有任何问题欢迎在评论区交流。

相关新闻

5个场景深度解析:Bulk Crap Uninstaller如何重新定义Windows软件卸载体验

5个场景深度解析:Bulk Crap Uninstaller如何重新定义Windows软件卸载体验

5个场景深度解析:Bulk Crap Uninstaller如何重新定义Windows软件卸载体验 【免费下载链接】Bulk-Crap-Uninstaller Remove large amounts of unwanted applications quickly. 项目地址: https://gitcode.com/gh_mirrors/bu/Bulk-Crap-Uninstaller 在Windows系…

2026/7/29 14:36:58阅读更多 →
基于Arduino与加速度传感器的物流包裹冲击监测记录仪设计与实现

基于Arduino与加速度传感器的物流包裹冲击监测记录仪设计与实现

1. 项目概述:用数据为包裹“发声”最近在物流行业的一个技术交流群里,大家聊起一个老生常谈却又无解的话题:如何量化快递运输过程中的“暴力分拣”?靠监控?成本高、有死角,而且事后追责往往扯皮。靠用户投诉…

2026/7/29 14:34:57阅读更多 →
如何在Windows上快速运行Android应用:WSABuilds完整配置指南

如何在Windows上快速运行Android应用:WSABuilds完整配置指南

如何在Windows上快速运行Android应用:WSABuilds完整配置指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (ro…

2026/7/29 14:34:57阅读更多 →
物联网安全:SE050与PIC18F47K40硬件级防护方案

物联网安全:SE050与PIC18F47K40硬件级防护方案

1. 物联网安全现状与SE050的定位 在当今物联网设备爆炸式增长的环境下,安全问题已成为制约行业发展的关键瓶颈。根据行业统计,超过70%的物联网设备存在不同程度的安全隐患,从简单的数据泄露到关键基础设施被控,安全事件频发暴露出…

2026/7/29 15:39:12阅读更多 →
独立开发者如何用 AI 做用户研究:从「问卷」到「行为理解」

独立开发者如何用 AI 做用户研究:从「问卷」到「行为理解」

独立开发者如何用 AI 做用户研究:从「问卷」到「行为理解」 一、独立开发者的用户研究困境 独立开发者在做用户研究时,面临一个和结构化的产品团队完全不同的困境:没有专门的研究资源,但需要做研究;没有大量的用户访谈…

2026/7/29 15:39:12阅读更多 →
基于mPython与百度语音API的嵌入式语音交互项目实战

基于mPython与百度语音API的嵌入式语音交互项目实战

1. 从“Hello World”到“开口说话”:为什么选择mPython与百度语音 如果你玩过Micro:bit、掌控板这类开源硬件,或者接触过图形化编程,那你对mPython这个国产的图形化编程软件应该不陌生。它让编程变得像搭积木一样简单,尤其适合教…

2026/7/29 15:39:12阅读更多 →
Processing创意编程:用代码绘制动态玫瑰线,探索数学可视化

Processing创意编程:用代码绘制动态玫瑰线,探索数学可视化

1. 项目概述:当代码邂逅数学之美 如果你对创意编程感兴趣,或者曾经被Processing那种用代码“画”出动态视觉效果的魅力所吸引,那么“玫瑰线”绝对是一个绕不开的经典主题。这听起来像是一个纯粹的数学或艺术项目,但它的内核远不止…

2026/7/29 15:39:12阅读更多 →
监控告警轻量化:独立产品的「可观测性」够用就好的实践

监控告警轻量化:独立产品的「可观测性」够用就好的实践

监控告警轻量化:独立产品的「可观测性」够用就好的实践 一、当监控开始「监控一切」 独立开发者在做产品监控时,最容易过度设计的环节,可能就是「监控和告警」。 一个典型的场景是:产品初期,开发者引入了一个完整的 AP…

2026/7/29 15:39:12阅读更多 →
如何三步快速修复损坏视频:Untrunc免费开源工具完整指南

如何三步快速修复损坏视频:Untrunc免费开源工具完整指南

如何三步快速修复损坏视频:Untrunc免费开源工具完整指南 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否曾经遇到过珍贵的视频文件突然无法播放的…

2026/7/29 15:37:12阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →