当前位置: 首页 > article >正文

用MakeCode Arcade与树莓派Zero打造复古像素游戏:从拖拽编程到实体街机

1. 项目概述为什么选择MakeCode Arcade开启你的游戏开发之旅如果你对编程充满好奇又或者一直想亲手制作一款属于自己的复古像素风游戏但被一行行复杂的代码劝退那么MakeCode Arcade就是你一直在寻找的答案。它不是一个需要你背诵语法规则的“编程课”而是一个直观、有趣的“游戏创作工坊”。在这里你不需要从“Hello World”开始而是直接从“如何让我的角色动起来”开始思考。它的核心魅力在于将游戏开发中最核心的逻辑——比如角色移动、碰撞检测、得分计算——封装成了一个个色彩鲜艳、功能明确的“积木块”。你只需要像搭积木一样将这些逻辑块拖拽、组合一个可运行的游戏原型就诞生了。我最初接触它是为了给一个编程兴趣班寻找合适的教学工具。传统的文本编程对初学者尤其是青少年门槛太高很容易挫伤积极性。而MakeCode Arcade的拖放式编程让“编程”这个抽象概念变得触手可及。学生们能立刻看到自己逻辑的视觉反馈移动摇杆屏幕上的角色就动了设置一个条件碰到敌人就会掉血。这种即时、正向的反馈循环是激发学习兴趣和创造力的关键。更重要的是它并非一个“玩具”。其背后是完整的游戏开发概念精灵Sprite、场景Scene、控制器Controller、变量Variable、循环Loop等。通过它入门你掌握的是一套通用的游戏设计思维未来无论是转向更专业的游戏引擎如Unity、Godot还是深入学习JavaScript/Python都会有一个非常扎实的感性认知基础。本次我们将要复现的是一个经典的“躲避与收集”类街机游戏。玩家控制一条名为Blinka的紫色小蛇在限定时间内追逐屏幕上的星星Star同时要躲避一个名为Sparky的蓝色烟雾怪物。每吃到一颗星星得分时间重置每被怪物碰到一次则损失一条生命。随着时间推移怪物的速度还会逐渐增加以此提升游戏难度。这个项目麻雀虽小五脏俱全涵盖了角色创建、运动控制、碰撞检测、状态管理生命、分数、计时器和难度曲线设计等游戏开发的核心要素。更棒的是完成软件部分后我们还能将它部署到一台由树莓派Zero和Joy Bonnet手柄组成的实体游戏机上体验从虚拟代码到实体街机的完整创造过程。接下来我将带你从零开始一步步拆解这个项目的每一个环节并分享我在实践中积累的细节技巧和避坑指南。2. 环境准备与硬件选型搭建你的专属复古游戏机在开始拖拽代码块之前我们需要先把“舞台”搭好。MakeCode Arcade的游戏可以在网页模拟器中运行但将其部署到实体硬件上那种手握摇杆、面对大屏幕的沉浸感是完全不同的。这里我们选择树莓派Zero作为硬件核心它体积小巧、功耗低、性价比高非常适合作为一台专属的复古游戏机。2.1 核心硬件清单与功能解析你需要准备以下部件。我会解释每一件的作用这样你就能明白为什么是它们而不是随便找些替代品。树莓派Zero WH这是整个系统的大脑。WH版本自带预焊好的GPIO排针对于连接Joy Bonnet至关重要免去了自己焊接的麻烦。它的算力足以流畅运行MakeCode Arcade生成的像素游戏。Adafruit Joy Bonnet这是游戏的“灵魂”——输入设备。它集成了一个方向摇杆和四个动作按钮A, B, C, D完美复刻了经典街机的操控感。它通过GPIO排针直接插在树莓派Zero上无需额外驱动即插即用。MicroSD卡8GB或以上这是树莓派的“硬盘”。操作系统和我们的游戏文件都存储在这里。务必选择Class 10或UHS-I以上速度的卡以确保系统运行和游戏加载流畅。Micro USB电源线用于给树莓派供电。请注意树莓派Zero有两个Micro USB口一个标有“PWR”的仅用于供电另一个标有“USB”的用于数据传输。在后续上传游戏时我们需要用到“USB”口连接电脑。HDMI线缆用于连接树莓派和显示器或电视输出视频信号。树莓派Zero使用的是Mini HDMI接口你可能需要一个Mini HDMI转标准HDMI的转接头或转接线。塑料外壳保护你的硬件防止短路也让成品看起来更规整。选择专为树莓派Zero和Joy Bonnet设计的套件会更方便。带SD卡槽的电脑用于编程和向SD卡写入系统文件。如果你的电脑没有SD卡槽则需要一个USB MicroSD卡读卡器。注意电源是关键。务必使用输出为5V/2.5A的优质电源适配器为树莓派供电。供电不足会导致树莓派运行不稳定、频繁重启尤其是在接入手柄和运行游戏时功耗增加劣质电源或电脑USB口供电通常只有0.5A很可能无法满足需求。2.2 硬件组装与系统烧录实操组装过程非常简单但顺序和细节决定成败。第一步系统固件准备与烧录这是最容易出错的一步。MakeCode Arcade为树莓派定制了一个极简的Linux系统它唯一的功能就是运行我们制作的游戏。格式化SD卡将MicroSD卡插入电脑。如果卡内有旧数据请先备份然后进行格式化。格式化为FAT32文件系统。在Windows上你可以使用系统自带的格式化工具在macOS上使用“磁盘工具”。确保格式化成功。下载并解压固件从Adafruit的指南页面下载名为arcade.zip的固件包。解压后你会看到几个文件其中包含一个类似9.0.3.gz的压缩文件。复制文件将解压后得到的所有文件不是那个arcade文件夹本身而是文件夹里的所有内容直接复制到SD卡的根目录下。正确操作后SD卡根目录下应该直接能看到9.0.3.gz等文件。绝对不要在SD卡上新建一个名为arcade的文件夹再把文件放进去那样树莓派将无法启动。安全弹出SD卡复制完成后在电脑上安全移除SD卡。第二步硬件组装安装树莓派将树莓派Zero WH放入塑料外壳的底盖中通常会有卡扣或螺丝孔位固定。安装Joy Bonnet这是最关键的一步。将Joy Bonnet上的排母孔位对准树莓派Zero的GPIO排针那一排金属针。确保方向正确通常Joy Bonnet的元件面有按钮和摇杆的一面朝上与树莓派的元件面同向。然后均匀用力垂直向下按压直到Bonnet完全 seated在排针上。听到轻微的“咔哒”声或感觉完全到底即可不要用蛮力。合上外壳盖上塑料外壳的上盖用螺丝固定。第三步初步连接与测试将烧录好固件的SD卡插入树莓派Zero底部的MicroSD卡槽。使用HDMI线连接树莓派和显示器或电视。先不要连接USB数据线。此时将Micro USB电源线插入树莓派标有“PWR”的电源口并接通电源。观察显示器。如果一切正常你应该会看到树莓派启动屏幕上最终显示MakeCode Arcade的Logo和一个简单的菜单界面。此时Joy Bonnet的摇杆和按钮应该可以用于导航菜单。这个界面证明你的硬件组装和系统烧录是成功的。至此你的复古游戏机“躯壳”已经准备就绪。接下来我们要为它注入“灵魂”——我们亲手编写的游戏。3. MakeCode Arcade界面深度解析与编程思想打开浏览器访问https://arcade.makecode.com/点击“New Project”你就进入了创作空间。这个界面设计得非常直观但我们还是需要深入理解每个区域的功能和设计哲学这样才能高效利用。3.1 三大核心工作区界面主要分为左、中、右三个区域构成了一个完整的设计-实现-测试工作流。左侧游戏模拟器Simulator这是你的实时预览窗口。任何代码的修改都会立刻在这里反映出来。它模拟了实体游戏机的屏幕通常为160x120像素和手柄方向键和A/B按钮。你可以直接用键盘方向键和Z/X键或鼠标点击模拟器上的按钮来测试游戏。开发黄金法则每添加或修改几块积木就立刻到模拟器测试一下。这种即时反馈是可视化编程最大的优势能帮你快速定位逻辑错误。中间积木工具箱Toolbox这里是所有可用的代码积木分类仓库。分类逻辑清晰Sprites精灵游戏中的所有动态对象如主角、敌人、子弹、宝物。Controller控制器定义玩家输入如“当A键按下时”。Game游戏控制游戏流程如“开始倒计时”、“游戏结束”。Scene场景管理背景、画面效果如镜头抖动。Info信息管理游戏状态如生命值Life、分数Score。Loops循环for循环和while循环用于重复执行某些操作。Logic逻辑if...else条件判断是游戏智能的核心。Variables变量创建用于存储数据的容器如速度、坐标。Math数学提供随机数、算术运算等。Advanced高级包含图像编辑器、函数、数组、文本等更复杂的工具。右侧代码编辑区Workspace这是你进行“搭建”的主画布。从工具箱拖拽积木到这里进行组合。这里有两个非常重要的起始积木on start当启动时绿色积木。游戏开始时只执行一次的代码。通常用于初始化设置背景、创建精灵、设定初始位置、初始化变量如生命值3。forever无限循环棕色积木。游戏开始后会以极快的速度每秒60帧循环执行这里的代码。通常用于需要持续检测或更新的逻辑比如“每帧都检查玩家是否按下跳跃键”。3.2 积木编程的核心思想事件驱动MakeCode Arcade的编程模式是典型的事件驱动。这意味着你的代码不是在从头到尾按顺序执行一个“剧本”而是在定义一系列“当...发生时就做...”的规则。事件Event某种事情的发生。例如“游戏启动”on start、“A键被按下”on A button pressed、“精灵A碰到了精灵B”on sprite of kind Player overlaps other sprite of kind Enemy、“游戏每更新一帧”on game update。处理器Handler当事件发生时要执行的一系列动作积木组合。这种思维方式非常贴合游戏设计。游戏世界就是由无数这样的事件和响应构成的。你不需要告诉电脑“一直去检查有没有按键”你只需要定义好“当按键被按下时角色跳跃”这条规则。电脑底层会帮你处理所有的监听和触发工作。实操心得规划你的“事件”。在动手拖拽积木前花几分钟用纸笔列出你的游戏需要响应哪些事件。比如我们的游戏就需要1) 启动时初始化所有元素2) 玩家按下方向键时移动Blinka3) Blinka碰到星星时得分、重置计时器、移动星星4) Blinka碰到Sparky时减生命、震动屏幕、重置Sparky位置5) 每5秒增加Sparky速度。列出这个清单你的编程过程就会变得非常有条理直接去工具箱里找到对应的事件积木开始搭建即可。4. 游戏逻辑实现一步步构建“躲避与收集”现在我们进入核心的创作环节。让我们抛开那些抽象概念用积木一块块地把游戏搭建起来。请跟随步骤并注意我穿插其中的技巧说明。4.1 游戏初始化搭建稳固的基石所有游戏都需要一个稳定的起点。右键点击编辑区选择“添加注释”写上“初始化设置”这是个好习惯。设置背景on start内从Scene类别拖出set background image to [ ]积木放入on start中。点击积木中的灰色方块打开图像编辑器。你可以用像素画笔绘制一个简单的开场图比如游戏标题“BLINKA‘S RACE”。技巧不需要太复杂简洁的像素字体和边框就能营造很好的复古感。紧接着从Scene再拖一个pause (ms) 100积木将100改为1000即1000毫秒1秒。这会让开场画面停留1秒给玩家一个反应时间。然后再添加一个set background color to [black]积木。这样1秒后游戏主界面就会变成纯黑色背景突出我们的精灵。创建玩家精灵——Blinka从Sprites类别拖出set mySprite to sprite of kind Player积木。点击“mySprite”下拉箭头选择“Rename variable...”将其重命名为Blinka。良好的变量命名是优秀代码的开始这能让你的逻辑更清晰。点击积木中的精灵预览图绘制你的Blinka。一个简单的紫色方块或几个连在一起的紫色圆点就能模拟出“蛇”的感觉。从Sprites拖出set Blinka position to x 0 y 0积木。点击x或y的数字你会发现模拟器屏幕上出现了一个十字准星移动鼠标Blinka会跟随移动。将它放在屏幕左下角一个合适的位置例如 x20, y20。这确保了每次游戏开始Blinka都从固定位置出发。最后让Blinka能动起来。从Controller类别拖出move Blinka with buttons vx 100 vy 100积木。vx和vy代表在x轴和y轴方向的速度。100是一个适中的速度你可以后续调整。测试一下现在在模拟器里用方向键Blinka应该可以自由移动了。4.2 创建动态的敌人——Sparky敌人需要自动运动并且会反弹这需要用到变量和物理属性。创建敌人精灵类似地拖出set mySprite to sprite of kind Enemy重命名为Sparky并绘制一个蓝色的、看起来有点危险的烟雾状图形。用set Sparky position to ...将它放在一个初始位置比如屏幕中央 (x80, y60)。为Sparky赋予速度和物理规则这是关键步骤。我们需要两个变量来分别控制Sparky在x和y方向的速度。从Variables类别点击“Make a Variable”创建两个新变量分别命名为SparkySpeedX和SparkySpeedY。在on start里添加两个set SparkySpeedX to 0积木分别将它们的值设为40和60。这设定了Sparky的初始速度。现在从Sprites拖出set Sparky velocity to vx 0 vy 0积木。将vx和vy的值分别用Variables类别中的SparkySpeedX和SparkySpeedY积木替换。这样Sparky的速度就由我们定义的变量控制了方便后续修改。最后添加set Sparky bounce on wall积木并确保开关是on。这样Sparky碰到屏幕边缘就会反弹。测试敌人行为运行模拟器。现在Sparky应该以一个斜向的速度向右下角开始移动并在碰到屏幕边缘时反弹。但此时它还没有任何威胁因为我们还没处理碰撞。4.3 构建游戏核心机制生命、目标与计时设置游戏状态从Info类别拖出set life to 3积木。这给了玩家3条命。从Info拖出start countdown 10 s积木。将其改为4 s即4秒。这创造了时间压力。创建收集目标——星星拖出set mySprite to sprite of kind Food重命名为Star绘制一个黄色的星星。用set Star position to ...将它放在一个初始位置。注意不要和Blinka或Sparky的初始位置重叠。4.4 实现游戏交互逻辑现在我们来定义游戏规则也就是各种“事件处理器”。吃到星星的规则从Sprites类别拖出on sprite of kind Player overlaps otherSprite of kind Food积木。这个事件会在玩家精灵碰到食物类精灵时触发。在这个事件块内部添加play sound ba ding积木在Music类别给予玩家正面反馈。添加change score by 1积木Info类别。关键一步让星星随机重生。添加set Star position to x pick random 0 to 160 y pick random 0 to 120。pick random积木在Math类别。这里假设屏幕是160x120像素确保星星出现在屏幕内。添加start countdown 4 s积木重置计时器。碰到敌人的惩罚拖出on sprite of kind Player overlaps otherSprite of kind Enemy积木。在这个事件块内部添加一个听起来比较“痛”的音效比如play sound wawawawaa。添加change life by -1积木。同样重置敌人位置添加set Sparky position to x pick random 20 to 140 y pick random 20 to 100。范围可以比星星小一些避免敌人一开始就出现在玩家脸上或紧贴边缘。添加camera shake by 4 pixels for 250 ms积木Scene类别。屏幕震动能强烈提示玩家受到了伤害。动态难度随时间加速的敌人这是让游戏保持挑战性的核心。拖出on game update every 5000 ms积木在Game类别。这个事件会每5000毫秒5秒自动触发一次。在事件块内部添加两个change SparkySpeedX by 10和change SparkySpeedY by 10积木。这样每过5秒Sparky在两个方向的速度都会增加10。最重要的一步更新速度变量到精灵。添加set Sparky velocity to vx SparkySpeedX vy SparkySpeedY积木。如果你不执行这一步那么SparkySpeedX/Y变量的值虽然增加了但Sparky的实际速度并没有改变这是一个常见的逻辑错误。至此游戏的所有核心逻辑已经完成。你现在应该可以在模拟器中玩到一个功能完整的游戏了控制Blinka躲避越来越快的Sparky在4秒内吃到星星得分。生命耗尽或时间归零游戏结束。5. 从代码到街机游戏部署与硬件调试当你在模拟器中调试满意后就可以将作品“灌入”那台实体游戏机了。这个过程充满仪式感但也可能遇到一些小麻烦。5.1 生成游戏文件与上传下载游戏在MakeCode Arcade编辑器中点击底部大大的紫色“Download”按钮。选择硬件在弹出的窗口中可能会提示“配对你的街机”直接点击“x”关闭。然后会出现硬件选择列表。务必选择“Adafruit Joy Bonnet”。如果你选择了错误的硬件如“Raspberry Pi”游戏可能无法在Joy Bonnet上正确响应按键。生成UF2文件再次点击“x”关闭配对提示。此时浏览器会下载一个名为arcade-xxxxxx.uf2的文件。这个文件包含了你的游戏和运行它所需的所有环境。连接树莓派用Micro USB数据线将树莓派Zero上靠近HDMI接口的那个USB口数据口连接到你的电脑。之前用于供电的电源线保持连接。上传游戏连接后你的电脑上会弹出一个名为ARCADE的可移动磁盘就像U盘一样。将刚才下载的.uf2文件直接复制或拖拽到这个ARCADE磁盘里。自动运行复制完成后树莓派会自动重启ARCADE磁盘会消失几秒钟后你的游戏就会出现在树莓派启动后的游戏菜单中使用Joy Bonnet的摇杆选择你的游戏按下A键开始游玩。5.2 常见问题排查实录即使步骤正确你也可能会遇到一些问题。以下是我在实践中总结的排查清单问题现象可能原因解决方案电脑没有弹出ARCADE磁盘1. USB线仅支持充电不支持数据。2. 连接的是树莓派的“PWR”口而非“USB”口。3. 系统固件未正确烧录。1. 换一根确认能传输数据的Micro USB线。2. 确保连接的是靠近HDMI的USB口。3. 重新检查SD卡固件烧录步骤确保文件在根目录。ARCADE磁盘出现但无法复制文件磁盘空间已满或文件系统错误。复制游戏文件时树莓派会自动格式化该磁盘。如果失败可以尝试重新给树莓派上电再次连接。游戏出现在菜单但无法启动/黑屏1. 游戏逻辑有严重错误如死循环。2. 在MakeCode下载时选错了硬件类型。1. 回MakeCode模拟器仔细测试游戏确保没有逻辑BUG。2. 重新下载务必选择“Adafruit Joy Bonnet”。Joy Bonnet摇杆或按钮无反应1. 硬件接触不良。2. 游戏内未正确配置控制器但MakeCode Arcade游戏通常自动映射。1.重点检查关闭电源重新拔插Joy Bonnet确保其完全、平整地插在GPIO排针上。2. 在树莓派主菜单测试其他预装游戏如果都没反应则是硬件问题如果其他游戏正常则是你的游戏问题。显示器无信号1. HDMI线或接口问题。2. 显示器输入源未切换正确。3. 电源供电不足。1. 检查HDMI线两端是否插紧尝试更换线缆或显示器。2. 将显示器输入源切换到对应的HDMI端口。3.先连接好HDMI线再给树莓派上电。有些显示器在树莓派启动后连接无法识别。使用足额5V/2.5A电源。避坑技巧固件更新与多游戏管理。你的树莓派ARCADE磁盘可以存储多个.uf2文件。每次复制新文件进去它会覆盖旧的游戏。如果你想保留多个游戏需要在MakeCode中将多个项目合并成一个“项目库”或者使用更高级的管理工具。另外Adafruit会不定期更新树莓派Arcade的固件以提升性能或兼容性。如果遇到无法解释的兼容性问题可以尝试从Adafruit官方指南页面下载最新的arcade.zip固件包重新烧录SD卡。6. 创意扩展与深入学习路径完成基础版本后你的游戏创作才刚刚开始。这里有一些方向可以让你的游戏变得更具个性和挑战性增加攻击与防御发射子弹在on A button pressed事件中创建一个新的“Projectile”类精灵设置其从Blinka位置发射并赋予一个速度。在on sprite of kind Projectile overlaps otherSprite of kind Enemy事件中让子弹和敌人同时消失使用destroy积木并给玩家加分。设置护盾创建一个变量shield。按下B键时将shield设为true并改变Blinka的外观如变色。在Blinka与敌人碰撞的事件中加入一个if...else判断如果shield为true则只消耗护盾设shield为false恢复外观不扣生命否则才扣生命。丰富游戏内容多种敌人创建不同速度、不同移动模式直线、跟踪、圆周运动的敌人赋予它们不同的“Kind”如Enemy1,Enemy2并设置不同的碰撞效果。道具系统创建“SpeedUp”加速、“Invincible”无敌等不同种类的“Food”。在碰撞事件中用if积木判断碰到的是哪种食物然后触发不同的效果如修改玩家速度变量、设置一个无敌计时器。打磨视听体验背景音乐在on start中使用play melody积木循环播放一段简单的芯片音乐营造氛围。粒子效果当星星被吃掉或敌人被击中时使用create sprite at position with velocity创建多个小的、随机方向飞散的像素点模拟爆炸效果然后很快销毁它们。关卡设计利用set tilemap to积木在Scene-Tilemap创建带有墙壁、障碍物的关卡地图。设置玩家和敌人不能穿过“Wall”类型的图块。我个人最享受的时刻不是游戏最终完成的那一刻而是在调试过程中突然灵光一现想到一个让游戏更好玩的小点子然后立刻用积木把它实现出来并在模拟器上看到效果的那个瞬间。MakeCode Arcade把“创意-实现-验证”的循环压缩到了极致。当你熟悉了这些基础积木后强烈建议你去探索它的“扩展”功能点击工具箱底部的“Extensions”那里有社区贡献的更多强大积木比如物理引擎、高级动画、音乐合成器等能帮你实现更复杂的游戏机制。记住所有复杂的游戏都是由这些简单的规则叠加而成的。现在你掌握了创造它们的工具剩下的就是释放你的想象力了。

相关文章:

用MakeCode Arcade与树莓派Zero打造复古像素游戏:从拖拽编程到实体街机

1. 项目概述:为什么选择MakeCode Arcade开启你的游戏开发之旅?如果你对编程充满好奇,又或者一直想亲手制作一款属于自己的复古像素风游戏,但被一行行复杂的代码劝退,那么MakeCode Arcade就是你一直在寻找的答案。它不是…...

告别环境配置焦虑:用Intel oneAPI和OpenMPI在CentOS7搭建你的第一个并行计算Demo

告别环境配置焦虑:用Intel oneAPI和OpenMPI在CentOS7搭建你的第一个并行计算Demo 高性能计算(HPC)的世界常常让人望而生畏——复杂的工具链、晦涩的术语、漫长的环境配置过程。但今天,我们将打破这一认知。只需一台CentOS7服务器…...

Harness Open Source 与 GitLab 的区别:一个轻量一体化 DevOps 平台,一个完整 DevSecOps 平台

Harness:https://github.com/harness/harness 一、先给结论 Harness Open Source 和 GitLab 都可以做代码托管、代码协作、CI/CD 和制品管理,但二者的产品边界不同。 Harness Open Source 官方定位是一个开源的一体化开发平台,集成源码管理、CI/CD pipelines、托管开发环…...

HTML图片怎么在Firefox中调试对齐_Firefox开发者工具调图方法.txt

连接数爆满主因是线程卡住而非数量多,应重点关注SHOW FULL PROCESSLIST中State非Sleep且Time>60秒的阻塞线程,优先排查应用端连接未释放、监控脚本高频查询及本地进程异常连接。直接看 SHOW PROCESSLIST 里哪些线程在“卡住”连接数爆满&…...

基于ESP32与WLED打造智能可编程灯饰:从硬件连接到软件配置全攻略

1. 项目概述:打造你的专属智能光影秀又到年底了,看着满大街千篇一律的彩灯装饰,是不是觉得有点审美疲劳?想不想自己动手,做一套独一无二、能通过手机随心控制颜色和动画的智能灯饰?今天分享的这个项目&…...

怎样更换照片背景?2026电脑手机软件方案全对比

想要快速更换照片背景却不知道用什么工具?市面上的照片处理软件五花八门,到底哪个才能满足你的需求?本文将为你详细对比电脑和手机上最实用的背景更换方案,帮你找到最适合的解决方式。照片更换背景的核心方法概览更换照片背景主要…...

Verilog时钟分频:从原理到工程实践,避坑指南与最佳方案

1. 项目概述:为什么时钟分频是数字设计的基石在数字电路和FPGA设计里,时钟信号就像是整个系统的心跳。它驱动着寄存器、状态机和数据流,确保所有操作在正确的节拍下同步进行。但现实情况是,我们手头的时钟源往往只有一个固定的频率…...

书匠策AI官网www.shujiangce.com:期刊论文从“渡劫“到“躺赢“,中间只差这一个工具

家人们,今天不讲课,今天带你们"开箱"一个我私藏很久的论文神器。 先说结论——书匠策AI( 官网直达:www.shujiangce.com) 的期刊论文功能,是我今年用过最"懂科研人"的AI工具&#xff…...

手把手教你:用Edge/Chrome浏览器把Jupyter Notebook作业直接保存为PDF(含画布大小调整技巧)

手把手教你:用Edge/Chrome浏览器将Jupyter Notebook作业完美导出为PDF 深夜赶作业时,你是否遇到过这样的困境:精心编写的Jupyter Notebook包含复杂公式和可视化图表,却在导出PDF时遭遇格式错乱、中文显示为方框、图表被截断等问题…...

如何快速上手小米手表表盘设计:免费工具Mi-Create的终极指南

如何快速上手小米手表表盘设计:免费工具Mi-Create的终极指南 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 还在为小米手表找不到心仪的表盘而烦恼…...

Claude Code出质量事故了?Anthropic发了一篇有诚意的复盘|AI新岗位FDE爆火

每天更新,带你读懂科技圈。 今日看点: Anthropic 正式回应 Claude Code 质量下降的社区讨论,披露三条幕后原因;FDE(Forward Deployed Engineer)正在成为 AI 公司争抢的新岗位;Figma 自研 Redis …...

SLO-Warden:云原生时代SLO自动化管理的工程实践

1. 项目概述:当SLO成为运维的“紧箍咒”在云原生和微服务架构成为主流的今天,服务的稳定性和可靠性不再是锦上添花,而是业务的生命线。对于运维工程师和SRE(站点可靠性工程师)而言,我们每天都在和各种指标、…...

如何快速清理Zotero重复文献:智能合并工具完整指南

如何快速清理Zotero重复文献:智能合并工具完整指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 你是否经常为Zotero文献库中的重…...

QuickBMS深度剖析:游戏资源提取的终极解决方案与实战指南

QuickBMS深度剖析:游戏资源提取的终极解决方案与实战指南 【免费下载链接】QuickBMS QuickBMS by aluigi - Github Mirror 项目地址: https://gitcode.com/gh_mirrors/qui/QuickBMS QuickBMS是一款强大的开源游戏资源处理引擎,专为游戏开发者、逆…...

SSD的‘垃圾回收’秘密:深入理解Trim指令与FTL闪存转换层的协作

SSD的‘垃圾回收’秘密:深入理解Trim指令与FTL闪存转换层的协作 当你在SSD上删除一个文件时,操作系统只是简单地标记这个文件占用的空间为"可重用",但SSD内部的实际数据擦除过程远比这复杂。这种差异源于NAND闪存的物理特性——它不…...

基于Cadence Virtuoso的gm/ID曲线仿真与参数扫描实战指南

1. 从零理解gm/ID设计方法学 在模拟电路设计领域,随着工艺节点不断缩小,我们这些工程师遇到了一个尴尬的现实:教科书里的那些经典公式越来越不灵了。记得我第一次用28nm工艺设计运放时,按照传统方法计算的增益和实测结果差了近40%…...

D2RML:暗黑破坏神2重制版多开终极指南,告别繁琐登录流程

D2RML:暗黑破坏神2重制版多开终极指南,告别繁琐登录流程 【免费下载链接】D2RML Diablo 2 Resurrected Multilauncher 项目地址: https://gitcode.com/gh_mirrors/d2/D2RML 还在为暗黑破坏神2重制版的多账户切换而烦恼吗?每次登录战网…...

ModusToolbox实战:如何系统化降低物联网开发复杂性

1. 项目概述:为什么我们需要关注“复杂性”?在物联网(IoT)领域摸爬滚打十几年,我见过太多项目从雄心勃勃到最终搁浅,其核心症结往往不在于某个高深的技术难题,而在于“复杂性失控”。一个典型的…...

C语言实现热水器温度控制PID算法详解与嵌入式实战

1. 项目概述与核心价值最近在整理一些嵌入式开发的老项目,翻出来一个用C语言写的热水器温度控制PID算法示例。这玩意儿虽然代码量不大,但麻雀虽小五脏俱全,把PID控制的核心思想、参数整定、抗积分饱和这些关键点都体现出来了。对于刚接触自动…...

深入解析Safe智能合约钱包:架构、安全与开发实践

1. 项目概述:一个面向未来的智能合约钱包架构如果你在Web3领域待过一段时间,尤其是深度参与过以太坊生态的DApp开发或资产管理,那么你一定对“钱包”这个入口工具有着复杂的感情。一方面,它是我们通往链上世界的钥匙;另…...

容器化自动化数据抓取平台OpenClaw-Compose部署与实战指南

1. 项目概述:一个容器化的开源自动化抓取与处理平台最近在折腾一个自动化数据抓取和处理的项目,发现了一个挺有意思的GitHub仓库:alexleach/openclaw-compose。乍一看标题,你可能会觉得这又是一个普通的Docker Compose编排文件集合…...

Windows驱动管理终极指南:DriverStore Explorer完全使用手册,轻松解决磁盘空间和驱动冲突问题

Windows驱动管理终极指南:DriverStore Explorer完全使用手册,轻松解决磁盘空间和驱动冲突问题 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾经因为C盘…...

8B模型做生物实验:实验步骤顺序不乱、剂量无幻觉|ICLR 2026

Thoth团队 投稿量子位 | 公众号 QbitAI人类研究员做实验,从来不是把几句步骤随手拼起来。一份真正可复现的实验protocol,需要明确每一步做什么、对什么对象操作、用什么参数,以及步骤之间的先后依赖。一旦顺序错了、剂量错了、对象错了&#…...

开源机械爪资源宝库:从入门到进阶的完整实践指南

1. 项目概述:一个为开源“机械爪”而生的资源宝库如果你对机器人、自动化或者开源硬件感兴趣,最近又在琢磨着给自己的项目加个能抓取、能操作的“手”,那么你很可能已经听说过或者正在寻找“OpenClaw”相关的资料。vincentkoc/awesome-opencl…...

Need is all you need:AI接手Coding后,程序员最值钱的能力只剩这一项?

闻乐 发自 凹非寺量子位 | 公众号 QbitAIAI Coding的玩法,又变了。如果你留意就会发现,Cursor、Windsurf、Claude Code这些顶流玩家,现在基本都不爱吹“代码生成有多快”了。话锋一转,全在讲“我能帮你完成多少任务”。这个微妙的…...

LabVIEW架构演进:从数据流到混合计算与云原生的未来

1. 项目概述:从一次访谈看LabVIEW的架构演进最近,我偶然看到一篇关于LabVIEW之父Jeff Kodosky的访谈,他谈到了LabVIEW未来软件架构的构想。作为一名在测控领域摸爬滚打了十多年的工程师,这个话题瞬间就抓住了我的眼球。LabVIEW&am…...

STM32 HAL库设计解析:从GPIO到外设的面向对象编程实践

1. 项目概述:从寄存器操作到HAL API的思维跃迁如果你是从标准外设库(SPL)或者更早的寄存器直接操作时代过来的STM32开发者,第一次接触HAL库时,可能会觉得有点“绕”。为什么一个简单的引脚翻转,不再是对GPI…...

5大隐藏功能揭秘:Markor如何重塑Android移动文本创作生态

5大隐藏功能揭秘:Markor如何重塑Android移动文本创作生态 【免费下载链接】markor Text editor - Notes & ToDo (for Android) - Markdown, todo.txt, plaintext, math, .. 项目地址: https://gitcode.com/gh_mirrors/ma/markor 在移动设备成为主要生产力…...

蓝牙Mesh、Beacon都靠它:深入浅出图解蓝牙广播帧的8种类型与应用场景

蓝牙广播帧全解析:从Beacon到Mesh的8种通信范式 当你在商场收到精准的优惠推送,当智能灯泡自动组网完成,当无线耳机实现多人共享音频——这些场景背后都藏着一个低调的通信英雄:蓝牙广播帧。不同于需要"握手"的连接通信…...

OpenWrt嵌入式Linux开发入门:从编译到部署的完整实践指南

1. 项目概述:为什么选择OpenWrt作为嵌入式开发的起点 如果你对Linux系统有一定了解,并且想踏入嵌入式开发的大门,或者你是一个网络爱好者,想让家里的路由器“脱胎换骨”,那么OpenWrt绝对是一个绕不开的名字。它不是一…...