Skip to content

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 06:20
8cb8605

3.0.0 — 一来一往

照 docs/REVIEW-v2.1.md 做。重心是对弈:这个应用的核心是陪你下棋。

几项决定:

  • 难度选方案 A:只修两头,普通、困难不动;
  • 电脑最短 600ms 才落子;
  • 下棋时不显示计时器;
  • 落子声换录音这一项没找到能放心商用的录音,顺延。

不动的:规则、普通 / 困难的棋力、存储格式(旧存档、对局库、战绩、练习都照读)、复盘与练习的内容、v2.1 的界面与标题栏。

一句话:一来一往有节奏,落子干脆,赢有赢的样子,下完一键再来,下棋时眼里只有棋。


一来一往有节奏

  • 电脑最短 0.6 秒才落子。
    • 此前入门、普通 0.17–0.43 秒就落下:你的手还没抬起,它的子已经在了,像对面没有人。
    • 这段时间座位里的三个点照常在动。
    • 算法的时间预算一毫秒不动,棋力不变,只是算完了等一等。困难、极限本来就常常超过这个时间。
  • 电脑那一子落得让你看见:它的子用 0.26 秒轻轻放下(你的子仍是 0.12 秒即点即现),你不会再错过它下在哪。

落子干脆

  • 点下去的那一帧子就在。
    • 此前落子动画的 0.14 秒里,每一帧都把整块棋盘重画一遍:底色、网格、全部棋子的渐变与阴影,只为让新子从 0.88 倍放大到 1 倍。
    • 现在棋盘画好就缓存,动画只画那一颗子。
    • 一次落子整盘只重画一次,在动画结束时把新子并进去。
  • 实测(容器里,软件渲染):一次点击里同步做的事 16–64ms → 1–5ms,子在下一帧(约 16ms)出现。

赢有赢的样子

  • 此前连成五 19ms 后终局卡就弹出来,同时一根朱砂线穿过五颗子、五颗子各套一圈、胜负音乐响起。三样挤在同一瞬间,最该看的五颗子反被线压着。
  • 现在:
    • 整块棋盘先蒙上一层自己的底色,其余的子退后;
    • 五颗子一颗接一颗浮出来,各留一圈细环;
    • 底色退去,停一拍(约 0.9 秒),终局卡从旁边滑进来。
  • 不再画那根线。
  • 输了也是这五颗,环的颜色收敛一半,不庆祝。
  • 开了「减弱动效」时直接是最后的样子。

下完一键再来

  • 终局卡的主按钮是「再来一局」:同样的设置一键开局,执子选「轮流」时自动换色。
  • 「从第 N 手重下」「看复盘」退为卡片里的次要按钮,功能不变。
  • 顶栏「新局」照旧打开设置面板,用来换难度、换规则;一局结束后不再和「再来一局」同时高亮。
  • 下完到下一盘:2 次点击 → 1 次。

下棋时眼里只有棋

  • 计时器下棋时不显示:这不是计时对局,它一直在跳只会分走眼睛。这一局用了多久写在终局卡上(「用时 03:12 · 41 手」),也照旧记进对局列表。
  • 时间线下棋时收起:
    • 位置保留,棋盘不跳;
    • 鼠标移到棋盘下方那一行、按 ← 翻看、终局与复盘时才出现;
    • ← → Home End 照旧。
  • 下棋时看得见的就剩:两个座位、棋盘、悔棋 · 提示 · 新局 · ⋯。

对手:难度合理、说明照实

按发布时限(普 0.4s / 难 2s / 极 5s,不缩放)量了档与档的配对胜负,又写了两个模仿人的对手(新手、会下的新手)各下 60–100 盘,逐句核对每一档的说明。详见 docs/REVIEW-v2.1.md 第七节。

档 改了什么 为什么
入门 漏挡活三的概率 0.3 → 0.5 只会挡冲四的新手对它只赢 26%;说明里写「常常漏掉活三」,实测四次只漏一次。现在新手对它五五开(50 / 100),说明也成立了
普通 不动 必挡直接威胁:冲四 133 / 133、活三 66 / 66
困难 不动 对普通 +172,p = 0.0005
极限 时间用满(不再「想好就停」) v1.68 起极限想好就停,平均每手只花 1.3 秒,按发布时限对困难只剩 +44(p = 0.23),说明里的「明显强于困难」不成立。用满后 +137(p = 0.006),平均每手 2.2 秒

说明文字照实测改:

  • 普通:去掉「每手约 0.4 秒」(实测平均 0.22 秒,加上 0.6 秒的落子节奏后已无意义)。
  • 困难:「每手约 2 秒」→「每手至多约 2 秒」(实测平均 0.59 秒)。
  • 极限:「多给两倍半的时间」→「时间用满」;「难局最多算 5–8 秒」→「每手至多 5 秒」(8 秒那一档 v2.0 已退役)。
  • 执子「白」:「执白:电脑先手。自由规则下先手优势很大,执白大约难一档」。实测四档之间的对局,执黑的赢约七成。

顺手修

现象 现在
1280 × 800 下终局卡离窗口右边 6px(1440 × 900 下 12px),左边却空着近 300px 坞放在棋盘旁边、棋盘不用让位时,离窗口边至少 20px;小窗口仍把空间让给棋盘
空盘点「新局」,设置面板压在初见卡片上,卡片右边一截露在外面 面板打开时初见卡片让开
终局后输家座位整颗降透明度,「你」字对比度 3.17:1 只把棋子淡下去,字 7.86:1

闸门

test-surface S20(v3.0 一来一往)在 v2.1 上失败:

项 v2.1 上实测 v3.0
入门 / 普通电脑回应 171–429ms 611–648ms
一次落子整盘重画 10 次 1 次
连五后 0.3 秒时终局卡 已经弹出 还没有,928ms 进来
五颗子上的红线 有 无
终局卡主按钮 从第 N 手重下 再来一局(一键开局、设置不变)
下棋时计时器 / 时间线 显示 / 显示 不显示 / 收起,翻看时出现
坞离窗口右边(1280 / 1440) 6 / 12px 20 / 20px
新局面板与初见卡片 重叠 不重叠
输家座位对比度 3.17 7.86
极限说明 「难局最多算 5–8 秒」 「每手至多 5 秒」

随之改写的旧闸门(测的是旧设计本身):

闸门 处理
test-game 极档参数一致 「除了预算全部一样」→「除了预算与时间管理全部一样」
test-game 时间管理 「困难 / 极限用」→「只有困难用,极限时间用满」
test-surface S14 「新局终局后才是主按钮」→「终局后主按钮是『再来一局』」
test-loop 8 / 12、test-surface 收尾 读终局卡前多等一拍(终局卡约 0.9 秒后才进来)

其余闸门照旧全部通过:test-game / test-surface S1–S20 / test-cross / test-loop / test-daily / test-strength。

顺延

  • 落子声换真实录音:没找到能放心商用的蛤碁石落木盘录音。你有录音,或者愿意录一段(黑白各落几子,手机就行),给我就能换。

底层依赖

@native-sdk/core / @native-sdk/cli 最新是 0.11.0(2026-10-13 发布)。CI 一直用最新的 CLI 构建,所以这一版是用 0.11.0 打的包:

  • 本地用 0.11.0 编过 null 平台与 macOS(macOS 只差系统框架链接,Zig 代码类型检查全过);
  • 标题栏用到的两段宿主实现(窗口拖动、红绿灯位置)与 0.10.1 逐行相同;
  • 最终以 CI 的 macOS / Windows 构建为准。