Python游戏化实战:从零构建趣味项目,掌握核心编程技能
这次我们来看一个能让你对 Python 编程兴趣飙升的实战项目。它不是一个枯燥的教程而是一个通过游戏化方式让你在解决实际问题中掌握 Python 核心技能的工具或学习路径。对于很多初学者来说从“Hello World”到能做出有趣的东西中间隔着巨大的鸿沟。而这个项目正是为了填平这道鸿沟让你在“玩”的过程中不知不觉地提升编程能力体验到 Python 的强大与乐趣。本文将带你快速了解如何通过一个具体的游戏项目例如“人狗大作战”或类似的小游戏作为切入点深入 Python 的世界。我们会重点关注从零开始的完整流程环境搭建、代码理解、功能修改、以及最终打包成可执行文件。整个过程不需要高端显卡对硬件几乎没有特殊要求核心是逻辑思维和代码实践。无论你是刚安装好 Python 的新手还是想寻找有趣项目练手的开发者这篇文章都能提供一条清晰、可落地的路径。1. 核心能力速览能力项说明项目类型Python 入门/进阶实战项目通常为小游戏如文字游戏、简单图形游戏技术栈Python 基础语法、面向对象编程、文件操作、第三方库如 Pygame, tkinter硬件门槛极低普通家用电脑即可无需独立显卡主要依赖 CPU 和内存环境依赖Python 3.6 环境可能需要安装简单的第三方库启动方式命令行直接运行.py脚本或通过 IDE如 VSCode, PyCharm运行核心价值将抽象语法转化为具体可交互的程序极大提升学习动力和理解深度适合场景个人学习、教学演示、编程兴趣培养、简历项目积累2. 适用场景与使用边界这个以游戏为载体的 Python 学习项目主要适合以下几类人群Python 初学者已经看过基础语法但不知道如何下手写一个完整程序的人。通过游戏项目可以将变量、循环、条件判断、函数、类等知识点串联起来。对编程感兴趣但觉得枯燥者传统的练习题无法激发持续学习的热情。一个能自己运行、能看到反馈的游戏能提供即时的正反馈。需要小型项目充实简历的学生一个功能完整、代码清晰的小游戏比一堆散乱的知识点更能体现动手能力。它能解决的核心问题理论与实践脱节将书本上的语法知识应用于一个有明确目标的场景。学习动力不足通过可见、可玩的成果维持编程学习的兴趣和成就感。缺乏项目全局观体验从环境配置、编码、调试到打包发布的完整软件开发微流程。需要注意的边界并非游戏开发专业教程它侧重于利用游戏作为 Python 的教学工具而非教授复杂的游戏引擎如 Unity或高性能图形渲染。代码复杂度有限为了教学目的初始代码结构可能较为简单商业级游戏的架构设计、性能优化等内容需要另行学习。版权与原创如果借鉴或修改了网络上的开源代码在用于公开作品或商业用途时务必遵守原项目的开源协议并鼓励进行足够的创新和修改以体现自己的理解。3. 环境准备与前置条件在开始“玩转”代码之前一个干净、正确的开发环境是第一步。以下是通用检查清单操作系统Windows 10/11, macOS, 或 Linux 发行版均可。本文以 Windows 环境为例其他系统操作类似。Python 解释器确保已安装 Python 3.6 及以上版本。打开命令提示符CMD或 PowerShell输入python --version或python3 --version查看。如果未安装前往 Python 官网 下载安装包。安装时务必勾选“Add Python to PATH”这是避免后续各种“命令找不到”错误的关键。代码编辑器或 IDE推荐使用Visual Studio Code (VSCode)或PyCharm。VSCode轻量灵活需安装 Python 扩展。PyCharm功能强大开箱即用社区版免费。项目代码准备好你要学习的游戏项目源代码.py文件。可以从开源平台如 GitHub、技术论坛或教程网站获取。例如搜索“人狗大作战 Python 源码”即可找到相关资源。磁盘空间预留几百MB空间即可用于存放代码、虚拟环境和可能的资源文件如图片、声音。4. 安装部署与启动方式这里我们假设你已经获得了一个名为dog_vs_human.py的游戏源码文件。部署和启动的核心就是运行这个 Python 脚本。4.1 基础运行命令行这是最直接的方式能帮你确认环境是否就绪。打开终端在代码文件所在目录按住Shift键并右键点击空白处选择“在此处打开 PowerShell 窗口”或“打开命令窗口”。运行脚本在打开的终端中输入以下命令python dog_vs_human.py或者如果你的系统同时有 Python 2 和 3可能需要使用python3 dog_vs_human.py观察结果如果代码无依赖且正确游戏窗口或文字交互界面应该会启动。4.2 使用 VSCode 运行推荐VSCode 提供了更好的代码阅读、调试和依赖管理体验。打开项目文件夹用 VSCode 打开存放dog_vs_human.py的文件夹。选择 Python 解释器点击 VSCode 左下角的 Python 版本号或显示“选择解释器”选择你安装的 Python 环境。处理依赖如果游戏使用了第三方库如pygame运行时会报错ModuleNotFoundError。此时需要在 VSCode 的终端Terminal里安装它pip install pygame如果下载慢可以使用国内镜像源pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple运行与调试直接点击代码文件右上角的绿色三角按钮运行或按F5启动调试。你可以在代码行号左侧点击设置断点逐行观察程序执行过程这是理解代码逻辑的神器。4.3 项目结构化管理进阶当项目包含多个.py文件和资源时建议创建虚拟环境并组织目录。# 在项目根目录下 # 1. 创建虚拟环境隔离依赖 python -m venv venv # 2. 激活虚拟环境 (Windows) venv\Scripts\activate # 激活后命令行前缀会显示 (venv) # 3. 在激活的虚拟环境中安装所需库 pip install pygame # 4. 运行主程序 python dog_vs_human.py5. 功能测试与效果验证成功运行游戏只是第一步。接下来我们要通过修改代码来测试和理解其核心功能。这才是兴趣和技能提升的关键。5.1 测试一理解游戏主循环大多数游戏都有一个while循环作为主循环。找到它通常长这样running True while running: # 处理事件如按键、鼠标 for event in pygame.event.get(): if event.type pygame.QUIT: running False # 更新游戏状态如位置、分数 update_game_logic() # 绘制当前帧画面 draw_everything() # 控制帧率 clock.tick(60)测试操作尝试修改clock.tick(60)中的数字比如改为30或120然后重新运行游戏。你会发现游戏速度变慢或变快。这验证了你对“帧率控制”的理解。5.2 测试二修改游戏属性找到初始化游戏角色如“人”和“狗”属性的代码段。它可能是一个字典、一个类或一组变量。# 假设找到类似代码 player {x: 100, y: 200, speed: 5, health: 100} enemy {x: 400, y: 200, speed: 3, damage: 10}测试操作将玩家的speed从5改为10。重新运行观察角色移动是否变快。将敌人的damage从10改为2。重新运行观察玩家受到攻击时血量的减少速度是否变慢。 这个简单的修改能立刻让你理解这些变量如何直接影响游戏行为。5.3 测试三添加新功能让我们尝试添加一个简单的“技能”功能。在按键事件处理部分主循环内添加新的判断。for event in pygame.event.get(): if event.type pygame.QUIT: running False # 原有按键处理... if event.type pygame.KEYDOWN: if event.key pygame.K_SPACE: # 原有跳跃等功能 jump() # 新增按 E 键释放技能 if event.key pygame.K_e: print(技能释放) # 这里可以添加技能效果比如让敌人短暂停滞 enemy[speed] 0 # 敌人速度归零 # 设置一个计时器2秒后恢复 # 实际项目中会用更优雅的方式实现这里仅为演示测试操作添加以上代码后运行游戏按下E键观察控制台是否输出“技能释放”并观察敌人是否停止移动如果代码逻辑允许。这验证了你对“事件驱动编程”和“状态修改”的理解。5.4 测试四调试与错误排查故意制造一个错误来学习如何排查。例如在调用一个函数时写错名字。# 将正确的函数名 draw_player() 改为错误的 draw_plyr() draw_plyr(screen, player) # 这行会报错 NameError验证流程运行程序程序会崩溃并在终端输出错误信息NameError: name draw_plyr is not defined。阅读错误信息它明确指出了错误类型和位置。回到代码检查拼写将其改正为draw_player。重新运行程序恢复正常。 这个过程强化了阅读错误信息、定位问题和修复 Bug 的能力这是编程的日常。6. 接口 API 与批量任务扩展思路虽然小游戏本身不涉及 Web API但我们可以将项目思路扩展模拟“批量任务”和“自动化”场景这也是 Python 的强项。6.1 模拟批量任务游戏数据生成与分析假设我们想测试游戏在不同初始参数下的平衡性可以写一个脚本进行“批量模拟”。# simulate_game.py import subprocess import json def run_simulation(player_speed, enemy_damage): 通过修改配置文件并运行游戏无头模式来模拟一局游戏返回结果 # 1. 动态生成或修改游戏配置文件 config {player_speed: player_speed, enemy_damage: enemy_damage} with open(game_config.json, w) as f: json.dump(config, f) # 2. 假设主游戏程序支持读取 config.json 并运行一局最后将结果如胜负、耗时写入 result.txt # 这里用打印命令代替实际调用 print(f模拟: 玩家速度{player_speed}, 敌人伤害{enemy_damage}) # 实际调用可能是subprocess.run([python, dog_vs_human.py, --config, game_config.json, --headless]) # 3. 模拟一个简单的结果实际应从文件读取 import random win random.choice([True, False]) duration random.randint(30, 120) return {win: win, duration: duration} # 批量测试不同参数组合 results [] for p_speed in [5, 7, 10]: for e_damage in [5, 10, 15]: result run_simulation(p_speed, e_damage) result.update({player_speed: p_speed, enemy_damage: e_damage}) results.append(result) # 分析结果 print(\n 模拟结果分析 ) for r in results: print(f速度{r[player_speed]}/伤害{r[enemy_damage]}: 胜利{r[win]}, 时长{r[duration]}秒)这个脚本展示了如何用 Python 自动化地测试游戏的不同配置并收集分析数据。6.2 为游戏添加简易 API 服务Flask 示例更进一步我们可以用 Flask 框架为游戏核心逻辑包裹一个简单的 HTTP API使其能被远程调用。这虽然超出了原游戏范畴但展示了 Python 如何连接不同领域。# game_api.py from flask import Flask, request, jsonify import random app Flask(__name__) # 模拟一个游戏战斗计算函数 def calculate_battle(player_attack, enemy_defense): hit_rate 0.8 # 命中率 if random.random() hit_rate: damage max(player_attack - enemy_defense, 1) result 命中 else: damage 0 result 未命中 return damage, result app.route(/api/battle, methods[POST]) def battle(): data request.get_json() player_attack data.get(player_attack, 10) enemy_defense data.get(enemy_defense, 5) damage, result_msg calculate_battle(player_attack, enemy_defense) return jsonify({ status: success, damage_dealt: damage, result: result_msg, input_parameters: {player_attack: player_attack, enemy_defense: enemy_defense} }) if __name__ __main__: app.run(debugTrue, port5000)运行此 API 服务后你可以用curl或 Python 的requests库来调用curl -X POST http://127.0.0.1:5000/api/battle -H Content-Type: application/json -d {\player_attack\: 15, \enemy_defense\: 8}这为你打开了将游戏逻辑服务化、供其他程序如前端页面、手机 App调用的思路。7. 资源占用与性能观察对于这类 Python 小游戏性能瓶颈通常不在显卡而在 CPU 单核性能和代码逻辑效率。CPU 与内存占用打开任务管理器Windows或活动监视器macOS运行游戏。通常这类 2D 小游戏的 CPU 占用率在个位数到 20% 之间内存占用在几十 MB 到一两百 MB。如果占用异常高可能是代码中存在低效循环如嵌套过深或内存泄漏如列表无限增长。性能观察点主循环效率确保每一帧只做必要的计算和绘制。避免在循环内进行重复的、可以提前计算的操作。图形渲染如果使用 Pygame大量pygame.draw操作或频繁加载/释放图片会影响性能。应尽量重用 Surface 对象。事件处理处理事件队列要及时避免积压。如何降低资源占用如果游戏卡顿首先尝试降低帧率clock.tick(30)。检查是否有while True死循环没有正确的退出条件。对于列表、字典等数据结构思考是否有更高效的算法。8. 常见问题与排查方法问题现象可能原因排查方式解决方案python不是内部或外部命令Python 未安装或未添加到系统 PATH 环境变量在终端输入python --version重新安装 Python安装时务必勾选 “Add Python to PATH”ModuleNotFoundError: No module named ‘pygame’未安装游戏所需的第三方库检查错误信息中缺失的模块名在终端使用pip install 模块名安装运行脚本后窗口一闪而过脚本执行完毕迅速退出可能是没有主循环或循环条件立即为假在脚本最后一行添加input(“按回车键退出…”)暂停检查主循环while running的条件确保游戏逻辑正确修改代码后运行无变化可能运行了旧的.pyc缓存文件或未保存文件确认文件已保存并尝试删除__pycache__文件夹在 IDE 中明确选择运行当前文件或使用python -B参数运行禁用字节码缓存游戏画面卡顿、不流畅帧率设置过高、每帧计算量过大、或绘图操作效率低降低clock.tick()的参数值使用性能分析工具优化代码逻辑避免在每帧中进行重复的复杂计算合并绘图操作按键或鼠标事件无响应事件类型判断错误、事件队列未及时处理、或焦点不在游戏窗口打印event.type和event.key确认事件值检查事件处理代码的缩进和逻辑确保游戏窗口是活动窗口导入自己写的模块报错模块路径问题Python 找不到你的.py文件检查文件是否存在以及导入语句是否正确如from . import my_module使用相对导入或绝对导入确保模块所在目录在 Python 搜索路径中9. 最佳实践与使用建议从运行到修改再到创造不要只满足于运行别人的代码。按照“运行 - 理解 - 修改 - 添加功能 - 重写”的路径深入。哪怕只是改一个数字也是进步。善用版本控制即使是一个人学习也建议使用 Git。在做出重大修改前进行一次提交如果改乱了可以轻松回退。使用.gitignore文件忽略__pycache__、venv等不需要跟踪的文件。代码分模块当功能变多时不要把所有代码堆在一个文件里。尝试将游戏角色逻辑、绘图函数、主循环等拆分到不同的.py文件中通过import组织。这能极大提升代码可读性和可维护性。添加注释和文档字符串在关键函数和复杂逻辑处写下注释说明“为什么这么做”。为自己写的函数添加文档字符串函数说明这有助于未来回顾和他人理解。资源文件管理将图片、声音、字体等资源文件放在单独的文件夹如assets/中在代码中使用相对路径如‘assets/player.png’来引用这样项目更容易迁移和分享。探索打包分发当你完成一个满意的版本可以尝试用PyInstaller将其打包成独立的.exe文件分享给没有安装 Python 的朋友。pip install pyinstaller pyinstaller --onefile --windowed dog_vs_human.py打包后的程序会在dist文件夹中。这是一个完整的项目闭环体验。10. 总结与下一步通过一个具体的游戏项目切入 Python 学习最大的优势是目标驱动和即时反馈。你不再是为了学语法而学语法而是为了“让角色跳得更高”、“让技能更酷”去查阅文档、调试代码。这个过程所积累的问题解决能力和项目经验远比死记硬背语法点有价值。最值得尝试的点立刻动手找到一份开源的小游戏代码按照“运行 - 修改属性 - 添加一个小功能”的流程走一遍。这个过程中遇到的每一个错误和解决过程都是实实在在的成长。最容易踩的坑环境配置PATH问题、缩进错误、中英文符号混用、对变量作用域理解不清。遇到问题时仔细阅读终端报错信息它通常已经指明了方向和位置。下一步可以探索的方向图形库进阶如果你对图形界面感兴趣可以深入Pygame学习精灵Sprite组、碰撞检测、粒子效果等。转向实用工具用tkinter或PyQt编写一个有图形界面的计算器、文本编辑器或爬虫小工具。接触 Web 开发学习Flask或Django将你的游戏逻辑搬到网页上或者做一个博客系统。数据分析与可视化用pandas和matplotlib分析游戏产生的模拟数据并绘制成图表。编程就像玩游戏一开始在新手村熟悉操作基础语法然后通过小任务小项目积累经验和装备编程思维最终有能力去挑战更复杂的副本大型项目。保持好奇乐于动手兴趣就是最好的老师。建议收藏本文在实践每个步骤时回头查阅。

相关新闻

基于LeRobot与ROS 2的桌面机械臂视觉抓取全流程实战

基于LeRobot与ROS 2的桌面机械臂视觉抓取全流程实战

1. 项目概述:当LeRobot遇见桌面级机械臂 如果你手边正好有一台SO-ARM100或SO-ARM101这类小巧的桌面级机械臂,同时又对前沿的机器人学习框架LeRobot充满好奇,那么这篇内容就是为你准备的。我最近花了大量时间,将这两者结合&#xf…

2026/10/14 20:32:52 阅读更多 →
HCL模拟器实战:从安装启动到网络配置的完整排错指南

HCL模拟器实战:从安装启动到网络配置的完整排错指南

1. 从“启动失败”到“丝滑运行”:一个网络工程师的HCL模拟器实战心路 如果你正在学习华三(H3C)的网络技术,或者需要搭建一个实验环境来验证配置,那么HCL模拟器几乎是你绕不开的工具。它不像思科的Packet Tracer那样“…

2026/10/5 17:11:44 阅读更多 →
对于梳理elementui相关组件的开发

对于梳理elementui相关组件的开发

页面组件要素 我们要开发一个页面 要掌握一个页面的基本构成元素,是由什么组成的 对于组件的理解,我们就从elementui上做理解 全部组件 1.布局 2.布局容器 3.色彩 4.字体 5.边框 6.图标 7.按钮 8.文字链接 9.单选框 10.多选框 11.输入框 12.计数器 13.选…

2026/10/11 19:24:07 阅读更多 →

最新新闻

PGD对抗训练:深度学习鲁棒性工程落地核心方法

PGD对抗训练:深度学习鲁棒性工程落地核心方法

1. 项目概述:为什么PGD对抗训练成了深度学习鲁棒性的“试金石”“Towards Deep Learning Models Resistant to Adversarial Attacks (PGD)”——这个标题乍看像一篇论文的副标题,但背后藏着当前工业界模型落地最真实、最棘手的痛点…

2026/10/15 8:27:40 阅读更多 →
图即代码:diagram-design 从零构建可版本控制的架构图

图即代码:diagram-design 从零构建可版本控制的架构图

1. 从“diagram-design”这个标题说起:它到底在解决什么问题第一次看到“diagram-design”这个标题,我脑子里蹦出来的不是某个具体工具,而是一类非常典型的工程需求:把脑子里那张模糊的架构图、流程图、时序图,快速变成…

2026/10/15 8:27:39 阅读更多 →
WebRTC与SIP协议转换网关:声网SDK与FreeSWITCH集成实战

WebRTC与SIP协议转换网关:声网SDK与FreeSWITCH集成实战

1. 项目缘起与整体架构拆解WebRTC 和 SIP 这两个协议栈,一个扎根在浏览器生态,一个统治着传统电话网络,各自都活得挺好,但偏偏在很多企业通信场景里,业务方就是想让浏览器里的用户直接拨通电话网络里的号码&#xff0c…

2026/10/15 8:27:39 阅读更多 →
CuteLogger 集成指南:用 Qt 构建可靠日志系统的核心思路与避坑

CuteLogger 集成指南:用 Qt 构建可靠日志系统的核心思路与避坑

简介:CuteLogger 是一套面向 Qt 开发者的轻量级日志库,用于替代 qDebug 等原生输出,解决多线程工程中日志信息不全、格式不统一、扩展性不足等问题。它几乎能记录文件名、源代码行与函数签名,并通过附加程序机制灵活输出到文件、控…

2026/10/15 8:27:39 阅读更多 →
Nginx高可用集群实战:Keepalived+虚拟IP实现主备自动切换

Nginx高可用集群实战:Keepalived+虚拟IP实现主备自动切换

1. 为什么要搭建Nginx高可用集群1.1 单点故障的现实困境很多人刚开始接触Nginx时,都是在单台服务器上部署,做反向代理、静态资源托管、负载均衡转发。这套玩法在开发环境和中小流量场景下没什么问题,但当它真正扛起生产流量时,一个…

2026/10/15 8:27:39 阅读更多 →
artcraft 项目实战:从创意到成品的流程编排与参数体系设计

artcraft 项目实战:从创意到成品的流程编排与参数体系设计

1. 从“artcraft”这个名字说起:它到底想解决什么问题第一次看到“artcraft”这个项目标题,我的直觉是:这大概率是一个把“艺术创作”和“手工实现”捏合在一起的工具型项目。拆开来看,“art”指向视觉表达、创意生成、审美输出&a…

2026/10/15 8:26:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →