基于Arduino Uno与LCD1602的跳跃游戏机开发实战
1. 项目缘起从“跳一跳”到“JumpMan”的硬件复刻之旅几年前一款名为“跳一跳”的微信小游戏风靡一时其简单的操作和魔性的玩法让人欲罢不能。作为一名电子爱好者我总在想能不能把这种纯粹的跳跃乐趣从手机屏幕里“抠”出来变成一个看得见、摸得着的实体游戏机这就是“JumpMan Game”项目的起点。它不是一个复杂的3A大作而是一个回归游戏本源的尝试用最经典的硬件——Arduino、LCD屏和按键——来复现那种精准控制、挑战极限的快乐。这个项目的核心就是用Arduino Uno作为大脑驱动一块LCD屏幕来绘制游戏世界再通过一个简单的4x4矩阵键盘来接收玩家的跳跃指令。听起来简单但要把“跳跃”这个动作的物理逻辑、游戏角色的动态表现、障碍物的随机生成以及分数计算全部在资源有限的单片机上流畅跑起来里面有不少门道。它考验的不是图形渲染技术而是对单片机性能的极致压榨和对游戏逻辑的精准把控。如果你手头正好有一块Arduino Uno、一个LCD1602或LCD2004屏以及几个按键那么跟着这篇笔记你就能亲手打造出属于你自己的桌面级跳跃游戏机。2. 硬件选型与核心电路设计硬件是游戏的骨架选型直接决定了项目的可行性和最终体验。我的核心思路是在满足功能的前提下尽可能选择最常见、最易得的模块降低大家的复现门槛。2.1 主控芯片为什么是Arduino UnoArduino Uno几乎是所有单片机爱好者的入门首选选择它理由很充分生态与社区支持拥有海量的库和教程任何你遇到的问题几乎都能找到现成的解决方案或讨论。这对于游戏开发中遇到的显示、输入、定时等问题至关重要。资源够用ATmega328P芯片拥有32KB的Flash存程序和2KB的RAM运行内存。对于JumpMan这种2D像素游戏来说只要优化得当完全够用。游戏地图数据、角色状态、分数变量等都可以精心设计数据结构来节省内存。引脚数量14个数字I/O口和6个模拟输入口足以驱动LCD屏至少6个引脚和矩阵键盘8个引脚并且还有富余。开发便捷通过USB线直接烧录程序无需额外的下载器大大简化了开发流程。当然你也可以用更强大的ESP32或者STM32它们性能更强能驱动更漂亮的屏幕。但对于这个项目的初心——用经典硬件复刻经典玩法——Uno的“刚好够用”反而更有挑战性和复古趣味。2.2 显示模块字符型LCD1602/LCD2004的妙用你可能疑惑一个只能显示字母和数字的字符LCD怎么做游戏图形这就是这个项目的第一个巧思。我们并不需要显示复杂的图片JumpMan的游戏元素可以全部用自定义字符Custom Character来构建。LCD160216列x2行或LCD200420列x4行控制器通常是HD44780允许用户自定义8个5x8像素的字符。我们可以把这8个“积木”利用到极致C0: 用于绘制游戏主角“JumpMan”的不同姿态站立、下蹲、跳跃过程。C1-C3: 用于绘制不同高度的平台平台顶部、平台侧面、平台柱子。C4: 用于绘制尖刺、钻石等障碍物或收集物。C5-C7: 预留可用于绘制特效如跳跃尘埃、额外障碍物或数字的个性化显示。通过精心设计这些5x8的像素图案并在屏幕的不同位置组合它们我们就能在字符LCD上构建出一个有平台、有角色、有障碍物的动态游戏世界。虽然分辨率极低但那种像素感和创造性正是复古电子制作的魅力所在。2.3 输入设备4x4矩阵键盘 vs. 独立按键输入必须简单直接。有两种主流方案方案A4x4矩阵键盘。只需要8个I/O口4行4列就能管理16个按键节省引脚。我们可以定义其中几个键例如“2”键向上跳“8”键向下跳如果有下蹲设定“5”键确认/开始“*”和“#”键用于菜单选择。矩阵键盘的扫描需要编写相应的程序但有很多现成库如Keypad可用。方案B独立按键。使用3-4个独立的轻触开关分别接上拉电阻到数字引脚。这种方式程序最简单直接digitalRead但占用引脚较多。对于Uno来说如果用了LCD6-7个引脚再加上4个独立按键引脚可能就比较紧张了。从扩展性和经典性考虑我选择了4x4矩阵键盘。它让设备看起来更像一个完整的“游戏机”而不仅仅是几个按钮的试验板。2.4 电路连接原理图以下是核心的连接示意以LCD1602并口模式、4x4键盘为例Arduino Uno -- 外围模块 ----------------------------- Digital Pin 2 - 键盘行1 (Row1) Digital Pin 3 - 键盘行2 (Row2) Digital Pin 4 - 键盘行3 (Row3) Digital Pin 5 - 键盘行4 (Row4) Digital Pin 6 - 键盘列1 (Col1) Digital Pin 7 - 键盘列2 (Col2) Digital Pin 8 - 键盘列3 (Col3) Digital Pin 9 - 键盘列4 (Col4) Digital Pin 10 - LCD RS Digital Pin 11 - LCD EN Digital Pin 12 - LCD D4 Digital Pin 13 - LCD D5 Analog Pin A0 - LCD D6 (当作数字口用) Analog Pin A1 - LCD D7 (当作数字口用) 5V - LCD VCC, 键盘共阳行如果键盘是共阳接法 GND - LCD GND, LCD VSS, 键盘共阴列如果键盘是共阴接法 LCD V0 - 接10K电位器中间脚用于调节对比度注意LCD的背光LED和LED-如果需要可以串联一个限流电阻后接5V和GND。键盘是共阳还是共阳决定了扫描逻辑是行输出高电平、列读取还是行输出低电平、列读取需要根据具体键盘模块调整代码。3. 软件架构与核心逻辑实现硬件搭好只是舞台软件才是灵魂。JumpMan的软件核心是一个状态机它驱动着游戏世界的运转。3.1 游戏状态机设计游戏至少包含以下几个状态START_SCREEN: 启动画面显示游戏标题、最高分等待玩家按下开始键。PLAYING: 游戏进行中。这是最复杂的状态包含角色更新、物理计算、碰撞检测、画面渲染、分数计算等。PAUSED: 游戏暂停。冻结所有游戏逻辑屏幕显示暂停标识。GAME_OVER: 游戏结束。显示本次得分、是否破纪录并提示重新开始。状态之间通过事件如按键、碰撞进行转换。用一个全局变量如gameState来记录当前状态主循环loop()根据这个状态调用不同的处理函数。3.2 物理与运动系统跳跃的数学这是游戏手感的关键。我们模拟一个简单的匀变速运动。角色属性我们需要记录角色的y坐标在屏幕上的行位置可以是浮点数以增加精度、垂直速度vy。重力定义一个重力加速度常量GRAVITY例如0.2像素/帧²。每一帧vy vy GRAVITY。跳跃当玩家按下跳跃键时如果角色在地面或平台上则给vy一个向上的初速度JUMP_FORCE例如-3.5像素/帧。这个负值表示向上。位置更新每一帧y y vy。地面碰撞当y大于或等于某个平台的高度时判定为落地。将vy设为0y修正到平台表面。为了让跳跃感觉更自然可以加入“跳跃蓄力”机制按住跳跃键的时间长短影响JUMP_FORCE的大小但需要设置一个上限。3.3 画面渲染在字符LCD上“画画”这是最具挑战也最有成就感的部分。我们需要两个层次的渲染静态背景平台渲染游戏场景由一系列随机生成的平台组成。每个平台有它的水平位置列和高度行。我们可以用一个数组来存储这些平台信息。在PLAYING状态需要将这些平台用自定义字符绘制到LCD的相应位置上。动态角色渲染角色的y坐标是浮点数但LCD显示位置是整数行。我们需要将角色的y坐标映射到最接近的LCD行。同时根据角色的状态站立、上升、下降选择对应的自定义字符C0的不同形态进行绘制。关键技巧局部刷新。LCD全屏刷新速度较慢会导致闪烁。我们必须只刷新发生变化的部分。例如在角色移动前先在其旧位置绘制一个“空”字符空格来擦除。然后在角色的新位置绘制角色字符。平台一旦生成除非角色将其“踩塌”否则不需要重绘。分数更新时只刷新显示分数的区域。3.4 碰撞检测与游戏逻辑碰撞检测在低分辨率下可以做得非常简单平台碰撞检测角色底部y 角色高度是否与某个平台顶部平台行重合并且角色的水平位置列在平台的左右边界内。如果同时满足则判定为落地停止下落可以再次起跳。障碍物碰撞检测角色所在位置或一个包围盒是否与代表尖刺C4字符的位置重合。如果重合则生命值减一或直接进入GAME_OVER状态。边界碰撞如果角色y坐标超出屏幕顶部小于0或底部大于LCD最大行通常底部超出意味着坠落死亡顶部超出可以设计为“跳上云端”获得奖励或直接判定为出界。游戏逻辑还包括分数计算成功跳上一个新平台1分连续跳跃中心点完美跳跃额外加分收集钻石加分。平台生成当角色跳到屏幕一定高度时在屏幕上方生成新的平台同时屏幕内所有平台包括角色可以缓慢下移制造出角色不断向上的视觉效果。最下方的平台移出屏幕后即被删除以节省内存。难度递增随着分数增加可以减小平台的宽度、增加平台间距、增加移动平台或出现更多的障碍物。4. 代码实现详解与关键库的使用让我们深入到代码层面看看如何将上述逻辑组合起来。4.1 必备库的安装与初始化首先在Arduino IDE中安装两个核心库LiquidCrystal库Arduino内置用于驱动LCD。我们使用4位数据线模式。Keypad库通过“工具”-“管理库”搜索Keypad并安装用于扫描矩阵键盘。初始化代码如下#include LiquidCrystal.h #include Keypad.h // 1. 初始化LCD (RS, EN, D4, D5, D6, D7) LiquidCrystal lcd(10, 11, 12, 13, A0, A1); // 2. 定义键盘矩阵 const byte ROWS 4; const byte COLS 4; char keys[ROWS][COLS] { {1,2,3,A}, {4,5,6,B}, {7,8,9,C}, {*,0,#,D} }; byte rowPins[ROWS] {2, 3, 4, 5}; // 连接行引脚 byte colPins[COLS] {6, 7, 8, 9}; // 连接列引脚 Keypad keypad Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // 3. 定义自定义字符图案 (5x8像素) byte jumpManUp[8] { // 跳跃上升姿态 0b00100, 0b01110, 0b00100, 0b10101, 0b01110, 0b00100, 0b01010, 0b10001 }; // ... 定义其他7个自定义字符图案站立、下降、平台等 void setup() { lcd.begin(16, 2); // 初始化LCD为16列2行 // 将自定义字符写入LCD的CGRAM lcd.createChar(0, jumpManUp); // lcd.createChar(1, ...); // ... lcd.clear(); lcd.print(JumpMan Ready!); delay(1000); }4.2 主循环与状态调度loop()函数非常简洁只负责状态调度和输入检测enum GameState {START, PLAYING, PAUSED, GAME_OVER}; GameState gameState START; void loop() { char key keypad.getKey(); // 非阻塞式读取按键 switch(gameState) { case START: handleStartScreen(key); break; case PLAYING: handlePlayingState(key); break; case PAUSED: handlePausedState(key); break; case GAME_OVER: handleGameOverScreen(key); break; } }4.3 核心游戏逻辑函数handlePlayingState这是代码最密集的部分我将其拆解void handlePlayingState(char key) { static unsigned long lastUpdateTime 0; const int FRAME_DELAY_MS 50; // 控制游戏帧率20 FPS // 1. 帧率控制 if (millis() - lastUpdateTime FRAME_DELAY_MS) return; lastUpdateTime millis(); // 2. 处理输入 if (key 2) { // 假设‘2’键是跳跃 if (player.isOnGround) { player.vy -JUMP_FORCE; // 起跳 player.isOnGround false; } } else if (key 5) { // ‘5’键暂停 gameState PAUSED; return; } // 3. 物理更新 player.vy GRAVITY; player.y player.vy; // 4. 碰撞检测 bool collided false; for (int i 0; i platformCount; i) { if (checkCollision(player, platforms[i])) { player.y platforms[i].topY - PLAYER_HEIGHT; // 修正到平台表面 player.vy 0; player.isOnGround true; collided true; // 如果是新平台加分 if (!platforms[i].isScored) { score; platforms[i].isScored true; } break; } } if (!collided player.y GROUND_LEVEL) { player.isOnGround false; } // 5. 边界与死亡检测 if (player.y LCD_ROW_BOTTOM) { gameState GAME_OVER; return; } if (checkObstacleCollision(player)) { gameState GAME_OVER; return; } // 6. 画面渲染局部刷新 renderGame(); // 这个函数内部实现擦除旧位置、绘制新位置、更新分数显示等 // 7. 游戏世界更新如生成新平台 if (needToGenerateNewPlatform()) { generatePlatform(); } }4.4 自定义字符设计与内存优化8个自定义字符是宝贵的资源。为了在一个字符内表达更多信息我采用了“多重定义”的技巧。例如同一个字符码在游戏的不同阶段可以重写为不同的图案。在游戏初始化时写入一套在进入BOSS关时如果设计有再重写另一套。但这需要精细地管理重写时机避免画面错乱。更稳妥的做法是精心设计8个最通用、使用最频繁的图案。通常包括主角2-3个形态平台组件2-3个障碍物1个收集物1个特效1个。LCD20044行比LCD16022行有更大的显示空间可以设计更复杂的场景。5. 调试、优化与功能扩展项目做到这里基本功能已经实现。但要让游戏体验更上一层楼还需要一番打磨。5.1 常见问题与调试技巧LCD显示乱码或闪烁检查接线这是最常见的问题尤其是4位数据线模式D4-D7顺序不能错。检查对比度调节连接在V0引脚上的电位器直到字符清晰显示。降低刷新率如果画面闪烁严重尝试增加FRAME_DELAY_MS降低帧率。或者检查你的renderGame()函数是否进行了不必要的全屏刷新。按键无响应或连击检查键盘库配置确认rowPins和colPins数组与你的实际接线一致。消抖处理Keypad库通常自带消抖但如果仍有问题可以在代码中手动添加延时判断比如检测到按键后忽略接下来100ms内的重复检测。电源问题确保键盘和Arduino共地并且供电充足。游戏运行卡顿优化碰撞检测不要每帧都检测所有平台。只检测角色周围可能发生碰撞的几个平台比如只检测Y坐标在角色下方一定范围内的平台。简化物理计算如果浮点数运算慢可以尝试使用定点数整数运算模拟小数。例如将1像素定义为100个单位那么速度vy可以是350代表3.5像素/帧。审查renderGame()确保它只重绘了屏幕上真正变化的那几个点而不是整个屏幕。5.2 性能优化实战对于ATmega328PRAM是稀缺资源。平台数组不要用结构体数组存储所有信息可以用更紧凑的方式。例如平台只需要存储其类型决定外观和生成时的初始行偏移。因为平台是随着游戏向下滚动的其当前Y坐标可以通过一个全局的cameraY偏移量计算出来这样就无需为每个平台存储动态的Y坐标。// 优化前每个平台存储完整信息 struct Platform { int x; int y; int width; bool scored; }; Platform platforms[10]; // 占用较多内存 // 优化后只存储必要信息动态计算位置 struct Platform { byte type; // 0: 短平台1: 长平台2: 移动平台... byte initRelY; // 相对于某个基准线的初始Y偏移 }; Platform platforms[10]; int globalScrollOffset 0; // 全局滚动偏移 // 计算某个平台当前屏幕Y坐标 screenY initRelY - globalScrollOffset;5.3 功能扩展思路基础版完成后你可以尽情发挥创意增加音效用一个无源蜂鸣器连接一个PWM引脚在跳跃、得分、死亡时播放简单的音调。这需要用到tone()函数。加入更多元素比如会左右移动的平台、一踩就消失的脆弱平台、弹簧床超级跳、下落的陨石等。这需要扩展你的游戏对象管理系统。实现关卡制设计几套不同的平台生成算法和障碍物密度随着分数提高切换算法实现难度阶梯。更换显示设备如果你觉得字符LCD限制太大可以升级到OLEDI2C接口只需2个引脚或者更高级的SPI TFT彩屏。这需要更换图形库如U8g2, Adafruit GFX游戏画面将得到质的飞跃但代码复杂度也会增加。使用EEPROM存储最高分利用Arduino内置的EEPROM让最高分在断电后也能保存。从一块简单的Arduino开发板到最终一个能玩、有挑战性的桌面小游戏这个过程充满了解决问题的乐趣和创造的成就感。JumpMan Game项目就像是一个微型的游戏开发沙盒它让你理解了游戏循环、状态机、物理模拟、碰撞检测、资源管理等核心概念。最重要的是它证明了乐趣不一定需要强大的硬件创意和代码才是真正的魔法。希望这篇详细的笔记能帮你点燃制作自己硬件游戏的火花。

