标签页现在会告诉你该你走了
你移开视线片刻,牌局就静悄悄地等着你。现在浏览器标签页会说轮到谁了,轮到你的那一刻会响一声提示音,而倒计时圆环终于在所有模式下都从满开始,不再一上来就已经走掉五分之一。

通俗版
opolyx 的一局有回合计时,把注意力挪开一分钟,就足以让这个计时器吃掉你一个回合。在此之前没有任何东西会来找你:棋盘就摆在那里,钟在走,而知道该你走了的唯一办法,就是那一刻正好在看棋盘。对一块人们自然会离开的屏幕来说,这是一笔糟糕的交易——机器人在走棋的时候,对手在思考的时候,另一个标签页里的网页正在加载完的时候。
现在,在回合轮到你的那一刻会发生三件事。浏览器标签页的标题会改变,于是一个你根本没在看的标签页,会从标签栏里把这件事说出来。一声短提示音只响一次——而且只在切换的那一刻响,绝不会在页面加载时响,这样重新打开一局不会把一整队提示音补放一遍。而倒计时的圆环从满开始,这是以前没有的。
技术细节
结果是,这个圆环量的是错误的那口钟。回合长度被当作固定数字写死在里面——75 秒,也就是经典模式的——而引擎给每个模式各自的长度。Blitz 的一个回合是 60 秒,Speed 是 45 秒,所以在这两个模式里,圆环画出来的是一个在任何人做任何事之前就已经部分流逝的回合:在 Blitz 里它一开始就已走掉五分之一,在 Speed 里接近一半。过去三十天里这占了全部已结束对局的四分之一以上,而且最严重的恰恰是首先推荐给新玩家的那个模式。现在圆环根本不读任何常量:它测量的是真正在跑的这一个回合,把它在这个截止时刻上见过的最长剩余时间,当作用来作图的长度。这样还顺带覆盖了两种任何常量都对不上的长度:服务端只对经典模式生效的覆盖值,以及支付暂停被给到的那口更长的钟。
| 模式 | 真实回合长度 | 圆环显示为 |
|---|---|---|
| Classic | 75s | 75s |
| Blitz | 60s | 75s |
| Speed | 45s | 75s |
声音才是这个故事里古怪的部分。文件早就在了。它被录制、裁剪、做过响度归一、取得了授权,还带着自己的音量和自己的最小间隔被登记在目录里——什么都有,唯独少了一行说明「哪个事件应该播放它」。于是它上线了,躺在磁盘上,一共响过零次。找到它没花什么力气;察觉它不在,则需要有人问一句:这游戏怎么从来什么都不提示。
让它出声需要一个刻意的例外。当标签页处于后台时,声音通常被直接拒绝——这是一个合理的默认值,而在这里恰恰是错的,因为后台标签页正是这声提示的全部受众。现在这条规则住在一个小而有测试的函数里,而不是散落各处:先应用静音设置,它可以否决任何东西,之后才让这一声提示从别的声音过不去的地方通过。
