大约有九亿人知道如何下国际象棋,但几乎没有人曾目睹过对手惊慌失措的样子。我们花了二十年时间将棋盘数字化,却默默抛弃了坐在棋盘后面的那个人。
于是,我把那个人放了回去。我构建了罗维安(Rovian):一款支持双方视频通话的实时国际象棋游戏。两个棋盘,两张面孔,以及在你丢掉王后之后那令人极度不适的沉默。
我独自开发了它。目前处于公开测试阶段。以下是技术细节,以及那些令人尴尬的部分。
那个无人报告的漏洞
在线国际象棋是一个已解决的工程问题。利切斯(Lichess)是一款真正精美的开源作品。棋网(Chess.com)是一台印钞机和谜题生成机器。它们都没有出问题。
但想想当你按下“开始游戏”时,你实际上得到了什么。你得到一个等级分、一个用户名,以及完全的沉默。你的对手只是一串字符,要么认输,要么不认输。没有畏缩,没有叹息,也没有坐在桌子对面的人在你悬停棋子时说“你确定要这么走吗”。
在我的家乡,我们有一个词来形容国际象棋真正存在的地方:卡赫韦哈内(kahvehane),即咖啡馆。那里有老人、廉价的茶、糟糕的开局理论,还有一群五个人告诉你你的步法很愚蠢。这不是怀旧,这才是真正的产品。棋盘从来不是重点,棋盘只是借口。
每个国际象棋应用程序都保留了借口,却删除了重点。
罗维安是什么
两名玩家。一个棋盘。双方摄像头开启。你能看到对手意识到马叉攻击一直存在的那一瞬间。
就是这样。这就是核心功能。其他一切都是基础设施。
技术栈
给那些直接滑到这里看技术细节的人:
前端:使用 Next.js 框架。国际象棋逻辑使用 chess.js 库,棋盘渲染为自定义实现。
赛后分析:斯托克菲什(Stockfish)引擎编译为网页汇编(WASM),在客户端运行。让你的浏览器进行计算,我的服务器账单得以控制。独立开发者负担不起服务器端的引擎分析,而且事实证明你也不需要。
谜题:使用利切斯(Lichess)的 CC0 协议谜题数据库,采用格里克-2(Glicko-2)算法进行评级。站在那些免费贡献成果者的肩膀上。
没有什么异乎寻常的技术。有趣的决策都在于决定不构建什么。
三个出问题的地方
- 视频与游戏状态的时间不同步
网页即时通信(WebRTC)视频是点对点的,速度很快。游戏状态通过服务器传输,具有权威性。这是两个不同的时钟。
结果是:你对手的面部反应比你棋盘上渲染出该步法大约早一拍。在半秒钟的时间里,你看着某人对一个你还没听到的笑话发笑。解决这个问题不是一个简单的“修复”,而是对延迟预算的永久妥协。我选择稍微缓冲棋盘渲染,而不是延迟视频,因为卡顿的面部画面看起来像是坏了,而 120 毫秒的棋盘延迟则被视为正常。
- 空房间问题
通常在发布文章中,这里会说“社区正在增长”,然后一笔带过。
罗维安处于公开测试阶段。如果你在周二凌晨四点登录,那里没有人。因此,有一些训练机器人来填补空闲的匹配槽位。
它们被标记为训练机器人。我不会为了营造测试版看起来很繁忙的假象而上演一场虚假人群的戏剧,因为这款产品的全部卖点就是另一端有一个真实的人类。对此撒谎无异于自毁前程。
如果你想找真人对战,请在伊斯坦布尔时间 21:00 上线。那时房间才是真的满员。
- 我只有一个人
我不再亲手编写大部分代码。我指挥它们。使用克劳德代码(Claude Code)、视觉工作室代码(VS Code),配合许多非常具体的提示词,以及大量无情的删除操作。人们对此持有不同意见。我的观点是,一个能在几个月内而不是几年内发布可运行的实时视频国际象棋平台的独立创始人,已经赢得了这场争论
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。