bricks/docs/cn/gobang.md
2025-10-12 17:59:59 +08:00

7.1 KiB
Raw Blame History

bricks.Gobang 技术文档

五子棋游戏组件 —— 基于 bricks.js 框架实现的可交互五子棋界面控件。


目录


概述

bricks.Gobang 是一个基于 bricks.js UI 框架开发的五子棋Gomoku游戏界面组件。它包含两个核心类

  • bricks.GobangPoint:表示棋盘上的单个格子,用于显示空、黑子或白子状态,并支持鼠标悬停反馈。
  • bricks.Gobang:主控件,负责构建 15×15 的棋盘布局、管理棋子状态、响应尺寸变化并为后续 AI/玩家逻辑提供接口。

该组件具备良好的可扩展性,可用于人机对战、双人对战或多智能体博弈系统。


类结构

bricks.GobangPoint

继承自 bricks.Image,代表棋盘上一个可交互的点位。

属性说明

属性名 类型 描述
p_status Number 棋子状态:0=空, 1=黑子, 2=白子
p_x Number 横向坐标(列),取值范围 115
p_y Number 纵向坐标(行),取值范围 115

注:坐标系以左上角为 (1,1),右下角为 (15,15)

构造函数

new bricks.GobangPoint({
  p_status: 0,
  p_x: x,
  p_y: y,
  tip: '(x,y)'
})
参数
参数 类型 必填 说明
p_status Number 初始状态
p_x Number X 坐标
p_y Number Y 坐标
tip String 鼠标提示文本,默认为 (x,y)

方法

.calc_url()

根据当前 p_status, p_x, p_y 计算对应的图片路径。

  • 边缘位置使用特定前缀:

    • 上边:t
    • 下边:b
    • 左边:l
    • 右边:r
    • 中间区域:c
  • 状态后缀:

    • empty: 空格
    • black: 黑子
    • white: 白子

输出格式:

imgs/[one][two]_[state].png

例如:imgs/tl_empty.png, imgs/cc_black.png

使用 bricks_resource(name) 获取实际资源 URL。

.set_current_position(flg, event)

处理鼠标进入/离开事件,设置 CSS 类控制视觉高亮。

  • flg === true → 移除 curpos 样式类(显示高亮)
  • flg === false → 添加 curpos 类(取消高亮)

实际行为依赖于样式表中 .curpos 的定义。

.getValue()

返回当前点的状态对象。

{
  status: this.p_status,
  x: this.p_x,
  y: this.p_y
}
.str()

调试用字符串输出,格式为 (status,x,y)


bricks.Gobang

主游戏容器,继承自 bricks.VBox,自动创建 15×15 棋盘。

构造函数

new bricks.Gobang(opts)

初始化棋盘,渲染空白格子,并开始第一轮回合(默认黑方先行)。

内部属性

属性 类型 说明
filler Filler 占位容器,用于监听尺寸变化
area Array[Array[GobangPoint]] 二维数组,存储所有 GobangPoint 实例
player Object (预留)玩家配置信息
玩家配置结构(未来扩展)
{
  black_player: {
    name: "Player1",
    type: "user", // 或 "llm"
    url: "",      // AI 接口地址
    delay: 1,     // 响应延迟(秒)
    params: {}    // 自定义参数
  },
  white_player: { ... }
}

方法

.render_empty_area()

创建 15×15 的棋盘网格:

  • 创建外层垂直盒子 (VBox)
  • 每行新建一个水平盒子 (HBox)
  • 在每个格子中添加 GobangPoint(p_status=0)
  • 将其组织成二维数组 this.area[i][j],其中 i = p_y - 1, j = p_x - 1

最终将整个棋盘加入 this.filler 容器。

.resize_area()

响应容器大小变化,动态调整每个棋盘点的宽高,保持正方形且填满可用空间。

  • 计算最小边长:Math.min(clientWidth, clientHeight)
  • 单元格尺寸:size = min_side / 15
  • 遍历 this.area 设置每个 GobangPoint 的样式宽高

绑定在 fillerelement_resize 事件上。

.inform_go(party)

通知某一方落子(如 'black''white')。此方法目前为空,作为钩子供子类或外部逻辑重写。

典型用途:

  • 触发 AI 思考
  • 更新 UI 提示
  • 发送网络请求

事件绑定

元素 事件 回调 说明
GobangPoint mouseover set_current_position(true) 显示悬停效果
GobangPoint mouseout set_current_position(false) 隐藏悬停效果
filler element_resize resize_area() 自动适配棋盘尺寸

图像资源管理

通过 bricks_resource(name) 函数加载图像资源。建议准备以下命名规则的 PNG 图片:

imgs/
├── tl_empty.png    ── 左上角空格
├── tc_empty.png    ── 上边缘中间空格
├── tr_empty.png    ── 右上角空格
├── cl_empty.png    ── 左边缘中间空格
├── cc_empty.png    ── 中央空格
├── cr_empty.png    ── 右边缘中间空格
├── bl_empty.png    ── 左下角空格
├── bc_empty.png    ── 下边缘中间空格
├── br_empty.png    ── 右下角空格
│
├── **_black.png     ── 所有位置的黑子版本
└── **_white.png     ── 所有位置的白子版本

共需 9 种位置 × 3 种状态 = 27 张图(若四角合并可减少)。


布局与自适应

  • 使用 bricks.Filler 包裹棋盘以监听 DOM 尺寸变化。
  • resize_area() 方法确保棋盘始终居中并等比缩放。
  • 所有点位统一设为正方形,避免拉伸失真。
  • 支持响应式设计,在不同屏幕尺寸下正常显示。

使用示例

// 创建五子棋组件并插入页面
var gobang = new bricks.Gobang({});
document.body.appendChild(gobang.dom_element);

// (可选)手动更改某个点状态
var point = gobang.area[7][7]; // 中心点
point.p_status = 1;
point.set_url(point.calc_url()); // 重新计算图像

若需集成 AI 对战,请扩展 inform_go 方法以调用远程服务或本地模型。


注册与框架集成

bricks.Factory.register('Gobang', bricks.Gobang);

允许通过工厂模式动态创建实例:

var game = bricks.Factory.create('Gobang', {});

待完善功能TODO

  • 棋盘渲染与自适应
  • 棋子状态切换
  • 落子逻辑检测(是否已占用)
  • 胜负判断(五连珠算法)
  • 回合控制与玩家切换
  • AI 对手集成LLM 或规则引擎)
  • 悔棋、重新开始等功能按钮

版权与许可

© 2025 bricks.js 项目组
本模块遵循 MIT 许可协议,欢迎自由使用与修改。