HarmonyOS 小游戏《对战五子棋》开发第17篇 - AI的两种评估策略

发布时间:2026/9/23 21:29:37

HarmonyOS 小游戏《对战五子棋》开发第17篇 - AI的两种评估策略 单点评估 vs 全盘评估——AI如何看待棋盘设计截图如下两种评估函数的对比本项目实现了两种评估策略维度evaluatePositionevaluateLines用途普通模式、候选排序困难模式Minimax叶节点范围评估单个位置的四方向评估全盘所有线复杂度O(1)O(n)精度局部精确全局视角evaluatePosition单点评估privateevaluatePosition(board:number[][],row:number,col:number,player:number):number{constdirections:number[][][[0,1],[1,0],[1,1],[1,-1]];lettotalScore:number0;for(constdirofdirections){totalScorethis.evaluateDirection(board,row,col,dir[0],dir[1],player);}returntotalScore;}核心思路假设在(row, col)落子计算该位置在四个方向上的棋型分数之和。evaluateDirection单方向扫描privateevaluateDirection(board:number[][],row:number,col:number,dr:number,dc:number,player:number):number{letcount:number1;letleftOpen:booleanfalse;letrightOpen:booleanfalse;// 正方向统计连续同色棋子letrrowdr;letccoldc;while(r0rBOARD_SIZEc0cBOARD_SIZEboard[r][c]player){count;rdr;cdc;}// 检查正方向是否开放if(r0rBOARD_SIZEc0cBOARD_SIZEboard[r][c]EMPTY){rightOpentrue;}// 反方向统计连续同色棋子rrow-dr;ccol-dc;while(r0rBOARD_SIZEc0cBOARD_SIZEboard[r][c]player){count;r-dr;c-dc;}// 检查反方向是否开放if(r0rBOARD_SIZEc0cBOARD_SIZEboard[r][c]EMPTY){leftOpentrue;}constopenCount(leftOpen?1:0)(rightOpen?1:0);returnthis.scoreForCount(count,openCount);}评估流程以落子点为中心正方向延伸统计连续同色棋子检查端点是否开放反方向延伸同上用count和openCount查表得分evaluateLines全盘评估privateevaluateLines(board:number[][],player:number):number{lettotal:number0;constdirections:number[][][[0,1],[1,0],[1,1],[1,-1]];for(constdirofdirections){if(dir[0]0dir[1]1){// 水平每行从(0,0)开始for(letrow0;rowBOARD_SIZE;row){totalthis.evaluateLine(board,row,0,dir[0],dir[1],player);}}elseif(dir[0]1dir[1]0){// 垂直每列从(0,col)开始for(letcol0;colBOARD_SIZE;col){totalthis.evaluateLine(board,0,col,dir[0],dir[1],player);}}elseif(dir[0]1dir[1]1){// 主对角线从左边和上边出发for(letrow0;rowBOARD_SIZE;row){totalthis.evaluateLine(board,row,0,dir[0],dir[1],player);}for(letcol1;colBOARD_SIZE;col){totalthis.evaluateLine(board,0,col,dir[0],dir[1],player);}}else{// 副对角线从左边和上边出发for(letrow0;rowBOARD_SIZE;row){totalthis.evaluateLine(board,row,0,dir[0],dir[1],player);}for(letcol1;colBOARD_SIZE;col){totalthis.evaluateLine(board,0,col,dir[0],dir[1],player);}}}returntotal;}扫描线的起点不同方向的扫描起点不同水平方向(0,1)从每行的第0列开始 → 15条线 垂直方向(1,0)从第0行的每列开始 → 15条线 主对角(1,1)从左边上边出发 → 29条线 副对角(1,-1)从左边上边出发 → 29条线 总计88条扫描线evaluateLine逐线扫描privateevaluateLine(board:number[][],startRow:number,startCol:number,dr:number,dc:number,player:number):number{letscore:number0;letrowstartRow;letcolstartCol;letconsecutive:number0;while(row0rowBOARD_SIZEcol0colBOARD_SIZE){if(board[row][col]player){consecutive;}else{if(consecutive0){// 计算这段连续棋子的分数letopenEnds:number0;// 检查前方是否开放constprevRrow-dr*(consecutive1);constprevCcol-dc*(consecutive1);if(prevR0prevRBOARD_SIZEprevC0prevCBOARD_SIZEboard[prevR][prevC]EMPTY){openEnds;}// 检查后方是否开放if(board[row][col]EMPTY){openEnds;}scorethis.scoreForCount(consecutive,openEnds);consecutive0;}}rowdr;coldc;}// 处理末尾的连续段if(consecutive0){letopenEnds:number0;constprevRrow-dr*(consecutive1);constprevCcol-dc*(consecutive1);if(prevR0prevRBOARD_SIZEprevC0prevCBOARD_SIZEboard[prevR][prevC]EMPTY){openEnds;}scorethis.scoreForCount(consecutive,openEnds);}returnscore;}逐线扫描逻辑沿着方向遍历每个格子遇到同色棋子consecutive遇到不同色或空位结算之前的连续段结算时检查两端是否开放用scoreForCount查表得分evaluateBoard全盘综合评估privateevaluateBoard(board:number[][]):number{letaiScore:number0;lethumanScore:number0;aiScorethis.evaluateLines(board,this.aiColor);humanScorethis.evaluateLines(board,this.humanColor);returnaiScore-humanScore*1.1;}防守权重1.1与普通模式的攻防权重一致——AI评估时对人类的棋型稍加重视。两种评估的使用场景evaluatePosition单点普通模式评估每个候选位置的攻防价值候选排序为困难模式排序候选evaluateBoard全盘Minimax叶节点评估搜索到底时的整体局面为什么叶节点用全盘评估因为Minimax的叶节点是未来的局面需要整体评估而非单点评估——单点评估只考虑了最后一手的影响可能遗漏其他方向的威胁。总结两种评估函数代表了不同的思考方式evaluatePosition聚焦一点四方向扫描——快速但不全面evaluateLines扫描全盘逐线统计——全面但较慢普通AI用单点评估实现快速决策困难AI用全盘评估实现深度搜索。两者的配合让AI在不同难度下都有合理的评估能力。
延伸阅读

更多相关文章

2026/9/23 19:15:27

Windows命令调用的神经反射弧:Run-Command智能启动器

1. 项目概述:这不是又一个WinR替代品,而是Windows命令行调用的“神经反射弧”你有没有过这种体验:想快速打开防火墙设置,下意识按WinR,输入firewall.cpl,回车——成功;但下一秒想查系统信息&…

2026/9/22 13:11:18

软件团队管理中的领导风格适配

软件团队管理中的领导风格适配 在快速变化的软件开发领域,团队管理的成功往往取决于领导风格的适配性。不同的项目阶段、团队构成和业务目标需要灵活调整领导方式,否则可能导致效率低下或成员士气受挫。如何根据情境选择合适的领导风格,成为…

2026/9/23 9:10:31

基于51/STM32单片机智能智能消毒柜控制系统 定时 紫外线消毒成品12(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_

基于51/STM32单片机智能智能消毒柜控制系统 定时 紫外线消毒成品12(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 1.51/STM32单片机进行数据处理 5.DHT11温湿度采集 3.LCD1602液晶显示当前温湿度,模式,时间&#xf…

2026/9/23 22:50:15

BSP报表开发实战:HTML表格渲染、分页导出与打印适配

简介:BSP(Business Server Pages)报表开发实例是一份面向SAP ABAP开发者的入门级实战文档,帮助读者掌握在SAP系统中用SE80事务代码创建BSP应用、设计HTML页面并嵌入ABAP逻辑的完整流程。资源包共包含1个doc文档,大小约…

2026/9/23 22:50:15

奇诺多面体+CVXPY实现虚拟电厂广域协同调控

简介:本资源聚焦虚拟电厂中空调负荷、储能设备与柴油发电机三类分布式资源的广域聚合调控问题,面向具备优化理论基础与Python编程能力的电力系统研究人员、分布式能源开发工程师及高年级研究生,提供从可行域建模到集群协同优化的完整技术路径…

2026/9/23 22:45:14

医学影像超分辨率重建:EDSR在CT/MRI病灶识别中的临床落地实践

简介:本资源是一份高质量的人工智能毕业设计项目,聚焦深度学习驱动的图像超分辨率重建技术,并拓展至医学影像增强这一典型应用场景,面向计算机、人工智能、自动化及医学信息工程等专业的本科生与初阶研究者,助力课程设…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码