相关新闻

ESP32边缘AI蜂箱监测:从音频采集到MQTT告警全流程解析

ESP32边缘AI蜂箱监测:从音频采集到MQTT告警全流程解析

1. 项目概述:用ESP32和边缘AI守护蜂群健康养蜂是个精细活,蜂箱内部的状态,尤其是蜂群的“情绪”或应激水平,对蜂蜜产量和蜂群健康至关重要。传统上,这依赖养蜂人开箱检查,既打扰蜂群,又无法做到…

2026/8/19 3:51:20 阅读更多 →
基于Arduino Uno R4 WiFi的网页版Pong Wars游戏开发实战

基于Arduino Uno R4 WiFi的网页版Pong Wars游戏开发实战

1. 项目缘起:当经典游戏遇上开源硬件最近在捣鼓一块Arduino Uno R4 WiFi开发板,总想着用它做点既有趣又能体现其网络和图形能力的东西。手头正好有块小屏幕,一个念头就冒了出来:能不能把经典的“Pong”游戏搬上来,并且…

2026/8/19 3:51:20 阅读更多 →
Power Test实战指南:从压测策略到瓶颈定位的完整方法论

Power Test实战指南:从压测策略到瓶颈定位的完整方法论

1. 项目概述:从“测一下”到“测明白”的认知跃迁“Power test”,字面翻译是“电源测试”或“功率测试”,听起来像是一个硬件工程师或电工的专属领域。但如果你也这么想,那可能就错过了它背后更广阔的应用场景和深层价值。在我十多…

2026/8/19 3:51:20 阅读更多 →

最新新闻

树莓派Pico通过W5500实现以太网通信:MicroPython驱动与实战指南

树莓派Pico通过W5500实现以太网通信:MicroPython驱动与实战指南

1. 项目缘起:为什么要在Pico上折腾以太网? 最近在做一个需要联网上报数据的嵌入式小项目,主控选用了性价比极高的树莓派Pico。项目本身不复杂,但有一个硬性要求:设备必须通过有线网络接入局域网,以保证通信…

2026/8/19 4:25:16 阅读更多 →
基于树莓派与E-ink屏打造个性化信息看板:从硬件连接到智能渲染

基于树莓派与E-ink屏打造个性化信息看板:从硬件连接到智能渲染

1. 项目概述:为什么我们需要一个E-ink Dashboard? 几年前,我在书桌上摆满了各种屏幕:一个用来写代码,一个用来查资料,还有一个平板电脑专门用来显示日程和待办事项。每天早上,光是唤醒这些屏幕&…

2026/8/19 4:25:16 阅读更多 →
基于STM32与光电传感器的宠物智能水位监测器设计与实现

基于STM32与光电传感器的宠物智能水位监测器设计与实现

1. 项目缘起:一个被忽视的日常痛点养过宠物的人,尤其是养猫养狗的朋友,应该都遇到过这个场景:你正忙着手头的工作,或者沉浸在追剧的快乐中,家里的毛孩子突然跑过来,用爪子扒拉你,或者…

2026/8/19 4:25:16 阅读更多 →
基于Arduino的水位监测报警器DIY:从传感器原理到智能应用

基于Arduino的水位监测报警器DIY:从传感器原理到智能应用

1. 项目概述:一个“会说话”的水碗养过宠物的人,尤其是养猫养狗的朋友,大概都经历过这样的场景:下班回家,看到毛孩子蔫蔫地趴在门口,你心疼地赶紧去给它添水,却发现水碗早就干得底朝天了。或者&…

2026/8/19 4:25:16 阅读更多 →
CUA-Suite:构建高质量计算机使用智能体数据集的核心技术与实践

CUA-Suite:构建高质量计算机使用智能体数据集的核心技术与实践

1. 项目背景与核心价值:为什么我们需要一个“计算机使用”智能体数据集?如果你关注过近两年AI领域的发展,尤其是多模态和具身智能方向,会发现一个有趣的现象:模型在理解图像、生成文本、甚至操控机械臂方面都取得了长足…

2026/8/19 4:25:16 阅读更多 →
AI Agent自动化MOF材料模拟:从核心架构到RASPA工具链实战

AI Agent自动化MOF材料模拟:从核心架构到RASPA工具链实战

1. 项目概述:当AI智能体遇上MOF材料模拟最近在材料计算和AI交叉领域,一个名为“SimMOF”的项目引起了我的注意。简单来说,它试图用AI智能体(AI Agent)来自动化完成金属-有机框架材料(MOF)的模拟…

2026/8/19 4:24:16 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →