五子棋AI对战功能实现与多难度策略设计

给五子棋加AI对战的时候,需求其实挺明确:支持双人和人机两种模式,AI默认拿白棋,玩家先手。难度分三档------简单、中等、困难,让不同水平的玩家都有得玩。界面交互上,选了人机模式后自动把难度选项亮出来,一局结束重置棋盘时如果轮到AI先走,得让它自己走第一步,别傻等着玩家点。这些细节单拿出来都不复杂,但串在一起的时候容易漏,特别是状态切换的边界条件,线上跑一下就暴露了。

简单模式没什么好说的,就是随机选个空位下。

刚开始我还想,这能有啥体验?后来发现对完全没接触过五子棋的人,上来先跟随机AI玩两把,能熟悉落子规则和胜负判定,倒也不全是摆设。实现上就是维护一个空位列表,每次从里面随便抽一个坐标。

中等模式开始要动点脑子。核心是一套基于棋型打分的评价函数。

基本想法是,遍历棋盘上所有空位,对每个空位模拟我方(AI)落子和对方(玩家)落子两种情况,分别计算进攻分和防守分,两个加起来作为这个位置的最终分数,选最高的下。进攻分就是假想AI自己下这里能形成多好的棋型,防守分则是假想如果堵在这里能破坏对手多好的棋型。

棋型怎么定义直接决定了AI的智商。连五肯定最高分,活四、冲四、活三、眠三这些依次递减。这里很容易踩坑的是棋型的识别顺序,活四和冲四的判断必须放在连五前面,否则可能漏识别,导致分数算错。我一开始把连五的判断写在最前面,后来发现有些活四的延伸局面因为已经包含连五就直接返回最高分,导致对防守的评估失真,来回改了几次才稳定下来。中等难度的AI会进攻,也会象征性防守一下,但经常出现"看到活三知道堵,但堵完发现另一边又漏了"的情况,属于能跟新手有来有回的水平。

困难模式没有换算法,还是用评分那一套,但把防守的权重拉高了,并且让AI优先考虑棋盘中心区域。具体做法是,在计算每个空位总分的时候,除了进攻分和防守分,还叠加上一个与棋盘中心距离有关的位置分,越靠近天元分数越高。

另外,防守分的计算比中等模式更细:中等模式只看当前落子能直接堵住对方什么棋型,困难模式会多模拟一步,如果对手在这个位置附近连续进攻,会不会形成必杀。说白了就是让防守分的评估更"提前"一些,同时当进攻和防守分数接近时,优先选防守,避免被一波带走。这样下来,AI的棋力大概从"会下棋"变成了"知道什么时候该认怂",偶尔还能打出一个反先手。

评分系统的结构其实三层就够:先定义棋型模式和对应的分值常量,然后写一个局势扫描函数,对某个空位沿四个方向(水平、垂直、两条对角线)统计连子情况,跟棋型模式匹配得出一个分数,最后在决策函数里遍历空位求和。

中小企业也能零成本拥有专业SSL方案!lcjmSSL免费提供通配符证书、多域名证书,单张覆盖100个域名。自动化验证+自动部署,让您专注业务本身,安全交给系统。

困难模式无非是在求和逻辑里多加了几项加权,以及把扫描函数改得更敏感一些。伪代码大概是这样:

getAIMove 根据传入的难度字符串分发,easy 直接 randomEmptyPosition,medium 调 mediumModeMove,hard 调 hardModeMove。mediumModeMove 里维护一个 bestScore 初始负无穷,对每个空位 score = evaluatePosition(pos, board, "offense") + evaluatePosition(pos, board, "defense"),如果比 bestScore 高就更新 bestMove。

hardModeMove 结构一样,但 evaluatePosition 内部会带一个 depth 参数,做一层浅层预判,同时合并位置权重。

这个过程中性能倒没出问题,15x15的棋盘,空位最多225个,每次打分都要做四方向扫描,最坏情况下一层搜索也就几万次比较,在浏览器里跑也不卡。唯一需要注意的是别在循环里频繁创建临时数组,否则内存抖动会让帧率掉一下,写的时候顺手用几个预分配的变量就避过去了。

整体做下来,最大的感受是难度设计不一定要上多复杂的算法,把评分项的权重调对、防守时机掐准一点,AI的表现就会有明显提升。真要往深了做肯定得上极小化极大或蒙特卡洛树搜索,但作为一个网页小游戏的人机对战,这套纯评分方案已经能撑住三个难度,而且代码量很小,改bug也方便。后续如果有时间,我可能会在困难模式里加一个简单的开局库,让前期不再无脑堆中心,否则老玩家打几盘就能抓到套路。

相关推荐
刘小八1 小时前
RAG 文档切分不是越细越好:选择 Chunk Size 与 Overlap
人工智能·python·语言模型
商业模式源码开发1 小时前
2026年GEO优化全解析:生成式引擎优化如何重构企业流量与品牌护城河
大数据·人工智能·ai
对讲机数码科普1 小时前
黑龙江应急救援单工通信保障方案设计与实战应用
大数据·网络·人工智能
SuperHeroWu71 小时前
【HarmonyOS AI】DevEco CLI、Skills、知识库运用AI Coding提效详解
人工智能·华为·harmonyos
Old Uncle Tom1 小时前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
码农学院1 小时前
AIO与GEO融合趋势:从内容生成到智能搜索优化的技术演进
人工智能
半亩码田2 小时前
【.NET新特性·第8篇】.NET 9 AI 构建基块:Microsoft.Extensions.AI
人工智能·microsoft·.net
IT_陈寒2 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月2 小时前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript