“我爱围棋”是一款基于 Web 的围棋人机对战应用,采用纯前端技术实现(HTML + CSS + JavaScript)。它提供了完整的围棋规则实现(提子、打劫、9/13/19 路棋盘)以及强力 AI 对手。AI 使用启发式评分 + 深度限制的前瞻搜索(Minimax 简化版),具备打吃优先、连贯追击、边缘扣气、防止自填等智能行为。此外,平台还集成了“数目”功能,可实时显示双方目数并让 AI 决定是否同意数目。
![图片[1]-我爱围棋html在线围棋源码-小卒博客](http://www.zubaoya.com/wp-content/uploads/2026/06/frc-f21bbdade5534a84b371cee4e6184b27.jpeg)
![图片[2]-我爱围棋html在线围棋源码-小卒博客](http://www.zubaoya.com/wp-content/uploads/2026/06/frc-cb173b7d4edd07a2e2e6a7083549efe2.jpeg)
![图片[3]-我爱围棋html在线围棋源码-小卒博客](http://www.zubaoya.com/wp-content/uploads/2026/06/frc-16d24770e6e5f61c8efb18d9a6933883.jpeg)
2. 技术栈
前端框架:无(原生 JavaScript)
样式:CSS3(Flex / Grid / 媒体查询)
图标库:Font Awesome 6(CDN 引入)
绘图:Canvas 2D(棋盘绘制、棋子渲染)
输入适配:鼠标 / 触摸事件 / 键盘快捷键
打包部署:单 HTML 文件,无需构建工具
3. 项目架构
项目采用单页面应用(SPA)模式,所有 UI 和逻辑都在一个 HTML 文件中。代码组织分为以下几大块:
HTML:模式选择遮罩、主容器(棋盘、信息面板)、弹窗
JavaScript:常量与配置、游戏状态管理、围棋规则函数、AI 引擎、数目系统、界面绘制、交互事件、辅助函数
4. 功能模块
4.1 棋盘与规则
棋盘尺寸:支持 9×9、13×13、19×19(通过模式选择遮罩切换)
落子规则:黑先白后,禁止在已有棋子的位置落子
提子:自动检测并移除无气的棋子
打劫:禁止立即回提(仅一个子时检测)
终局:通过“认输”按钮结束对局,也可用 AI 判定功能判断胜负
4.2 AI 对手
AI 执白(可切换为双人对弈模式),其决策过程如下:
1. 基础评分:对每个候选位置调用 rawScore,计算包括提子、打吃、连接、救援、眼位、星位、边缘扣气等得分。
2. 候选筛选:按基础评分降序,取前 10~25 个候选点(取决于难度)。
3. 深度搜索(第 7 手后启用):
中等难度:3 层前瞻,每层分支数递减(20→12→8→6)
困难难度:5 层前瞻,同上
简单难度:不使用前瞻
4. 搜索算法:简化 Minimax,当前层最大化自身得分,下一层最小化(即对方最佳应手的影响)
4.3 评分函数(rawScore)主要项
提子:+100/每子
打吃(敌方气=1):+100/每个敌人
双重打吃:+180
2→1 气奖励:+50/每个敌人
3→2 气威胁:+10/每个敌人
救援己方(气=1):+90;气=2:+50
连接己方:+15/相邻己方
威胁对方:+8/相邻敌方
集体作战(≥3 己方棋子):+15;极密集(≥5):再 +10
眼位潜力(相邻空点):+3/个
星位(前15手):+15;小目:+10
中央区域:+4;边缘:10
新子气数=1:70;气数=2:40
自填领地(≥3己方且气≤2):60
4.4 边缘扣气(AdjLib)
AI 评估时使用 adjLib 函数替代真实气数 realLib。如果棋子位于棋盘边缘(行=0 或 N1,或列=0 或 N1),且真实气数>0,则扣 1 气。使 AI 更积极处理边角棋子。
4.5 数目系统
基于区域填充算法计算空点归属。最终目数 = 棋子数 + 围空数(中国规则简化)。“目数”按钮仅显示目数;“AI 判定”按钮显示目数并让 AI 根据自身是否领先决定同意或拒绝数目。
4.6 界面与交互
确认落子:二次点击确认,防误触
暂停/继续:暂停时 AI 不响应,玩家也无法落子
认输/重开:弹出确认对话框
键盘快捷键:
P – 暂停/继续;R – 重新开始;M – 切换模式;A – 切换双人/人机
C – 确认落子开关;T – 查看目数;J – AI 判定;ESC – 关闭弹窗
移动端适配:棋盘自适应,触屏优化,横屏左右布局
5. 配置与扩展
难度配置:下拉菜单选择简单/中等/困难
棋盘尺寸:通过模式选择按钮调用 setSize(n)
添加新规则或评分项:修改 rawScore 函数,增加权重
替换 AI 引擎:替换 aiMove 函数,返回 {r, c} 格式落子位置
6. 二次修改提示(详细)
如果您打算对代码进行二次开发或深度定制,请务必注意以下细节:
6.1 修改 AI 评分权重
所有评分项都在 rawScore 函数中,直接修改数值即可。例如将提子奖励从 100 改为 120 会让 AI 更激进地提子。
注意:修改后需要重新测试,确保不会出现异常行为(如过度自填或忽视防守)。
6.2 调整搜索深度与分支数
搜索深度由 aiMove 中的 depth 变量控制(当前根据难度和 moveCnt 决定)。
每层候选点数量在 deepAssess 中通过 limit 确定。可以增大 limit 换取更精准的搜索,但会降低速度(尤其 19 路棋盘)。
建议:如果电脑性能较好,可将 limit 最大值从 20 提高到 30 或 40;手机端保持较低值。
6.3 添加新的评分特征
在 rawScore 中添加新的加分或扣分项。例如增加“连环劫”检测、“厚势”奖励等。
新特征必须基于当前棋盘状态(brd)和候选落子点 (r,c),不能使用未来信息。
注意:如果新特征需要计算量较大,最好只在候选点筛选完成后对 topN 个点执行,以免拖慢 AI 响应。
6.4 修改围棋规则
真实气数使用 realLib 函数,adjLib 是 AI 评估用的调整气数。如果希望改变提子条件(例如废除打劫),需修改 capture 函数中的劫检测逻辑。
严禁修改 realLib 或 group 函数,它们是围棋规则的基础。
6.5 界面与交互定制
棋盘样式、颜色在 CSS 中修改;棋子绘制在 drawStonePos 函数中。
按钮文字、图标可以直接修改 HTML 中的内容。
如果想增加新的快捷键,在 document.addEventListener(‘keydown’) 中添加分支即可。
6.6 性能优化建议
困难模式 + 19 路棋盘时,AI 思考时间可能较长。可采取以下优化:
降低候选点总数(maxCand 从 25 减小到 15)。
减少每层候选数(limit 从 20 减小到 10)。
在 deepAssess 中只对前 5 个候选进行深度搜索,其余直接使用 rawScore。
对于 9 路或 13 路棋盘,可适当增加深度(例如中等改为 4 层,困难改为 6 层)。
6.7 联机对战建议
本项目当前为单机人机对战,若要实现联机对战,建议采用以下方案:
a) WebSocket + Node.js 服务器:前后端通过 WebSocket 通信,服务器负责转发双方落子指令及时间控制。棋盘逻辑可放在服务端校验,或全放在客户端但互信。
b) 使用现成游戏框架(如 PeerJS、Socket.io)快速搭建点对点或房间制对战。
c) 保持现有界面,增加“创建房间”和“加入房间”功能,棋盘复用,但需处理 AI 禁用逻辑(联机时双方均为人类)。
d) 时间规则:增加计时器倒计时,使用 setTimeout/setInterval 实现读秒。
e) 对战状态同步:每次落子后,将完整棋谱(SGF 格式或自定义 JSON)同步给对方,确保双方棋盘一致。
注意:联机后需去除 AI 自动落子逻辑,并增加“结束对局”按钮供双方协商认输。
6.8 测试策略
每次修改后,至少进行以下测试:
在不同棋盘尺寸下各下 10 步,观察 AI 是否出现非法落子(如填眼、自杀)。
故意制造打吃、提子场景,验证规则正确性。
使用“数目”按钮检查目数计算是否准确。
在移动设备和桌面端分别测试触屏和鼠标交互。
6.9 版本管理
建议在修改前备份原文件,或使用 Git 进行版本控制。
每次修改后记录改动内容和效果,便于回滚。
7. 开发指南
本地运行:直接打开 HTML 文件,无服务器要求
调试建议:查看 console.log,使用 drawBoard() 重绘
测试要点:提子/打劫正确性、AI 数目判断、移动端触摸流畅性
8,
20260518 v1.7 增加详细二次修改提示,完善开发指引,项目更名为“我爱围棋”,添加版权声明
版权说明:
本文档及对应软件受著作权法保护,仅用于学习和研究目的。
允许个人自由使用、修改和分享,但不得用于商业用途未经授权。
任何分发必须保留完整的版权声明和本开发文档。
作者不对因使用本软件造成的任何损失承担责任。
我爱围棋丨下载地址:



暂无评论内容