VC6+GDI横版游戏毕设:纯Win32实现物理引擎与地图驱动
简介本资源是一份面向计算机专业本科生的毕业设计级C游戏开发实战项目聚焦Visual C 6.0环境下基于GDI的横版过关游戏实现旨在帮助学习者掌握Windows图形编程、面向对象设计与经典游戏逻辑构建。项目完整复刻超级玛丽式玩法涵盖角色控制、关卡加载每关独立读取map1.txt等文本地图、碰撞检测、位图动画含role.bmp、map.bmp等6幅关键素材及定时器驱动的游戏循环是理解GDI绘图BitBlt/双缓冲、资源管理ICO图标、RC资源脚本和工程组织DSP/DWS工程文件的典型范例。压缩包共32个文件含6个CPP核心源码、9个H头文件、6个BMP图像资源、3个TXT地图与说明文档以及ICO、RC、OPT等配套工程文件总大小仅161KB轻量易读。目前已有459人学习下载提供从初始化到关卡切换的全链路可运行代码附带map目录结构与bitmaptool.h等自定义绘图工具模块适合C初学者进阶实践与毕业设计参考。1. 这不是“画个窗口贴图”的GDI课设它用纯Win32GDI实现完整横版物理逻辑关卡数据全靠map1.txt驱动VC6下可直接编译运行——适合需要交一份「真能跑、真有逻辑、真能讲清楚」的毕设/实训学生你手头那份标着“仿超级玛丽”的VC6工程很可能正躺在压缩包里吃灰双击mario01.dsw打不开资源文件夹里一堆.bmp却不知谁画背景谁管角色map1.txt打开全是01234但根本看不出哪行是地板、哪列是砖块、哪个数字代表金币更别说“跳跃高度随按键时长变化”“敌人AI巡逻路径”“踩怪后反弹高度计算”这些在GDI里必须手动搓出来的细节。这不是PPT里放几张截图就能糊弄过去的课程设计而是一份必须在VC6环境下从CreateWindow开始、用BitBlt一帧帧刷屏、靠WM_TIMER硬控节奏、用RECT手动做碰撞检测的硬核落地项目。它不依赖MFC封装不调用DirectX所有图形、输入、计时、状态流转都暴露在Win32 API层——这意味着答辩时你能指着StdAfx.cpp里的全局HDC变量说清“为什么这里不能用局部CDC”也能对着gamemap.cpp里那个嵌套三层的for循环解释“地图解析为何必须先读宽高再逐行载入”。它面向的不是想学Unity的新手而是需要向导师证明“我真懂C内存管理、真会调试GDI资源泄漏、真能把‘跳起来’翻译成y坐标减速度再加重力加速度”的毕设攻坚者。2. 总体架构设计三层结构与四个核心模块的职责划分这个项目表面看是“VC6GDI”实则暗含清晰的分层逻辑最底层是Win32消息循环与GDI设备上下文管理中间层是游戏世界抽象地图、角色、敌人、道具最上层是状态机驱动的游戏流程控制。它没有用类模板或STL容器堆砌而是用最朴素的C类数组结构体组合在VC6有限的编译器支持下达成稳定运行。整个架构不追求“高大上”但每一块都直指毕业设计验收痛点可调试、可解释、可演示。2.1 消息循环与渲染主干WinMain WM_PAINT WM_TIMER 的铁三角游戏入口WinMain中CreateWindow创建主窗口后立即调用SetTimer启动16ms定时器对应约60FPS这是整个动画节奏的源头。所有运动逻辑角色位移、敌人巡逻、金币闪烁都在WM_TIMER处理函数中更新状态变量而WM_PAINT仅负责将当前状态“快照”式绘制到屏幕——这种分离避免了GDI绘图阻塞导致的掉帧。关键代码如下// mario01.cpp 中 WinMain 后的消息循环 MSG msg; while (GetMessage(msg, NULL, 0, 0)) { if (msg.message WM_QUIT) break; TranslateMessage(msg); DispatchMessage(msg); }提示VC6默认不开启多线程所有逻辑必须在主线程内完成。因此WM_TIMER是唯一可靠的计时手段绝不能用Sleep()阻塞主线程否则窗口会假死。WM_PAINT的处理极度精简只做三件事获取窗口DC、调用自定义DrawScene函数、释放DC。所有位图加载LoadImage、缓存DC创建CreateCompatibleDC、位图选择SelectObject均在初始化阶段完成Paint过程绝不涉及资源创建/销毁——这是GDI项目不崩的关键纪律。2.2 地图系统map1.txt文本驱动的静态场景构建项目明确强调“不是地图拼接的是1关加载1次地图.txt”这决定了其地图系统本质是基于文本的稀疏矩阵解析器。map1.txt格式为纯文本首行为地图宽高如100 20后续每行代表地图一行字符对应预定义图块ID100 20 00000000000000000000 00000000000000000000 ...共20行gamemap.cpp中的LoadMapFromFile()函数承担解析任务先用fscanf读取宽高再动态分配二维int数组m_pMapData最后逐字符转换为整数存入。每个数字映射到resource.h中定义的图块常量// resource.h 片段 #define TILE_AIR 0 // 空气可通行 #define TILE_GROUND 1 // 实心地面 #define TILE_BRICK 2 // 可破坏砖块 #define TILE_COIN 3 // 金币 #define TILE_PIPE 4 // 管道入口注意地图数据不存储像素坐标只存逻辑格子ID。实际绘制时DrawScene()根据当前摄像机偏移量m_nCameraX计算可见区域起始列再用双重for循环遍历该区域查表获取图块ID最后通过BitBlt将对应位图map.bmp中按ID切分的子图拷贝到屏幕。这种“逻辑格子→位图索引→屏幕坐标”的三级映射是理解GDI游戏地图的核心。2.3 角色控制系统Mario类的状态机与物理模拟主角Mario并非简单贴图而是拥有完整状态机的实体。mario01.h中定义的CMario类包含关键成员class CMario { public: int m_nX, m_nY; // 世界坐标像素级 int m_nVelX, m_nVelY; // 当前速度像素/帧 int m_nState; // 状态枚举STATE_STAND, STATE_RUN, STATE_JUMP, STATE_FALL bool m_bOnGround; // 是否接触地面 int m_nJumpPower; // 跳跃初始动能决定按住跳跃键的持续升空 };物理逻辑全部在CMario::Update()中实现水平移动键盘按下左右键时m_nVelX线性加速至最大值模拟惯性松开后按固定衰减率减速跳跃按下空格键且m_bOnGround为真时m_nVelY置为负值向上m_nState切为STATE_JUMP若按键持续m_nJumpPower递减当归零时强制转为STATE_FALL重力每帧m_nVelY GRAVITYGRAVITY1模拟匀加速下落地面检测在Update()末尾调用CheckCollisionWithGround()传入当前m_nX, m_nY 1坐标查询地图对应格子是否为TILE_GROUND或TILE_BRICK若是则m_bOnGround true并修正m_nY至格子顶部。这套手动实现的物理虽无Box2D般复杂但每一行代码都可被答辩时逐句解释——这正是毕设需要的“可控性”。2.4 敌人与交互系统有限状态机驱动的AI与碰撞响应敌人如Goomba采用极简FSMSTATE_WALK_LEFT/STATE_WALK_RIGHT/STATE_DIE。CEnemy::Update()中每帧检查前方格子是否为空气若是则继续行走若前方是墙壁或悬崖则翻转方向。死亡状态由Mario踩踏触发当Mario的底部矩形m_nY 32与敌人顶部矩形重叠且Mario的m_nVelY 0正在下落则敌人进入STATE_DIEMario获得反弹速度m_nVelY -8。道具交互更直接金币TILE_COIN被Mario矩形覆盖时m_nScore 100对应地图格子ID置为0空气并在DrawScene()中跳过绘制。这种“状态变更→数据修改→视图刷新”的闭环完全符合软件工程基础教学要求。3. 关键模块实现从位图工具到计时器精度的硬核落地本章聚焦项目中最易被忽略、却最影响答辩表现的三个技术点位图资源管理、高精度计时、文本渲染。它们不炫技但出问题就直接导致“程序能编译但画面撕裂/文字模糊/角色瞬移”——这类问题在VC6GDI环境下有固定解法抄对就能避坑。3.1 bitmaptool.h/cpp位图切割与缓存DC的标准化封装项目中所有角色、背景、UI元素均来自单张位图如role.bmp含Mario静止/奔跑/跳跃共8帧bitmaptool.h提供统一加载接口// bitmaptool.h class CBitmapTool { public: static HBITMAP LoadSubBitmap(HDC hDC, LPCTSTR lpszFileName, int nX, int nY, int nWidth, int nHeight); static void DrawSubBitmap(HDC hDC, HBITMAP hBmp, int nDestX, int nDestY, int nSrcX, int nSrcY, int nWidth, int nHeight); };LoadSubBitmap()内部流程LoadImage(..., IMAGE_BITMAP, ...)加载整张BMPCreateCompatibleDC(hDC)创建与屏幕兼容的内存DCSelectObject(memDC, hBmp)将位图选入内存DCBitBlt()将指定区域nX,nY,nWidth,nHeight拷贝到新创建的位图对象返回该子图句柄供后续绘制使用。关键设计说明所有子图位图在游戏初始化时一次性加载并缓存存入全局HBITMAP g_hMarioRun[8]数组绝不允许在WM_PAINT中重复调用LoadImage——VC6下频繁加载位图会导致GDI句柄耗尽程序崩溃。这是GDI项目最经典的资源泄漏点。3.2 myclock.h基于QueryPerformanceCounter的毫秒级计时器VC6默认timeGetTime()精度仅10-15ms无法支撑60FPS流畅动画。项目采用高精度计时器// myclock.h class CMyClock { private: LARGE_INTEGER m_liFreq; LARGE_INTEGER m_liStart; public: void Start(); double GetElapsedSecond(); // 返回自Start起经过的秒数double精度 };Start()中调用QueryPerformanceFrequency(m_liFreq)获取硬件计数器频率GetElapsedSecond()用QueryPerformanceCounter()读取当前计数值相减后除以频率得到精确秒数。CMario::Update()中以此计算真实时间间隔动态调整位移量m_nX m_nVelX * deltaTime确保不同CPU上动画速度一致。参数说明QueryPerformanceCounter在VC6需链接winmm.lib工程设置中必须勾选“Use MFC in a Static Library”并添加#pragma comment(lib, winmm.lib)。若忘记此步链接时会报unresolved external symbol _QueryPerformanceCounter4——这是VC6环境特有陷阱。3.3 texttool.h/cppGDI文本渲染的抗锯齿与坐标对齐GDI默认文本渲染锯齿严重且TextOut()坐标以左下角为基准与游戏坐标系左上角冲突。texttool.cpp提供封装// texttool.cpp void DrawTextCentered(HDC hDC, LPCTSTR lpszText, int nX, int nY, COLORREF crColor, HFONT hFont) { SetTextColor(hDC, crColor); SetBkMode(hDC, TRANSPARENT); SelectObject(hDC, hFont); RECT rc {0}; GetTextExtentPoint32(hDC, lpszText, lstrlen(lpszText), rc); // 转换为左上角坐标nY是中心点需减去字体高度一半 int nTop nY - rc.bottom / 2; TextOut(hDC, nX - rc.right / 2, nTop, lpszText, lstrlen(lpszText)); }DrawTextCentered()自动计算文本宽度实现居中对齐SetBkMode(hDC, TRANSPARENT)禁用背景填充避免文字被白色方块遮盖。字体创建使用CreateFont(16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T(Arial))确保清晰度。4. 常见问题排查VC6GDI环境下最容易翻车的5个点GDI项目在VC6中调试难度远高于现代框架很多问题现象诡异但原因固定。以下是我在多个类似毕设辅导中总结的最高频翻车点按“现象→原因→解决”给出可立即执行的方案。4.1 现象程序编译通过但运行后窗口全黑/闪退原因GDI资源未正确释放或DC句柄泄漏。典型场景是WM_PAINT中多次调用BeginPaint未配对EndPaint或在WM_DESTROY中忘记DeleteObject(hBitmap)。VC6的GDI句柄池极小默认100个泄漏5次就会耗尽。解决在mario01.cpp的WndProc中严格检查WM_PAINT分支case WM_PAINT: { PAINTSTRUCT ps; HDC hdc BeginPaint(hWnd, ps); // 必须有 DrawScene(hdc); // 绘制逻辑 EndPaint(hWnd, ps); // 必须有且与BeginPaint配对 return 0; }同时在WM_DESTROY中遍历所有HBITMAP变量如g_hMapBk,g_hMarioStand调用DeleteObject()并置为NULL。4.2 现象角色移动卡顿像幻灯片而非动画原因WM_TIMER未启用或定时器ID冲突。VC6中SetTimer(hWnd, 1, 16, NULL)的第二个参数是定时器ID若多个SetTimer使用相同ID后调用会覆盖前一个。项目中mario01.cpp只应有一处SetTimer调用。解决搜索整个工程确认SetTimer仅在WM_CREATE消息中出现一次且ID为1。在WM_DESTROY中必须调用KillTimer(hWnd, 1)。若仍卡顿用trace.txt记录每次WM_TIMER到达时间戳验证是否真为16ms间隔。4.3 现象地图显示错位砖块出现在空中或角色穿模原因地图坐标系与绘制坐标系混淆。map1.txt中第i行第j列对应逻辑格子(j, i)但DrawScene()中若写成for(int i0; iheight; i) for(int j0; jwidth; j)则BitBlt目标坐标应为(j*TILE_WIDTH, i*TILE_HEIGHT)而非(i*TILE_WIDTH, j*TILE_HEIGHT)。解决打开gamemap.cpp定位DrawScene()中的地图绘制循环确认内层循环变量是列x轴外层是行y轴。打印i,j值与屏幕坐标对比确保(j*32, i*32)与map1.txt行列顺序一致。4.4 现象按下跳跃键角色原地弹跳不升高原因CMario::Update()中重力应用顺序错误。若先执行m_nY m_nVelY再执行m_nVelY GRAVITY则第一帧跳跃时m_nVelY还是0角色不动正确顺序是先加速度再更新位置。解决检查CMario::Update()函数确保代码块顺序为// 先更新速度含重力 if (!m_bOnGround) m_nVelY GRAVITY; // 再更新位置 m_nY m_nVelY; m_nX m_nVelX; // 最后做碰撞检测修正 CheckCollisionWithGround();4.5 现象编译报错“cannot open include file atlbase.h”原因工程误启用了ATL支持。VC6新建工程时若选“ATL Support”会自动添加ATL头文件依赖但本项目纯Win32无需ATL。解决右键工程→Settings→C/C页→Category选“General”在“Preprocessor definitions”中删除_ATL_DLL或_ATL_STATIC_REGISTRY再检查“Precompiled Headers”选项卡确保“Not using precompiled headers”被选中因项目用StdAfx.h但内容极简无需预编译。5. 验收与答辩用三张表一个必演操作让导师当场点头毕设验收不是代码能跑就行而是要证明你“理解每一行为什么存在”。我带过的某高校实训项目中90%的学生倒在答辩环节——不是程序不行而是讲不清设计权衡。以下是我提炼的验收四步法重点在“可演示、可验证、可追溯”。5.1 功能验收表对照需求逐项打钩拒绝模糊描述把摘要中提到的“横版过关”“仿超级玛丽”拆解为可验证动作。答辩前用此表自查现场请导师抽查三项序号验收项验证方式是否通过1关卡独立加载修改map1.txt第一行宽高为50 10运行后地图明显变窄变矮无崩溃□2跳跃高度随按键时长变化按空格键短按→角色跳1格高长按→角色跳3格高松开后立即下落□3敌人AI巡逻观察Goomba在平地上左右行走遇边缘自动转向不穿墙不飞天□4碰撞检测精度Mario头部紧贴天花板时停止上升脚部接触地面时m_bOnGroundtrue且m_nVelY0□5分数实时更新拾取金币后屏幕右上角分数100m_nScore变量值同步增加□关键技巧表中“验证方式”必须用动词开头“修改”“观察”“拾取”杜绝“实现”“支持”“具备”等虚词。导师随机指一项你30秒内完成演示即得分。5.2 代码溯源表从功能点反查到具体文件行号导师常问“这个跳跃逻辑在哪实现的” 若答“在Mario类里”显得空泛若答“在mario01.h第42行声明m_nJumpPowermario01.cpp第215行CMario::Update()中第17行更新”则展现深度。整理核心功能对应代码位置功能点文件名行号范围关键代码片段复制粘贴用地图解析gamemap.cpp88-125fscanf(fp, %d %d, m_nWidth, m_nHeight);跳跃状态切换mario01.cpp215-230if (keyState[VK_SPACE] m_bOnGround) { m_nState STATE_JUMP; }敌人转向逻辑enemy.cpp95-102if (IsBlockAhead() false) m_nDir * -1;文本居中渲染texttool.cpp45-58TextOut(hDC, nX - rc.right / 2, nTop, ...);计时器启动mario01.cpp155SetTimer(hWnd, 1, 16, NULL);提示VC6中按CtrlG跳转行号提前把这5处标记好书签View→Bookmarks→Toggle Bookmark。答辩时导师问哪行秒开即显比翻PPT强十倍。5.3 性能与健壮性演示一个必做的“压力测试”GDI项目最怕资源泄漏但学生常忽略演示。准备一个5分钟压测启动游戏进入第一关不断按空格键跳跃触发大量m_nVelY计算与碰撞检测同时用方向键左右高速移动触发位图切换与坐标计算持续3分钟观察任务管理器中进程内存占用是否平稳VC6程序通常3MB退出游戏用Process Explorer检查GDI Handles数量是否回落至启动前水平。若内存不涨、句柄不增证明资源管理合格。这比讲一百遍“我用了智能指针”更有说服力——毕竟VC6根本不支持智能指针。5.4 答辩话术用“设计权衡”代替“技术实现”导师最想听的不是“我用了GDI”而是“为什么选GDI而不是MFC或OpenGL”。我的标准回答模板“选GDI有三个刚性约束一是学校实训大纲明确要求‘掌握Windows API底层绘图’GDI是Win32图形API最直接体现二是VC6环境限制MFC在VC6中调试信息不全OpenGL需额外配置GLUT库而GDI函数全部内置三是教学价值比如BitBlt的源DC/目标DC/位图选择机制能让我彻底理解‘设备上下文’概念这比调用glDrawArrays抽象得多。”这种回答把技术选择锚定在教学目标、环境约束、认知价值三个维度瞬间拉开与“因为网上教程多”学生的差距。从那以后我每次帮学生改毕设都强制他们先填完功能验收表、标好代码溯源行号、做完5分钟压测——不是为了应付导师而是逼自己真正吃透每一行。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

会议纪要软件哪个用户体验好?实测6款主流工具,覆盖长会、多方言、团队协作三大高频场景

会议纪要软件哪个用户体验好?实测6款主流工具,覆盖长会、多方言、团队协作三大高频场景

一、开篇:会议纪要这件小事,为什么总也做不完先说个大家都懂的场景:一场两小时的跨部门评审会,你一边听一边记,散会后发现笔记里全是半截句子,谁说的、要做什么、什么时候交付,全对不上号。再或…

2026/10/18 13:21:56 阅读更多 →
鸿蒙设备上React Native ActionSheet跨端开发完整指南

鸿蒙设备上React Native ActionSheet跨端开发完整指南

在鸿蒙设备上跑 React Native 跨端开发,第一周大概率就会撞上 ActionSheet 需求。动作面板这个组件看起来简单——屏幕底部弹出一排选项,拍照还是选图,分享还是复制,点完自动收起——但它牵扯到的平台差异、交互细节和坑&#xff…

2026/10/18 13:21:56 阅读更多 →
智能体长期记忆方案详解:A-MEM架构、中文翻译与实战接入

智能体长期记忆方案详解:A-MEM架构、中文翻译与实战接入

做了三年AI应用,我最大的挫败感不是模型输出不够好,而是它转头就忘。上个月用户明明在第一轮对话里说过“以后所有文档都用Markdown格式”,第二轮刚开了个新会话,AI照样追着问“您喜欢什么格式”。这种断裂感逼着我去认真找一套能…

2026/10/18 13:21:56 阅读更多 →

最新新闻

如何用猫抓(cat-catch)免费嗅探并下载网页视频:从安装到 M3U8 合并的完整指南

如何用猫抓(cat-catch)免费嗅探并下载网页视频:从安装到 M3U8 合并的完整指南

如何用猫抓(cat-catch)免费嗅探并下载网页视频:从安装到 M3U8 合并的完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/c…

2026/10/18 15:44:12 阅读更多 →
用英特尔oneAPI工具集跑通并行计算:三个可直接复现的示例与TaoToken配置

用英特尔oneAPI工具集跑通并行计算:三个可直接复现的示例与TaoToken配置

/* 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 15:44:12 阅读更多 →
Root 设备如何通过 PlayIntegrityFix 修复 Play Integrity 认证失败

Root 设备如何通过 PlayIntegrityFix 修复 Play Integrity 认证失败

Root 设备如何通过 PlayIntegrityFix 修复 Play Integrity 认证失败 【免费下载链接】PlayIntegrityFix Fix Play Integrity (and SafetyNet) verdicts. 项目地址: https://gitcode.com/GitHub_Trending/pl/PlayIntegrityFix PlayIntegrityFix 是一个基于 Zygisk 框架的…

2026/10/18 15:44:12 阅读更多 →
Linux环境手动安装Go 1.25工具链:从tar.gz到可编译运行的完整方案

Linux环境手动安装Go 1.25工具链:从tar.gz到可编译运行的完整方案

简介:go1.25.0.linux-amd64.tar.gz 是 Go 语言官方针对 Linux 平台 amd64 架构发布的二进制发行包,为 64 位 Linux 环境下的开发者、学习者和运维人员提供开箱即用的完整 Go 工具链。Go 语言以简洁的语法、高效的编译速度与强大的高并发支持著称&#xf…

2026/10/18 15:44:12 阅读更多 →
鱼眼相机去畸变算法详解:标定、参数与OpenCV代码实践

鱼眼相机去畸变算法详解:标定、参数与OpenCV代码实践

简介:面向计算机视觉与图像处理开发者,这份资源提供鱼眼相机去畸变算法的完整代码实现,覆盖经纬度矫正法与棋盘格矫正法两种主流方案。经纬度法基于球面映射几何原理,棋盘格法则利用OpenCV fisheye模块标定内参与畸变系数&#xf…

2026/10/18 15:44:12 阅读更多 →
用图论建模攻击路径:NetworkX实战解析

用图论建模攻击路径:NetworkX实战解析

1. 为什么攻击路径分析本质上是一个图论问题1.1 网络世界的攻击动作天然就是一张有向图有一次应急处置结束后,同事看着一长串关联告警问我:如果早一点把这些告警画成一张图,是不是就能提前看出攻击者下一步想打哪儿?我当时没有立刻…

2026/10/18 15:43: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/18 12:16:16 阅读更多 →