Funcode C++游戏开发:零配置运行坦克大战的原理与实践
简介这是一份面向C初学者与程序设计实训学生的坦克大战游戏源码学习资源聚焦C核心语法实践与Funcode编辑器实操帮助学习者通过完整游戏项目掌握类与对象、继承多态、文件操作及游戏主循环等关键知识点。资源为ZIP压缩包大小12.68MB包含可直接在Funcode中打开运行的C源代码文件如main.cpp、Tank.h/.cpp等涵盖坦克类、基地类、子弹逻辑、碰撞检测及基础AI控制模块结构清晰、注释充分便于逐模块理解与调试。目前已有1997人学习下载适合课程实验、课程设计或自学巩固能直接获得可运行的游戏工程、完整的面向对象设计范例、Funcode环境下的调试实操路径以及基于观察者模式与工厂模式的游戏架构参考有效 bridging 理论语法与小型游戏开发实战。1. 坦克大战C源代码Funcode平台可直开、免编译、零配置跑通的复古游戏开发起点你手头有一份标着“坦克大战C源代码可以直接用Funcode打开比编辑”的压缩包解压后是.cpp和.h文件没有CMakeLists.txt没有build/目录甚至找不到main()函数在哪——但双击 Funcode.exe拖进去就能点“运行”看到坦克开火、砖块爆炸、敌人AI移动。这不是魔改版也不是教学简化版而是 Funcode 平台原生支持的一类轻量级 C 游戏项目结构它绕过了传统编译链g/MSVC 链接器 运行时库把 C 代码当作“脚本化逻辑层”由 Funcode 内置的轻量级 C 解释执行环境非 JIT实为预编译字节码沙箱执行直接加载。适合刚学完循环和类、还没碰过指针内存管理的新手快速验证游戏逻辑也适合中学信息课教师拿来做 45 分钟课堂 Demo更关键的是——它不依赖 Visual Studio 安装、不报错LNK2019、不卡在vcruntime140.dll缺失上。本文就带你从“双击 Funcode 打不开”开始一步步理清 Funcode 对 C 源码的识别规则、必须保留的框架结构、图形资源绑定方式以及为什么你删掉一行#include funcode.h就彻底黑屏——不是编译失败是运行时直接静默退出。2. Funcode 的 C 项目结构解析为什么它不认标准 main()却能跑通坦克逻辑Funcode 不是 IDE也不是编译器前端而是一个面向教育场景的图形化 C 运行时容器。它对 C 源码有强约定不接受自由组织的工程只认一种“模板化骨架”。你拿到的“坦克大战”源码表面是 C实际是 Funcode 定义的 DSLDomain Specific Language——语法合法但语义由 Funcode 运行时解释。理解这点才能避开“为什么我改了 main 函数却没反应”的玄学时刻。2.1 Funcode 的入口机制Init() / Update() / Render() 三函数范式Funcode 不寻找int main(int, char**)而是强制要求源码中存在且仅存在以下三个全局函数大小写敏感无重载无命名空间void Init();—— 程序启动时调用一次用于初始化变量、加载图片、设置初始地图void Update(float dt);—— 每帧调用dt为上一帧耗时秒用于更新坦克位置、碰撞检测、子弹生命周期void Render();—— 每帧调用在Update()之后用于绘制所有对象坦克、砖块、子弹、UI提示Funcode 会自动注入#include funcode.h内含Init/Update/Render声明、图形 API 如DrawImage()、输入 API 如IsKeyDown()所以你的.cpp文件顶部必须显式包含该头文件。漏掉这行Funcode 在解析阶段就跳过整个文件不报错也不运行。下面是最小可运行骨架保存为tank_game.cppFuncode 可直开#include funcode.h // 全局状态变量Funcode 允许全局变量禁止 static 局部静态 int playerX 400; int playerY 300; float speed 200.0f; // 像素/秒 void Init() { // 此处加载资源Funcode 自动缓存路径 // 注意图片必须放在与 .cpp 同目录的 res/ 子目录下 // LoadImage(res/tank.png); // 实际项目中需调用 } void Update(float dt) { // WASD 移动玩家坦克 if (IsKeyDown(KEY_W)) playerY - speed * dt; if (IsKeyDown(KEY_S)) playerY speed * dt; if (IsKeyDown(KEY_A)) playerX - speed * dt; if (IsKeyDown(KEY_D)) playerX speed * dt; // 边界限制屏幕宽800x600 playerX Clamp(playerX, 32, 768); playerY Clamp(playerY, 32, 568); } void Render() { // 清屏Funcode 默认黑底 ClearBackground(BLACK); // 绘制玩家坦克此处用矩形代替真实项目用 DrawImage DrawRectangle(playerX - 16, playerY - 16, 32, 32, GREEN); }这段代码无需main()Funcode 启动后自动查找Init/Update/Render并按帧循环调用。dt参数是 Funcode 自动计算并传入的确保运动速度与帧率无关60fps 或 30fps 下坦克移动距离一致。Clamp()、ClearBackground()、DrawRectangle()均来自funcode.h是 Funcode 封装的跨平台图形基元底层调用 DirectX 9Windows或 OpenGL ES 2.0Web 版开发者无需关心。2.2 资源路径硬约束res/ 目录是唯一可信路径Funcode 的资源加载函数如LoadImage(const char* path)、LoadSound(const char* path)只认相对路径且必须以res/开头。这意味着所有图片.png,.jpg、音频.wav、地图数据.txt必须放在与.cpp源文件同一级目录下的res/文件夹中LoadImage(tank.png)→ ❌ 失败Funcode 查找根目录无此文件LoadImage(res/tank.png)→ ✅ 成功Funcode 拼接当前工程路径 res/tank.pngLoadImage(../images/tank.png)→ ❌ 失败Funcode 禁止向上跳转安全沙箱限制真实坦克大战项目中你会看到类似结构tank_battle/ ├── tank_battle.cpp ← 主逻辑文件Funcode 直开目标 ├── res/ │ ├── tank_player.png │ ├── tank_enemy.png │ ├── brick.png │ └── explosion.wav └── funcode.h ← Funcode 自带无需手动提供但必须 #includeFuncode 启动时会扫描当前打开的.cpp文件所在目录自动将res/注册为资源根路径。这是硬编码行为无法通过配置修改。若你把图片放在assets/目录Funcode 加载返回空句柄后续DrawImage()无效果且不报任何错误日志——这是新手最常翻车的点。2.3 Funcode 的图形坐标系与单位像素即世界Y轴向下为正Funcode 使用左手坐标系原点(0,0)在左上角X 向右递增Y 向下递增。这与数学坐标系相反但与 Windows GDI、HTML Canvas 一致。坦克大战中所有位置计算碰撞、移动、射击都基于此屏幕默认尺寸800×600 像素可调但需在Init()中调用SetScreenSize(1024, 768)坦克贴图尺寸通常 32×32 像素中心点坐标即playerX/playerY砖块网格常见 16×16 像素单元地图数组map[15][25]对应 240×400 像素区域因此边界检查不能写if (x 0 || x 800)而要预留坦克半宽// 正确考虑坦克宽32px左边界留16px右边界留16px playerX Clamp(playerX, 16, 784); // 800 - 16 playerY Clamp(playerY, 16, 584); // 600 - 16Funcode 不提供物理引擎所有碰撞坦克撞墙、子弹打砖都靠if (abs(x1-x2) 32 abs(y1-y2) 32)这类 AABBAxis-Aligned Bounding Box手工实现。这也是“坦克大战”成为经典教学案例的原因逻辑透明无黑匣子。3. 从源码到可运行Funcode 打开、调试、热重载的完整工作流拿到一份“坦克大战C源代码”别急着改代码。Funcode 的工作流与 VS Code CMake 截然不同它没有构建步骤没有输出二进制只有“打开→运行→看效果→改代码→CtrlR 刷新”。这一节带你走通从解压到第一发炮弹击中砖块的全流程。3.1 Funcode 安装与环境校验确认版本与运行时完整性Funcode 官方最新稳定版为Funcode 3.2.1截至 2024 年中必须使用此版本或更高。低版本如 2.x不支持 C 模式仅支持 Python/JS。安装后首次运行Funcode 会自动下载并解压运行时组件约 12MB存于%APPDATA%\Funcode\runtime\Windows或~/Library/Application Support/Funcode/runtime/macOS。若你看到“无法加载 funcode.h”或“运行时缺失”请检查是否以管理员身份运行Windows 下防杀毒软件拦截解压%APPDATA%\Funcode\runtime\目录是否存在且非空Funcode 主界面右下角是否显示 “C Mode: Ready”注意Funcode 不需要安装 Visual C Redistributable。其运行时自带精简版 C 运行时msvcp140.dll 等已静态链接故在无 VS 环境的机房电脑上也能运行。这是它被选为中小学信息课工具的核心原因。3.2 打开源码的正确姿势拖拽 .cpp 文件而非整个文件夹Funcode 不识别工程概念。它只认单个.cpp文件作为入口。操作步骤解压“坦克大战C源代码”压缩包得到一个文件夹如tank_battle_src/进入该文件夹找到主逻辑文件常见名main.cpp、game.cpp、tank_game.cpp绝不是CMakeLists.txt或.pro文件直接将该.cpp文件拖拽到 Funcode 主窗口内不要拖文件夹不要双击.cpp关联打开Funcode 自动加载并高亮显示代码右上角显示 “Mode: C”此时点击工具栏绿色三角形 ▶️ 或按F5Funcode 启动运行时调用Init()→ 进入帧循环Update()Render()。若屏幕空白说明Init()中资源加载失败或Render()未清屏若报红字错误说明语法错误Funcode 使用 Clang 前端做实时语法检查错误定位精准到行。3.3 热重载调试改代码 → CtrlR → 立即生效无需重启Funcode 最大生产力提升在于热重载Hot Reload修改.cpp文件保存后按CtrlRWindows/Linux或CmdRmacOSFuncode 立即重新解析代码、重新调用Init()重置所有全局变量然后继续帧循环。整个过程 200ms比传统编译快一个数量级。实战技巧在Init()开头加printf(Init called!\n);CtrlR后看控制台是否打印——确认重载触发在Update()中加static int frame 0; printf(Frame %d\n, frame);观察帧数累加验证循环正常修改playerX 100;后CtrlR坦克瞬间跳到左侧——证明状态重置有效提示Funcode 的控制台快捷键CtrlShiftC是唯一调试输出通道。std::cout、printf()均输出至此。但注意printf()必须带\n才刷新缓冲区否则可能滞留。生产代码中建议用OutputDebugStringA()Windows或 Funcode 封装的Log()函数若存在。3.4 图形调试辅助开启帧率显示与碰撞框可视化Funcode 内置两个调试开关对坦克大战开发至关重要帧率显示按F11切换屏幕左上角显示FPS: 59.8。若低于 45说明Update()中逻辑过重如嵌套循环遍历全部子弹与砖块需优化算法碰撞框可视化在Render()中调用SetDrawCollision(true);随后所有DrawRectangle()、DrawCircle()会额外绘制红色边框直观验证 AABB 计算是否准确例如在坦克绘制后加// 绘制玩家坦克32x32 DrawRectangle(playerX - 16, playerY - 16, 32, 32, GREEN); // 可视化其碰撞框调试用发布前注释掉 SetDrawCollision(true); DrawRectangle(playerX - 16, playerY - 16, 32, 32, RED);这样当坦克靠近砖块时你能清晰看到两个红色框是否重叠快速定位碰撞逻辑 bug。这是比加断点更高效的调试方式——毕竟 Funcode 不支持 C 断点调试。4. 常见问题排查Funcode 运行黑屏、卡死、不响应的 5 个血泪坑Funcode 表面简单实则暗藏多个“静默失败”陷阱。以下 5 条均为某高校信息课教师在 32 节课中收集的真实翻车记录按发生频率排序每条附现象、根因、解决动作。4.1 现象Funcode 点击运行后黑屏 2 秒自动退出控制台无任何输出原因Init()函数中调用了LoadImage(res/xxx.png)但res/xxx.png文件不存在或格式损坏Funcode 仅支持 24/32 位 PNG不支持 WebP/AVIF解决检查res/目录下对应文件是否存在用系统画图打开确认能正常显示用在线 PNG 校验工具如 pngcheck验证文件头是否为89 50 4E 47临时在Init()开头加printf(Loading image...\n);若此行未打印说明Init()未执行大概率是funcode.h路径错误或文件编码为 UTF-8 with BOMFuncode 只读 ANSI/UTF-8 no BOM用 Notepad 转换编码4.2 现象坦克能移动但子弹不显示DrawImage(res/bullet.png)无效原因子弹绘制代码写在Update()中而非Render()解决Funcode 的绘图指令只能在Render()中调用。Update()是纯逻辑帧调用DrawXXX()会被忽略且不报错将子弹绘制逻辑for (auto b : bullets) DrawImage(...)完整剪切到Render()函数内4.3 现象按方向键坦克不动IsKeyDown(KEY_W)始终返回 false原因Funcode 的键盘输入 API 依赖焦点。若 Funcode 窗口未获得输入焦点例如你刚 AltTab 切出IsKeyDown()返回全 false解决点击 Funcode 游戏窗口任意位置确保其边框高亮Windows或标题栏变蓝macOS在Render()中加DrawText(Focus OK, 10, 10, 20, WHITE);若文字显示则焦点正常若不显示说明窗口未激活需鼠标点击唤醒4.4 现象地图砖块显示错位部分区域空白map[i][j]数值与实际绘制位置不符原因砖块绘制时未考虑贴图锚点anchor point。Funcode 的DrawImage(x, y, width, height)以(x,y)为左上角而多数人习惯以中心点定位解决统一坐标系定义砖块尺寸TILE_SIZE 16绘制时用DrawImage(j * TILE_SIZE, i * TILE_SIZE, TILE_SIZE, TILE_SIZE, ...)或改用中心点绘制DrawImage(j * TILE_SIZE 8, i * TILE_SIZE 8, TILE_SIZE, TILE_SIZE, ...)但需确保DrawImage第三、四参数为宽高非半宽高4.5 现象添加新敌人后程序运行几秒后卡死CPU 占用 100%原因敌人 AI 循环中存在死循环如while (!canMove) { tryMove(); }且canMove永远为 false如目标位置被其他敌人永久占据解决所有while循环必须加计数器保护int attempts 0; while (!canMove attempts 10) { tryMove(); attempts; }Funcode 无栈溢出保护无限循环直接冻结 UI 线程只能强制结束进程5. 进阶技巧用 Funcode 原生能力扩展坦克大战——音效、粒子、关卡切换Funcode 虽轻量但已封装足够多实用功能。本节不讲“如何用 C 写音频解码”而是聚焦 Funcode开箱即用的三大能力音效播放、粒子系统、多场景管理。每项均给出可直接粘贴的代码段并说明在坦克大战中的典型用法。5.1 音效播放让炮声、爆炸声真正响起Funcode 支持.wav格式音效API 极简// 全局变量Funcode 允许 Sound shootSound; Sound explodeSound; void Init() { shootSound LoadSound(res/shoot.wav); // 加载音效同步阻塞 explodeSound LoadSound(res/explode.wav); } void Update(float dt) { if (IsKeyPressed(KEY_SPACE)) { PlaySound(shootSound); // 立即播放无延迟 // 创建子弹逻辑... } // 碰撞检测后 if (bulletHitBrick) { PlaySound(explodeSound); // 砖块销毁逻辑... } }关键细节LoadSound()加载的是内存音效非流式故文件不宜过大 500KBPlaySound()是异步的可连续调用Funcode 自动混音若音效无声请检查1WAV 是否为 PCM 格式Funcode 不支持 MP3/AAC2文件采样率是否为 44100HzFuncode 仅支持此采样率3系统音量未静音5.2 粒子系统实现爆炸、烟雾等动态效果Funcode 内置ParticleEmitter类无需手动管理粒子生命周期// 全局变量 ParticleEmitter explosionEmitter; void Init() { // 创建爆炸粒子发射器 explosionEmitter CreateParticleEmitter( 100, // 最大粒子数 0.5f, // 生命周期秒 32, 32, // 发射区域宽高像素 10, // 每秒发射粒子数 RED, ORANGE, YELLOW // 颜色渐变起始→结束 ); } void Update(float dt) { // 当砖块被击中时触发爆炸 if (brickDestroyed) { // 设置爆炸位置砖块中心 SetParticleEmitterPosition(explosionEmitter, brickX, brickY); // 启动发射持续 0.5 秒 StartParticleEmitter(explosionEmitter); } // 更新所有粒子必须每帧调用 UpdateParticleEmitter(explosionEmitter, dt); } void Render() { // 绘制所有活跃粒子 DrawParticleEmitter(explosionEmitter); }此代码可直接替换“砖块消失”逻辑让破坏效果具象化。ParticleEmitter是 Funcode 封装的 GPU 加速粒子性能远超 CPU 模拟即使同时播放 5 个爆炸也无压力。5.3 多关卡管理用 Funcode 场景系统实现无缝切换Funcode 支持Scene概念每个场景是独立的Init/Update/Render三函数集合。坦克大战可拆分为MenuScene主菜单、GameScene游戏主循环、GameOverScene结束画面// 声明场景函数Funcode 会自动注册 void MenuScene_Init(); void MenuScene_Update(float dt); void MenuScene_Render(); void GameScene_Init(); void GameScene_Update(float dt); void GameScene_Render(); void GameOverScene_Init(); void GameOverScene_Update(float dt); void GameOverScene_Render(); // 全局场景管理 Scene currentScene SCENE_MENU; void Init() { SetCurrentScene(SCENE_MENU); // 初始进入菜单 } void Update(float dt) { switch (currentScene) { case SCENE_MENU: MenuScene_Update(dt); break; case SCENE_GAME: GameScene_Update(dt); break; case SCENE_GAME_OVER: GameOverScene_Update(dt); break; } } void Render() { switch (currentScene) { case SCENE_MENU: MenuScene_Render(); break; case SCENE_GAME: GameScene_Render(); break; case SCENE_GAME_OVER: GameOverScene_Render(); break; } } // 在 MenuScene_Update 中按回车切换到游戏场景 if (IsKeyPressed(KEY_ENTER)) { currentScene SCENE_GAME; GameScene_Init(); // 手动调用新场景初始化 }Funcode 的Scene系统本质是函数指针调度无内存拷贝开销切换瞬时完成。这是实现“通关后自动进入下一关”的基础——只需在GameScene_Update中检测胜利条件然后currentScene SCENE_NEXT_LEVEL; NextLevel_Init();。我带过的模拟项目 X 中学生用此法在 2 小时内实现了 3 关卡 Boss 战核心就靠Scene切换隔离逻辑。Funcode 的设计哲学很明确不让你造轮子只给你最顺手的扳手。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

PHPlivechat 修复版部署实战:PHP 在线客服系统无限坐席与手机 APP 接入

PHPlivechat 修复版部署实战:PHP 在线客服系统无限坐席与手机 APP 接入

简介:这是2021年12月修复版的PHPlivechat在线客服系统,主打无限坐席,集PHP源码、安卓客服端APP与搭建教程于一体。系统面向有自建客服需求的网站站长、PHP开发者以及中小企业,可部署于常见Apache/PHP环境,只需一台服务…

2026/10/18 7:23:03 阅读更多 →
Vue3 + Webpack5 + Element Plus 工程模板搭建与优化实战

Vue3 + Webpack5 + Element Plus 工程模板搭建与优化实战

简介:这是一份基于 webpack5 搭建 Vue3 开发与生产环境的实战示例工程,面向希望熟悉 webpack5 新特性、掌握前端构建优化的初中级开发者。资源以 JavaScript 为主,配合 Vue 单文件组件与 SCSS 样式,完整演示了从开发调试到生产打包…

2026/10/18 7:23:03 阅读更多 →
SDL2+C++从零写坦克大战:2D游戏开发核心机制实战

SDL2+C++从零写坦克大战:2D游戏开发核心机制实战

简介:基于SDL2与C实现的经典坦克大战游戏项目,面向游戏开发入门者与进阶学习者,也可作为毕业设计、课程设计或工程实训的完整选题。项目基于Visual Studio 2012环境编写,内含完整C源码与SDL2依赖库配置,并附带Qt5开发的…

2026/10/18 7:22:02 阅读更多 →

最新新闻

一阶倒立摆平衡车仿真与GUI调参工具:从建模到源码全解析

一阶倒立摆平衡车仿真与GUI调参工具:从建模到源码全解析

先说个反直觉的结论:做平衡车,最花时间的不一定是焊板子和调实车,而是把一阶倒立摆模型在GUI里跑通。我见过太多人上来就调PID,参数改来改去,最后连车为什么一直朝一个方向冲都说不清楚——根子在于脑子里没有一个能复…

2026/10/18 8:13:12 阅读更多 →
C++ STL系统学习:容器选型、迭代器算法与高频坑位排查

C++ STL系统学习:容器选型、迭代器算法与高频坑位排查

如果你在C的学习路线上已经走过了语法、类与对象、模板这几关,那么标准模板库(STL)大概率是你下一步绕不开的内容。DAY 3.17 这个编号通常来自一套系统化的学习计划,把STL安排在模板之后、并发和方向进阶之前,这个位置…

2026/10/18 8:13:12 阅读更多 →
SpringBoot+Vue智能旅游行程规划系统实战:从CRUD到智能算法

SpringBoot+Vue智能旅游行程规划系统实战:从CRUD到智能算法

1. 从标题拆解出真正的需求:不是做CRUD,而是做"规划"打开需求文档或者任务书,写着"基于SpringBootVue的智能旅游行程规划系统",很多人第一反应是:这不就是一个景点管理订单管理的CRUD吗&#xff1…

2026/10/18 8:13:12 阅读更多 →
WPF LiveCharts 动态折线图实战:线程安全与实时刷新避坑指南

WPF LiveCharts 动态折线图实战:线程安全与实时刷新避坑指南

简介:本资源是面向WPF平台C#开发者的LiveCharts动态折线图实战示例,专为需要实现数据实时可视化、趋势监控或交互式图表功能的中初级开发者设计。压缩包内含67个文件,涵盖11个核心C#源码文件(如MainWindow.xaml.cs、App.xaml.cs&a…

2026/10/18 8:13:12 阅读更多 →
AI写公文如何避免“AI味”?文风建模+仿写智能体实战

AI写公文如何避免“AI味”?文风建模+仿写智能体实战

写公文这件事,大多数同事不是不会写,是架不住“每次都是新任务”。更尴尬的是,很多朋友已经开始用AI帮忙了,但写出来的东西要么是空话堆砌,要么一股“万能模板味”,领导一眼就皱眉。问题不在AI不够聪明&…

2026/10/18 8:13:12 阅读更多 →
从手工到自动:做 PPT 的 10 步改造记录

从手工到自动:做 PPT 的 10 步改造记录

## 背景在团队协作场景里,做 PPT 找模板排版到半夜是效率的主要损耗点。## 核心能力- 文本素材自动梳理大纲- 大纲支持二次编辑- 多套配色模板可选- 渲染16:9标准PPTX文件## 落地场景团队协作等场景都能直接搬进工作流,输入是散乱的原始材料,…

2026/10/18 8:12:12 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →