Pygame飞机大战工程拆解:代码与素材的完整游戏开发指南
简介一套结合源码与视觉素材的飞机大战游戏开发资料包基于面向过程和面向对象两种编程范式给出完整Python实现。面向过程版将游戏拆分为初始化、渲染、事件处理、更新与主循环等模块面向对象版通过Plane、Bullet、Enemy等类的定义、封装与碰撞检测方法清晰展示继承、多态在游戏实体管理中的应用适合对照学习两种程序设计思想。压缩包共77个文件约1.95MB包含2个py源码、62个png图片、9个gif动画及少量jpg背景图与辅助文件图片素材覆盖飞机、子弹、背景、爆炸特效和UI元素可直接用于替换或扩展游戏画面。已有2576人学习无论初学者还是希望开拓思路的开发者都能借助这份完整可运行的代码和素材快速搭建自己的空战小游戏并深入掌握游戏循环、实体管理和碰撞检测等核心逻辑。1. 拆解飞机大战项目这套代码加素材不只是练手Demo飞机大战这个经典题材看起来只是一个练手Demo可真正把代码和素材拆开看里面覆盖了游戏开发最核心的几件事主循环、对象生命周期、碰撞检测、资源加载。这套飞机大战代码和对应的图片素材包解压后是一个完整的Pygame工程代码和素材一一对应改一张图片或调一个数值游戏行为马上就能看到变化。它适合刚学完Python语法、想找一个能立刻跑通的项目来验证自己的新手也适合想快速做2D玩法原型的开发者——不需要从零搭窗口和事件循环直接在现有工程上改就行。素材包里那些PNG不是装饰它们直接决定了碰撞范围、渲染层级和UI表现。2. 技术选型与工程结构素材与代码如何组成一个完整游戏2.1 为什么是PythonPygame素材包与代码的匹配逻辑这套资源里的图片素材全是PNG格式透明背景、尺寸统一这在Pygame里几乎是最友好的格式。Pygame的Surface体系直接支持PNG的alpha通道加载一个PNG到内存里渲染时透明区域自动处理不需要额外转格式。选Pygame而不是Unity或Godot核心原因就一个字轻。一个窗口加一个while循环就能跑起游戏素材包里的图片直接用pygame.image.load()加载不需要经过任何资源管线。对这份代码和素材而言Python脚本控制逻辑、PNG图片定义外观两者通过Surface和Rect两个对象对接。玩家飞机图片加载后拿到一个Surface再调用get_rect()得到一个矩形区域这个矩形既是绘制位置也是碰撞检测的基础。整个工程里代码对素材的引用全部集中在资源加载模块中没有散落得到处都是改动时只需要确认文件名匹配即可。提示Pygame对PNG的alpha通道支持不需要额外安装依赖但图片建议使用8位或32位色深避免压缩工具导出的低位PNG出现边缘锯齿。有个朋友之前把飞机大战搬到Unity里做过一遍素材导入、预制体、物理碰撞、场景加载一套流程走完光是把PNG拖进Asset面板调整导入设置就花了半小时。Pygame没有这些概念图片就是Surface位置就是Rect一行代码加载一张图帧循环自己控制非常适合这套素材包的大小体量。素材包里大概包含十几张PNG和几个音频文件用引擎管理反而显得冗余用脚本直接引用每一处加载都能看懂。2.2 目录结构解析每个文件夹在游戏里的实际职责解压后的目录结构大致如下代码和素材分开放但加载路径是写死相对路径的换句话说整个文件夹移动位置不影响正常运行。plane_war/ ├── main.py # 游戏入口主循环所在 ├── config.py # 全局配置窗口尺寸、帧率、路径常量 ├── resources/ │ ├── images/ # 所有PNG素材 │ │ ├── player.png # 玩家飞机 │ │ ├── enemy1.png # 小型敌机速度快 │ │ ├── enemy2.png # 大型敌机耐久高 │ │ ├── bullet.png # 玩家子弹 │ │ └── background.png # 滚动背景图 │ ├── sounds/ # 音效与背景音乐 │ │ ├── shoot.wav │ │ └── explosion.wav │ └── fonts/ # 字体文件用于分数显示 ├── sprites/ │ ├── __init__.py │ ├── player.py # 玩家飞机逻辑 │ ├── enemy.py # 敌机逻辑 │ └── bullet.py # 子弹逻辑 └── utils/ ├── __init__.py └── resource_manager.py # 素材加载的统一入口main.py负责创建窗口和启动主循环config.py把所有可调参数集中在一起。sprites目录下是三个核心游戏对象每个文件对应一个类类的属性几乎都来自素材图片比如player.py里会加载player.png作为默认外观enemy.py里根据config里的类型加载enemy1或enemy2。这种分法最大的好处是想改玩家飞机造型时只需要替换resources/images/player.png或者改一行代码指向新文件不需要动任何逻辑。utils/resource_manager.py是整个素材访问的入口所有图片、音效、字体都在这里被加载一次并缓存起来后续代码通过一个字典按名称取用。这个模块还顺带处理了加载失败的兜底——当某张图片文件缺失时它会生成一个纯色Surface占位让游戏继续运行而不是直接崩掉。resource_manager的常见实现是一个load_image函数负责尝试加载失败时创建占位surface再提供一个get_image接口供外部取图。这样主循环里的代码不会出现任何直接拼接resources路径的字符串所有素材引用都经过这一层转发。也正因为如此之后打包exe时只需要改这一个文件里的路径解析逻辑游戏其他部分完全不用动。如果后续要把游戏横屏改成竖屏或者换一套宇宙主题只需要动resources/images里对应的素材文件和config.py里的窗口尺寸代码逻辑基本不动。这也是这类资源包和纯代码工程最大的区别美术素材被当成可替换的配置项而不是被硬编码在逻辑里。2.3 游戏主循环拆解初始化、事件、更新、渲染的执行顺序Pygame游戏的骨架是主循环整套代码最核心的执行顺序就在这里。初始化阶段先加载素材、创建精灵组然后进入while循环每一次循环完成事件处理、逻辑更新、碰撞检测、渲染四步。def main(): pygame.init() screen pygame.display.set_mode((config.SCREEN_WIDTH, config.SCREEN_HEIGHT)) clock pygame.time.Clock() all_sprites pygame.sprite.Group() bullets pygame.sprite.Group() enemies pygame.sprite.Group() # 初始化玩家、创建初始敌机、加载背景 running True while running: for event in pygame.event.get(): if event.type pygame.QUIT: running False # 1. 按帧读取键盘输入更新玩家坐标 # 2. 敌机自动向下移动子弹向上移动 # 3. 调用碰撞检测处理命中与爆炸 # 4. 玩家死亡时生成爆炸特效并结束游戏循环 all_sprites.update() # 碰撞检测 hits pygame.sprite.groupcollide(bullets, enemies, True, True) for hit in hits.values(): score 10 # 渲染 screen.blit(background, (0, 0)) all_sprites.draw(screen) pygame.display.flip() clock.tick(config.FPS) pygame.quit()set_mode里的元组是窗口宽高来自config.pyClock对象的tick方法控制帧率参数是每秒最大帧数常见设置为60。这里所有精灵对象都放在Group里update一次就把所有对象的坐标刷新一遍draw一次就把所有对象的图片画上去这就是Pygame的批处理模型。整个循环的顺序很重要如果先渲染再更新画面上会滞后一帧如果碰撞检测放在更新之前子弹和敌机的位置就不准确。事件处理这里不只处理QUIT还包括键盘按下和抬起。飞机大战里的“持续按住方向键移动”用的是pygame.key.get_pressed()每帧读取当前所有按键状态“单次射击”则监听KEYDOWN事件避免按住空格时一帧发射多颗子弹。两种输入方式在这个循环里是共存的语义不同用途也不同。主循环的设计直接影响手感这也是为什么这个项目没有把输入散落在各个精灵里而是在循环里集中处理后再分发给精灵对象。3. 核心模块拆解一条子弹从发射到命中敌机的完整链路3.1 精灵基类设计玩家、敌机、子弹共用的生命周期管理这套工程的三个精灵类都继承pygame.sprite.Sprite。每个精灵类的初始化都围绕两个属性展开image负责视觉外观rect负责位置和碰撞范围。image来自素材加载rect从image上自动获取这样图片多大接触判定范围就多大二者天然一致。class Bullet(pygame.sprite.Sprite): def __init__(self, x, y, speed-12): super().__init__() self.image resource_manager.load_image(bullet) self.rect self.image.get_rect() self.rect.centerx x self.rect.bottom y self.speed speed def update(self): self.rect.y self.speed if self.rect.bottom 0: self.kill() # 超出屏幕顶部后自动销毁这里的speed是负数因为子弹向上飞。初看会觉得速度写死成-12很怪但把它放在构造参数里是有意的敌机子弹调用Bullet时传入正数speed同一个类就能复用不需要单独写一个EnemyBullet类。rect.y每次更新移动speed像素当子弹完全飞出屏幕顶部后调用kill()把自己从所属的Group里移除避免内存里堆着一堆看不见的对象。这个方法覆盖了整个游戏里所有“出了屏幕就消失”的场景敌机、特效也遵循同样的逻辑。3.2 子弹的发射与回收对象池避免高频创建带来的卡顿玩家按住空格键时每帧都可能产生新的子弹如果直接实例化然后等它飞出屏幕再销毁Python对象创建和垃圾回收的开销会在弹幕密集时体现为肉眼可见的卡顿。这里可以走对象池的思路预先创建一批子弹对象发射时从池子里取一个“复活”飞出屏幕后再“回收”。class BulletPool: def __init__(self, size40): self.pool [Bullet(0, -100) for _ in range(size)] def shoot(self, x, y): for bullet in self.pool: if bullet.rect.bottom 0: # 屏幕外视为空闲 bullet.rect.centerx x bullet.rect.bottom y bullet.add(bullet_group) return bullet return None对象池的判断条件是“子弹当前位置是否在屏幕内”在屏幕外就说明它是空闲的可以重新初始化并放回Group。这个方案比频繁创建销毁干净得多40个子弹的池子在普通弹幕场景下完全够用密度再大就把size参数加倍。这里有一个细节值得注意pool列表里的子弹对象始终存在但只有在shoot方法里被重新放置到屏幕内并add到Group中的才会参与渲染和碰撞。“池子里有对象”和“屏幕上能看到”是两个状态理解了这个区分之后想加子弹回收特效就很容易——监听kill事件在子弹消失的位置生成一个爆炸粒子就行。3.3 碰撞检测的三种实现从矩形到像素级判定的取舍初版最直接的碰撞写在主循环里用的是pygame.sprite.groupcollide本质是拿两个精灵的rect做矩形相交判断代码量最少但视觉误差经常让玩家觉得“明明没碰到就死了”。# 矩形碰撞 hits pygame.sprite.groupcollide(bullets, enemies, True, True)这种写法对子弹、玩家、敌机都有效问题出在素材图片上。飞机大战的PNG通常有透明边缘比如玩家飞机两侧的翅膀根部是透明的但矩形框是完整的图片外框碰撞时透明区域也会被当作实体。弹幕密集时子弹擦着透明边缘飞过也会判定命中非常影响手感。升级方案是把矩形碰撞换成圆形碰撞用圆去近似飞机的主体区域圆心和半径可以写在每个精灵类内部。Pygame还提供了像素级检测的mask模块pygame.mask.from_surface可以生成图片的非透明区域蒙版再调用overlap做逐像素判断。但像素级检测开销大弹幕数量一多全局帧率就往下掉。常见做法是先用矩形碰撞做粗筛命中后再在接近的几对精灵之间调用mask做精判这是性能和精度的平衡点。3.4 分数与生命值字体、图片素材与UI渲染的联动分数显示用到resources/fonts下的字体文件和pygame.font.Font核心是因为中文字体在Pygame默认字体下会乱码。如果只显示数字系统字体就够用但项目要显示“得分”“生命值”几个汉字就必须指定字体文件路径。font pygame.font.Font(resources/fonts/simhei.ttf, 24) score_text font.render(f得分: {score}, True, (255, 255, 0)) screen.blit(score_text, (10, 10))Font的第二个参数是字号render的第三个参数是颜色元组(R, G, B)返回一个新的Surface再通过blit画到屏幕指定位置。这里每帧都调用render生成文本虽然每次都会创建新Surface但UI文本量小性能可接受。生命值则用一组小心形PNG来表示每减少一条命就少画一个视觉反馈比纯数字直观得多。这类美术资源和代码逻辑的联动正是这份素材包存在的意义——没有图片代码只能画色块游戏的可玩性和观感全靠这些PNG撑起来。4. 运行与调试从rar解压到通关第一局的完整操作4.1 环境准备Python与Pygame的版本匹配运行这套代码需要Python 3.8以上版本和对应版本的Pygame。Pygame 2.x和1.x在部分API上有差异建议直接安装Pygame 2.x因为这套代码用到的精灵组、mask模块在2.x里都更稳定。python -m pip install pygame装完马上验证版本python -c import pygame; print(pygame.ver)如果提示找不到模块大概率是当前环境里有多个Python版本混杂。Windows下常见的是商店版和官网版同时存在pip默认指向其中一个python命令却指向另一个。用python -m pip install能保证装到python命令所在的解释器里。如果是macOS系统自带的Python被替换成Python 3之后pip和python的对应关系经常出问题建议直接建一个虚拟环境隔离。python -m venv venv source venv/bin/activate pip install pygame虚拟环境里装完依赖项目跑不起来时排查范围就缩小了不会出现“这套代码在别人电脑上能跑”这种玄学问题。4.2 启动游戏入口文件与运行参数解压rar后进入主目录用终端跑main.py。注意别双击main.py素材路径是相对路径工作目录不对就会加载失败。cd plane_war python main.py跑起来后手感相关的参数都集中在config.py里。调参时每次改动需要重启游戏才生效但因为修改的是常量重启也就是按一次方向键的事实际调试时大家习惯直接改数值、立刻跑一遍看效果。config.py里最值得关心的核心配置如下SCREEN_WIDTH 480 SCREEN_HEIGHT 700 FPS 60 PLAYER_SPEED 6 ENEMY_SPEED 3 ENEMY_SPAWN_INTERVAL 30参数作用调整建议SCREEN_WIDTH / SCREEN_HEIGHT窗口尺寸需要和背景图尺寸一致改成竖屏比例可以模拟移动端FPS每秒刷新帧数60为标准低配降到30PLAYER_SPEED玩家飞机每帧移动像素数值越大操控感越飘ENEMY_SPEED敌机每帧下移像素想增加难度可以逐步调大ENEMY_SPAWN_INTERVAL敌机生成间隔帧越小弹幕越密这些参数里ENEMY_SPAWN_INTERVAL最值得调。它决定敌机生成的密度数值从30改成15关卡难度直接翻倍改成60则接近休闲模式。后续想做关卡制只需要在每关结束时把config里的这个值除以一个系数。4.3 素材加载失败的排查路径路径、大小写与格式素材加载失败是运行阶段最常遇到的坑典型现象是窗口能打开但画面里缺图片或者直接抛FileNotFoundError。排查顺序固定三条第一步确认工作目录正确。在main.py第一行打印os.getcwd()看当前目录是不是项目根目录。如果在IDE里启动工作目录经常被设成脚本所在目录相对路径就全断了。让路径稳定的做法是入口文件开头强制切到项目根目录import os os.chdir(os.path.dirname(os.path.abspath(__file__)))第二步核对文件名大小写。Windows下Pygame加载图片不区分大小写但Linux和macOS区分素材文件叫Player.png而代码里写的是player.png在Mac上就直接报错。把resource_manager里的图片名统一用小写管理可以规避这个问题。第三步确认图片格式。Pygame支持常见的PNG和JPG但某些版本不内置WEBP支持如果素材包里有WEBP格式的图片加载后会得到一张全黑Surface画面表现为背景消失。用PIL批量转成PNG最省事前提是先装上pillowfrom PIL import Image img Image.open(bg.webp) img.save(background.png)一般来说只要工作目录正确、文件名完全一致、格式为PNG加载就能通过。这条排查顺序在打包成exe后同样适用只是素材路径从相对路径变成了临时解压目录。5. 避坑记录路径、帧率与碰撞精度的五个实战问题这章列的是我跑这个项目和改代码时踩过的几个真坑基本都是文档里不会写、只有跑崩了才明白的问题。帮别人远程看这个项目时十个里面有八个会撞上下面五类情况。5.1 图片不显示工作目录与素材路径的错位现象是运行后窗口正常但玩家飞机、敌机、背景全部缺席终端也没有报错。原因是Pygame加载图片失败时只打印警告不中断程序resource_manager生成的占位Surface是全透明或纯色看起来就像什么都没画。这个坑在IDE里尤其常见因为IDE默认把工作目录设成当前打开文件所在的目录。解决在入口文件第一行固定工作目录保证任何方式启动都从项目根目录找素材。import os os.chdir(os.path.dirname(os.path.abspath(__file__)))如果你不想动main.py也可以把resource_manager里所有相对路径改成基于项目根目录拼出来的绝对路径但这样项目一移动位置就要重新改不如统一固定在入口文件里。5.2 游戏速度忽快忽慢没有启用帧率独立运动现象是同一关玩两遍敌机和子弹速度明显不同帧率高的时候像开了加速帧率一低又变慢动作。根本原因是update()里每次移动固定像素没有与时间挂钩。60帧下每帧移动2像素10帧下每帧还是2像素物理速度差了6倍。解决方式是启用帧率独立运动dt clock.get_time() / 16.667 self.rect.y self.speed * dtclock.get_time()返回上一帧耗时毫秒除以16.66760帧时每帧的理论毫秒数得到标准化系数。帧率高时dt小于1帧率低时dt大于1最终像素位移始终对应真实时间。改完这一处游戏在不同配置的电脑上速度基本一致。这是最容易被忽略、但影响最严重的问题之一。5.3 碰撞判定太“宽容”矩形框比图片透明区域大现象是玩家明明躲开了子弹还是被判定命中而且越接近机翼越明显。原因是groupcollide用rect做检测rect是图片的外接矩形包含大量透明像素。Pygame的mask模块能直接读取PNG的alpha通道但全量逐像素检测消耗较大。常见做法是矩形粗筛加mask精判if pygame.sprite.collide_rect(bullet, player): bullet_mask pygame.mask.from_surface(bullet.image) player_mask pygame.mask.from_surface(player.image) offset (player.rect.x - bullet.rect.x, player.rect.y - bullet.rect.y) if bullet_mask.overlap(player_mask, offset): player.hit()粗筛负责排除绝大部分互不相干的对象精判只对确实接近的子弹和玩家做mask运算。实测同屏400发子弹时粗筛过滤后只有十几对需要精判性能损失很小。所有飞机大战类项目碰撞手感差基本都出在这一层。5.4 爆炸特效闪白或闪烁图片尺寸、格式与颜色空间不匹配现象是爆炸动画播放时画面出现大面积白色闪光特定角度下特别刺眼。这是素材图片的surface格式和窗口surface格式不匹配导致blit时逐像素转换颜色空间透明区域被错误转换成了白色。解决方法是加载后统一调用convert_alphadef load_image(name): img pygame.image.load(path).convert_alpha() return imgconvert_alpha()的作用是把图片surface转换成和显示屏幕相同的像素格式同时保留alpha通道。所有素材图片加载后都调用一次blit过程不再做隐式转换闪烁自然消失。这里要注意convert_alpha必须在pygame.display.set_mode之后调用否则没有可用显示模式会直接报错。5.5 音效播不出或破音混音器参数与音频文件格式不匹配现象是射击音效偶尔丢爆炸音效破音。Pygame的mixer初始化如果没指定参数会按SDL默认值处理碰上采样率不同的wav文件就会重采样声音发闷甚至破音。初始化时显式指定参数pygame.mixer.pre_init(44100, -16, 2, 512) # 采样率、位深、声道数、缓冲块 pygame.init()44100是采样率-16表示16位有符号深度2是双声道512是缓冲块大小。配置之后绝大多数wav文件都能正确播放。如果素材里有mp3格式还得确认SDL_mixer的mp3支持是否完整有些环境支持不完整会直接静音换成ogg格式最稳妥。6. 二次开发改造把飞机大战升级成弹幕射击的几条路径6.1 加一个Boss战状态机替代固定路径AI现有敌机是直线下移加Boss前先把敌机AI抽象成状态机。简单做法是给Boss类加一个phase字段用字符串表示“入场-瞄准-射击-撤退”四个阶段update()里根据phase执行不同逻辑。Boss图片可以直接在resources/images里新增一张大PNG。class Boss(pygame.sprite.Sprite): def __init__(self): self.phase enter self.timer 0 def update(self): self.timer 1 if self.phase enter and self.timer 60: self.phase aim elif self.phase aim and self.timer % 20 0: self.shoot_toward_player()timer在这里是帧计数器每帧加160帧约一秒。Boss每20帧朝玩家方向发射一轮弹幕弹幕方向需要计算玩家当前位置和Boss位置的向量并归一化这部分可以借用pygame.math.Vector2比手算角度省事。6.2 改双人模式事件处理与输入映射Pygame支持多个键盘同时读取双人模式只需要把事件循环里的按键判断从单个方向键扩展为两组按键映射。玩家2的移动可以用pygame.key.get_pressed()的返回值判断渲染时给两个玩家绘制不同机身图片碰撞检测用两个精灵组分别处理。需要额外注意双方子弹不要误伤子弹精灵需要一个owner属性区分归属。6.3 把项目打成exe资源包可以打包给没有Python环境的朋友玩用PyInstaller打包时注意把resources目录一起带上并修改resource_manager里的路径解析读取打包后的临时目录。pyinstaller -F -w --add-data resources;resources main.py-F表示单文件-w表示无控制台窗口--add-data把resources目录塞进exe里。Windows下用分号分隔macOS和Linux下改成冒号。代码侧需要通过sys._MEIPASS获取临时解压目录再拼上资源路径。打包完的exe放到任何电脑都能运行图片和字体全部内嵌这是二次开发交付阶段最实用的一步。我最初跑这个项目时花了一上午才把素材路径和帧率的问题捋顺。从那以后每次拿到一份新的游戏工程我都先看它的工作目录和素材加载模块再把主循环里的tick和dt检查一遍。这两个点确认没问题剩下的才是玩法层面的工作。这套飞机大战代码和素材包的组合作为入门工程去读或作为原型去改都够扎实希望帮到你。本文还有配套的精品资源点击获取

相关新闻

pgvector新版本向量检索评测:HNSW索引性能与调优实战

pgvector新版本向量检索评测:HNSW索引性能与调优实战

pgvector新版本的向量检索评测,是我最近两周一直压在手里的一件事。业务里有一个用户向量召回场景,数据量从百万级涨到接近千万级,旧的索引方案撑不住查询耗时,我不得不把眼光放到扩展的新版本上。这篇文章不是什么官方评测&#…

2026/10/17 8:39:24 阅读更多 →
栈与图遍历落地:C++老鼠走迷宫课设全解析

栈与图遍历落地:C++老鼠走迷宫课设全解析

简介:一份基于C与数据结构课程设计的“老鼠走迷宫”完整项目资源,适合高校学生在学习图、栈、队列与搜索算法时参考实践。资源将迷宫抽象为二维数组图结构,以0表示可通行路径、1表示墙壁,借助随机迷宫生成、深度优先搜索&#xff…

2026/10/17 8:39:24 阅读更多 →
因果感知的无监督特征选择:从相关性陷阱到稳定可靠的特征筛选

因果感知的无监督特征选择:从相关性陷阱到稳定可靠的特征筛选

做特征选择做到一定程度,很多人都会碰到同一个尴尬局面:离线评测指标都挺漂亮,一换数据来源、一换批次,之前精心挑出来的特征组合就明显掉链子。问题往往不在模型过拟合,而是你选的特征本质上只是“跟目标变量长得像”…

2026/10/17 8:39:24 阅读更多 →

最新新闻

WSL+tmux从零配置到实战:打造Windows高效命令行环境

WSL+tmux从零配置到实战:打造Windows高效命令行环境

最近帮朋友把一台Windows系统配成日常开发环境,发现很多人其实对WSL和tmux这两个名字都熟悉,但真正组合起来用的不多。我在Windows 10/11上用WSL跑了挺久,命令行工作从git到批量改文件、编译、挂机跑脚本,基本都搬进了tmux里。这篇…

2026/10/17 9:28:39 阅读更多 →
Linux home目录迁移实战:rsync、权限与挂载全解析

Linux home目录迁移实战:rsync、权限与挂载全解析

1. 迁移home目录这件事,远比你想的要折腾很多人第一次听到“迁移home目录”,脑子里浮现的画面大概就是拖拽文件夹,等进度条走完,重启,收工。我当初也是这么想的,直到有一次在一台用了三年的开发机上动手&am…

2026/10/17 9:28:39 阅读更多 →
SBTI科学碳目标解读:企业如何完成从碳盘查到目标获批的减排路径

SBTI科学碳目标解读:企业如何完成从碳盘查到目标获批的减排路径

不知道从什么时候开始,供应链问卷、招标文件、投资者沟通材料里,越来越多的企业开始主动或被动地聊起“SBTI”这三个字母。我印象很深的一件事是,早几年给客户做碳排放规划,方案做完了,对方一句“先放一放,…

2026/10/17 9:28:39 阅读更多 →
ClickHouse日志平台实战:从ES迁移、表结构设计到查询调优

ClickHouse日志平台实战:从ES迁移、表结构设计到查询调优

做大数据的人,迟早要跟日志打交道。业务日志、访问日志、服务日志、安全审计日志,哪一类都是量大、格式杂、查询需求刁钻。我最早用Elasticsearch做日志平台,后来数据量上来之后,集群规模、存储成本、查询毛刺这些问题接踵而至&am…

2026/10/17 9:28:39 阅读更多 →
2026年AI大模型API聚合平台排名揭晓:这三家平台表现出彩,助你开发无忧

2026年AI大模型API聚合平台排名揭晓:这三家平台表现出彩,助你开发无忧

进入2026年,大模型的迭代节奏快得让人应接不暇,GPT-5.4、Claude4.6、Gemini3.1Pro 几乎每个月都有新版本放出来。对开发者而言,逐家注册账号、分别保管密钥、各自编写适配逻辑的传统做法,已经很难跟上这种月更速度,API…

2026/10/17 9:28:39 阅读更多 →
不完全信息Epsilon纳什均衡在航天器末端追逃博弈的Matlab实现

不完全信息Epsilon纳什均衡在航天器末端追逃博弈的Matlab实现

作为研究航天器近距离任务的开发者,我们组在复现不完全信息Epsilon纳什均衡的航天器末端追逃博弈策略(Matlab代码实现)这篇论文时,最大的感受是:以前觉得博弈论在航天里就是理论推推公式,真正要把“对方参数…

2026/10/17 9:27:38 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →