C++控制台拱猪游戏开发:面向对象设计与游戏逻辑实战
1. 项目概述为什么选择用C在控制台写拱猪游戏如果你正在学习C或者想找一个能综合运用C核心知识点的实战项目那么用控制台写一个“拱猪”游戏绝对是一个被低估的宝藏选择。很多人一听到“控制台”就觉得界面简陋、没意思但恰恰相反这个项目能让你抛开图形库的复杂性专注于游戏逻辑、数据结构、算法和面向对象设计的核心。拱猪游戏本身规则丰富涉及到牌型比较、分数计算、玩家策略哪怕是简单的AI和回合制流程几乎涵盖了小型游戏项目所需的所有要素。我当初选择这个项目就是为了巩固C的类与对象、STL容器特别是vector、map、文件操作以及控制台I/O处理。你会发现在黑白命令行窗口里如何清晰地展示牌面、提示信息、得分情况本身就是对程序结构清晰度的一种考验。这个项目不依赖任何第三方图形库只需要一个支持C11及以上标准的编译器如GCC、Clang或MSVC和一个文本编辑器VS Code、CLion等都可以环境搭建零门槛能让你立刻进入编码心流状态。2. 核心游戏规则与程序建模设计2.1 拱猪游戏规则精要拱猪不是简单的出牌比大小。它使用一副去掉大小王的52张扑克牌通常四人游戏。牌的点数并非唯一标准特定牌张具有特殊的“猪”、“羊”、“变压器”等身份并带有正负分数。核心流程是每轮玩家按顺序出一张牌首出牌的花色决定本轮“主花色”其他玩家必须跟出同花色的牌除非没有该花色一轮中打出与主花色相同且点数最大的玩家赢得这一墩并获得本轮所有牌中的分数牌所对应的分数。游戏进行多轮直到所有牌出完最终根据玩家获得的总分数可能为负进行胜负判定。关键的特殊牌及其分数常见规则黑桃Q“猪” 负100分。大家都想避免得到它。方块J“羊” 正100分。争取拿到。草花10“变压器” 倍数牌。得到它的玩家其本轮总得分正负皆可将乘以2。如果同时得到“猪”和“变压器”那“猪”的-100分也会被乘2变成-200分。所有红桃牌 每张都有分数通常是红桃A-50分、K-40分、Q-30分、J-20分以及10到2的负分数如-10到-1分。红桃牌俗称“分牌”也是玩家需要规避或算计的。2.2 面向对象的类结构设计如何用C的类来映射这些规则一个好的设计是项目成功的一半。Card单张牌类属性 花色Suitenum class枚举包括SPADE,HEART,CLUB,DIAMOND、点数Rankenum classACE,KING,QUEEN,JACK,TEN, ...TWO。方法 构造函数、获取花色和点数的方法、判断是否为特殊牌isPig(),isSheep(),isTransformer()、获取该牌基础分数getBaseScore()的方法。设计要点 使用enum class而非普通enum或整数能获得更强的类型安全避免花色和点数误用。getBaseScore()方法内部用一个switch或查找表map来实现将游戏规则固化在代码中。// 示例Card类的核心部分 enum class Suit { SPADE, HEART, CLUB, DIAMOND }; enum class Rank { ACE, KING, QUEEN, JACK, TEN, NINE, EIGHT, SEVEN, SIX, FIVE, FOUR, THREE, TWO }; class Card { public: Card(Suit s, Rank r) : suit(s), rank(r) {} Suit getSuit() const { return suit; } Rank getRank() const { return rank; } bool isPig() const { return suit Suit::SPADE rank Rank::QUEEN; } int getBaseScore() const { if (isPig()) return -100; if (suit Suit::DIAMOND rank Rank::JACK) return 100; // 羊 if (suit Suit::CLUB rank Rank::TEN) return 0; // 变压器分数为0但需要标记 if (suit Suit::HEART) { // 红桃分数映射 static std::mapRank, int heartScores { {Rank::ACE, -50}, {Rank::KING, -40}, /* ... */ }; auto it heartScores.find(rank); return (it ! heartScores.end()) ? it-second : 0; } return 0; // 普通牌无基础分 } private: Suit suit; Rank rank; };Deck牌堆类属性 一个std::vectorCard容器存放52张牌。方法 初始化牌堆initialize()生成52张牌、洗牌shuffle()使用random库、发牌deal(int numCards)返回指定数量的牌并从牌堆移除。设计要点 洗牌算法推荐使用C11的std::shuffle配合高质量的随机数引擎如std::mt19937这比传统的rand()% N方式更均匀、更现代。Player玩家类属性 玩家ID或名称、手牌std::vectorCard、当前回合得分、总得分、是否是人类玩家用于区分AI。方法 添加手牌addCard()、移除手牌出牌playCard()、选择要出的牌chooseCardToPlay()这里是AI逻辑或玩家输入接口、计算手牌中某花色的数量等辅助方法。设计要点playCard方法需要验证出的牌是否合法是否符合跟牌规则。对于AI玩家chooseCardToPlay是实现游戏策略的核心初期可以做一个简单的随机出牌或出最小牌的AI。Game游戏主控类属性 一个Deck实例、四个Player实例可以用std::arrayPlayer, 4或vector、当前回合的主花色、上一墩的赢家决定下一轮谁先出牌、记录每墩牌的出牌情况等。方法 游戏初始化setup()、进行一轮playRound()、计算一墩的赢家和分数calculateTrick()、更新玩家分数、判断游戏结束、渲染游戏状态到控制台render()等。设计要点 这个类是游戏的大脑协调所有其他对象。playRound方法是主循环它调用每个玩家的chooseCardToPlay收集出牌然后调用calculateTrick。2.3 数据结构与算法选择手牌管理 使用std::vectorCard存储玩家手牌是直观的选择。查找、删除出牌操作是O(n)复杂度对于最多13张牌的手牌规模完全可接受。如果需要频繁按花色查找可以在Player类内部维护一个按花色分组的mapSuit, vectorCard作为缓存或索引但这会增加状态同步的复杂性初期用vector遍历即可。牌堆洗牌 如前所述使用std::shuffle。牌力比较 在calculateTrick中需要比较同一花色牌的大小。可以为Rank枚举赋值如ACE14, KING13, ... TWO2或者写一个比较函数bool compareRank(Rank a, Rank b)。注意拱猪中A最大2最小。游戏状态保存 如果想实现“保存/加载”功能就需要为每个关键类Card,Player,Game实现序列化serialization和反序列化deserialization方法将状态写入文件或从文件读取。这涉及到文件流fstream的操作是一个很好的进阶练习。3. 控制台交互与游戏逻辑实现详解3.1 控制台界面渲染策略在没有图形界面的情况下清晰的信息展示至关重要。我们的策略是分区域刷新。游戏主区域 显示当前桌面情况。例如可以显示上一轮每位玩家出的牌或者当前轮已出的牌。可以用一个固定宽度的区域用-、|等字符画出简单的表格边框。玩家手牌区域 这是人类玩家交互的核心。将手牌以列表形式编号显示例如[1] 黑桃Q [2] 红桃A [3] 草花10 ...。每次出牌或回合结束后需要重新渲染这个区域。信息提示区域 显示当前状态如“现在是玩家1的回合”、“主花色是红桃”、“请选择一张牌输入编号”、“玩家2赢得了这一墩获得-50分”。得分板区域 持续显示四位玩家的当前得分和总得分。实现上在Windows下可以使用系统命令system(“cls”)清屏在Linux/macOS下使用system(“clear”)。然后在每一轮玩家操作后重新绘制整个界面。为了避免频繁清屏导致的闪烁可以考虑只重绘变化的部分但这在控制台实现较复杂对于回合制游戏全屏刷新是可以接受的。注意 直接使用system调用有安全性和性能的微小顾虑但对于学习项目完全没问题。更“学院派”的做法是使用平台特定的API如Windows的SetConsoleCursorPosition进行光标定位输出但这会大大增加代码复杂度。我们优先保证逻辑正确和可读性。3.2 核心游戏循环实现Game::run()方法是游戏的主引擎其伪代码逻辑如下void Game::run() { setup(); // 初始化牌堆、洗牌、发牌 render(); // 绘制初始界面 while (!isGameOver()) { // 游戏未结束牌未出完 Player leadingPlayer determineFirstPlayer(); // 决定本轮先出牌者首轮随机之后为上墩赢家 Suit leadingSuit Suit::SPADE; // 初始化为一个值实际由首张出牌决定 std::vectorCard currentTrick; // 本轮出的牌 std::vectorPlayer* playersInOrder getPlayOrder(leadingPlayer); // 获取出牌顺序 for (Player* p : playersInOrder) { render(); // 刷新界面显示当前状态和提示 Card playedCard p-chooseCardToPlay(leadingSuit, currentTrick); // 玩家或AI选牌 // 验证出牌合法性对于人类玩家输入验证尤为重要 if (!isPlayValid(*p, playedCard, leadingSuit, currentTrick)) { // 处理非法出牌例如提示重新输入 continue; } p-removeCardFromHand(playedCard); currentTrick.push_back(playedCard); if (currentTrick.size() 1) { leadingSuit playedCard.getSuit(); // 第一张牌决定主花色 } // 更新界面显示打出的牌 } // 一轮出牌结束计算赢家和分数 Player trickWinner calculateTrickWinner(currentTrick, leadingSuit); int trickScore calculateTrickScore(currentTrick); // 处理变压器翻倍逻辑 if (trickContainsTransformer(currentTrick)) { trickScore * 2; } trickWinner.updateScore(trickScore); // 更新下一轮的先出牌玩家 setNextFirstPlayer(trickWinner); // 渲染本轮结果 renderResult(trickWinner, trickScore); } // 游戏结束显示最终成绩 renderFinalScores(); }3.3 玩家输入与AI策略雏形人类玩家输入 在HumanPlayer::chooseCardToPlay中你需要读取控制台输入cin并将其转换为手牌索引。必须加入输入验证检查输入是否为数字、是否在有效范围内、选择的牌是否符合跟牌规则如果当前轮已有牌且手中有同花色牌则必须出同花色牌。Card HumanPlayer::chooseCardToPlay(Suit leadingSuit, const std::vectorCard currentTrick) { renderHand(); // 显示手牌和编号 int choice -1; bool isValid false; while (!isValid) { std::cout 请选择要出的牌输入编号: ; if (!(std::cin choice)) { // 输入非数字 std::cin.clear(); // 清除错误状态 std::cin.ignore(std::numeric_limitsstd::streamsize::max(), \n); // 忽略错误输入行 std::cout 输入无效请输入数字编号。\n; continue; } // 检查编号范围 if (choice 1 || choice hand.size()) { std::cout 编号超出范围请重新选择。\n; continue; } Card selectedCard hand[choice - 1]; // 检查出牌规则合法性核心 if (!isCardPlayValid(selectedCard, leadingSuit, currentTrick, hand)) { std::cout 出牌不符合规则必须跟出首出花色除非没有该花色。\n; continue; } isValid true; } Card toPlay hand[choice - 1]; hand.erase(hand.begin() (choice - 1)); // 从手牌移除 return toPlay; }简单AI策略 对于AIPlayer::chooseCardToPlay初期可以这样实现如果currentTrick为空我是首出随机选择一张牌或者选择一个策略如出小分牌红桃。如果currentTrick不为空则检查手牌中是否有leadingSuit主花色的牌。如果有从该花色的牌中选择一张可以是最小的避免赢墩或者如果这墩分数牌多尝试用最大的去抢。如果没有则“垫牌”。垫牌时可以策略性地扔掉负分牌如“猪”或大红桃或者无关紧要的普通牌。4. 项目构建、调试与进阶优化4.1 开发环境搭建与项目配置我强烈建议使用CMake来管理你的项目即使它只有一个main.cpp。这能让你更好地理解现代C项目的组织方式并且方便跨平台Windows/Linux/macOS。一个最简单的CMakeLists.txt文件如下cmake_minimum_required(VERSION 3.10) project(ConGong CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(con_gong_game src/main.cpp src/Card.cpp src/Card.h src/Deck.cpp src/Deck.h src/Player.cpp src/Player.h src/Game.cpp src/Game.h ) # 如果你在Windows上使用MinGW或Visual Studio通常不需要额外链接库。 # 如果在Linux/macOS可能需要链接pthread如果你的代码用了thread但本项目通常不需要。 # target_link_libraries(con_gong_game pthread)将你的.h和.cpp文件分开放置在src目录下。在项目根目录执行mkdir build cd build cmake .. make -j4就可以生成可执行文件con_gong_game。对于编辑器Visual Studio Code配合C/C扩展和CMake Tools扩展是非常好的选择。它能提供代码补全、跳转、构建和调试的一体化体验。记得在VSCode的settings.json中配置好编译器路径。4.2 调试技巧与常见问题排查在控制台项目开发中你肯定会遇到各种bug。以下是一些常见问题及排查思路程序崩溃Segmentation Fault最常见原因 访问了空指针或野指针或者vector下标越界。排查 使用调试器GDB, LLDB, 或VS的调试器运行程序在崩溃时查看调用堆栈backtrace。重点关注最近操作的指针或容器索引。在访问vector元素前务必检查index vec.size()。示例 在Player::playCard中如果玩家手牌为空但代码仍尝试访问hand[0]就会崩溃。增加断言或条件判断。游戏逻辑错误如分数计算不对、赢家判断错误排查 这是最考验耐心的。采用“单元测试”思想隔离测试小函数。例如单独写一个测试函数来验证calculateTrickWinner给定一组牌和主花色看它返回的赢家是否正确。添加日志 在关键函数入口和出口添加std::cout输出打印关键变量的值。例如在calculateTrickScore中打印每一张被计算的牌及其分数。简化场景 用最小的牌局比如只剩几张牌来复现问题更容易定位。控制台显示乱码问题 在Windows中文环境下控制台可能无法正常显示中文或特殊边框字符。解决方案一 避免使用中文和复杂ASCII艺术全部使用英文提示和简单字符,-,|。方案二Windows特定 在main函数开头设置控制台代码页为UTF-8或GBK。#ifdef _WIN32 #include windows.h int main() { SetConsoleOutputCP(CP_UTF8); // 或 SetConsoleOutputCP(936) 对应GBK // ... 你的游戏代码 } #endif输入流混乱 混合使用std::cin 和std::getline时常因残留的换行符导致getline直接读取空行。解决 在std::cin 后如果后面要跟std::getline记得用std::cin.ignore()清空输入缓冲区。std::cin choice; std::cin.ignore(std::numeric_limitsstd::streamsize::max(), \n); // 忽略剩下的字符包括换行4.3 项目进阶优化方向当基础版本运行稳定后你可以尝试以下方向进行深化这会让你的项目简历更加出彩更智能的AI 实现一个基于规则的AI甚至尝试简单的搜索算法如蒙特卡洛树搜索的简化版。AI可以考虑记住哪些大牌如A、K已经打出推断其他玩家可能持有的牌从而做出更优决策。网络对战 这是巨大的飞跃。你需要学习网络编程如Socket编程。将Game类改为服务器每个Player是一个客户端连接。游戏逻辑在服务器运行客户端只负责接收状态和发送出牌指令。你可以使用Boost.Asio或原生Socket API。引入图形界面 如果你对控制台审美疲劳了可以尝试用轻量级的图形库如SFML或SDL2来重写渲染部分。游戏的核心逻辑Card,Deck,Player,Game几乎可以复用你只需要把render()函数里的cout换成图形库的绘制调用。这是学习游戏引擎架构的绝佳入门。实现回放与观战系统 在Game类中不仅记录分数还完整记录每一轮每个玩家的出牌序列。游戏结束后可以将这个序列保存到文件。然后你可以写一个独立的“回放”程序读取这个文件像播放电影一样一步步重现牌局。这涉及到命令模式或状态序列化的知识。代码重构与设计模式 审视你的代码。Player::chooseCardToPlay这个函数是不是太长了是否可以将AI策略抽离成一个独立的AIStrategy类并通过策略模式注入到AIPlayer中这样你可以轻松切换“简单AI”、“激进AI”、“保守AI”。观察者模式可以用于解耦游戏状态更新和界面渲染让你的代码更清晰、更易维护。这个项目就像一块璞玉从最基本的规则实现到复杂的AI和网络功能深度和广度都可以由你掌控。每解决一个难题你对C的理解、对软件设计的感悟都会更深一层。我最开始写的时候连洗牌都写不好vector的erase操作也常导致迭代器失效。但正是这些磕磕绊绊让我对容器的理解不再是书本上的死知识。动手去写去调试去重构这才是学习编程最扎实的路。

相关新闻

JWT单点登录在分布式系统中的实践与优化

JWT单点登录在分布式系统中的实践与优化

1. 为什么分布式系统需要JWT单点登录方案现代企业级应用早已告别单机时代,一个典型的中大型系统往往由数十个甚至上百个微服务组成。想象一下,当用户访问电商平台时,登录后需要无缝跳转到订单服务、支付服务、推荐服务等不同子系统。如果每个…

2026/8/4 2:01:27 阅读更多 →
3步彻底修复Windows更新:Reset Windows Update Tool实用指南

3步彻底修复Windows更新:Reset Windows Update Tool实用指南

3步彻底修复Windows更新:Reset Windows Update Tool实用指南 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool Windo…

2026/8/4 2:00:27 阅读更多 →
频谱红化检测优化实战

频谱红化检测优化实战

频谱红化检测(SRI)的性能瓶颈主要集中在计算复杂度、内存占用、实时性和算法精度四个方面,以下是具体瓶颈及优化方案: 瓶颈类别具体表现优化方案计算复杂度Welch功率谱密度(PSD)计算复杂度高,F…

2026/8/4 2:00:27 阅读更多 →

最新新闻

SpringBoot3+Vue3后台管理系统开发实战

SpringBoot3+Vue3后台管理系统开发实战

1. 为什么说SpringBoot3Vue3是后台管理系统的新标杆?2023年,我在重构公司内部管理系统时,完整经历了从SpringBoot2Vue2到SpringBoot3Vue3的技术栈升级。实测下来,这套组合的开发效率比旧版本提升了40%,运行时性能优化了…

2026/8/4 6:33:38 阅读更多 →
C语言基础:函数(二)

C语言基础:函数(二)

5,变量的存储类型存储类型 数据类型 变量名; ​ 1. auto int a; 用的相对少 2. register int b; 用的相对少 3.extern int c; 4.static int d;auto , 自动存储类型 。 局部变量。 这个关键字 ,可以省略 。定义变量时,内存空间…

2026/8/4 6:33:38 阅读更多 →
R语言实战:热浪指数HWMId计算与气象数据分析

R语言实战:热浪指数HWMId计算与气象数据分析

1. 项目概述与核心价值最近在分析气象数据时,经常被问到如何量化极端高温事件。一个简单的“最高气温”往往不足以描述热浪的持续性和强度,这时候就需要引入更专业的指标,比如热浪指数。今天要聊的,就是其中一个在学术界和业务部门…

2026/8/4 6:33:38 阅读更多 →
炼油厂设备价格表及投资参考

炼油厂设备价格表及投资参考

投资炼油工厂购买炼油设备价格表,是投资者启动项目前最核心的决策依据。河南三丰环保设备有限公司提供的数据显示,一套完整的环保热解炼油设备价格通常在30万元至200万元人民币之间,具体取决于日处理量(从5吨到30吨不等&#xff0…

2026/8/4 6:32:37 阅读更多 →
净水器租赁模式实测对比与避坑指南

净水器租赁模式实测对比与避坑指南

1. 为什么选择净水器租赁模式?最近三年我陆续体验过四家不同品牌的净水器租赁服务,从最初图省事选择年付套餐,到后来学会对比滤芯成本,算是摸清了行业门道。租赁模式最大的优势在于前期投入低——普通RO反渗透净水器售价普遍在200…

2026/8/4 6:32:37 阅读更多 →
从Docker到Kubernetes Operator:OpenClaw部署架构演进与实战指南

从Docker到Kubernetes Operator:OpenClaw部署架构演进与实战指南

1. 项目概述:从单机到集群的部署演进之路最近在社区里看到不少朋友在折腾 OpenClaw 的部署,从 Docker 到 Kubernetes,踩坑的不少。我自己也完整走了一遍这条路,从最开始在单台开发机上用 Docker Compose 快速拉起服务,…

2026/8/4 6:32:37 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/3 5:19:38 阅读更多 →
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/3 8:27:36 阅读更多 →