项目需求#
Bram Cohen 在发明 BitTorrent 之后创办了 Chia。他希望两个人可以实时以真实资金在技巧类游戏中一决高下,中间没有赌场,输家也无法不付钱就一走了之。Chia 团队用状态通道实现了这一点。两名玩家把赌注汇入 Chia 区块链上的同一枚币中,在链下一手接一手地对局,每一步都由双方签名,最后在链上结算。如果一方作弊或失去响应,游戏就转到链上,由代码强制执行规则。
Bram 希望用三款游戏来展示这个想法。在 California Poker 中,每名玩家拿到 8 张明牌,并交出其中 4 张。Krunk 是一款类似 Wordle 的猜词游戏,名字是出于商标方面的考虑选定的。Space Poker 的玩法类似德州扑克,但没有花色。
Chia 的工程负责人告诉 Saif Pasha,Bram 需要 UX 和 UI 方面的帮助,并安排了一次与 Bram 及其首席工程师的通话。当时唯一能运行的游戏是 California Poker:一个只有寥寥几个表单控件的简单 HTML 页面,跑在 Rust 引擎之上,用途是测试引擎,而不是供人游玩。另外两款游戏还只停留在草图阶段。


难点:每一种结局都牵动资金的牌桌#
Bram 已经写下了每款游戏的规则、流程和结局,甚至每种花色的颜色。但这些游戏仍然缺少一个玩家能看懂的界面。玩家只能看到自己这一侧,所以界面必须说明轮到谁行动、自己即将交出什么,以及在这一手结束后赢得了什么。
界面还必须解释普通纸牌游戏从未遇到过的结局,每一种都以不同的方式转移真实资金:
- 这一手被取消,资金退回。
- 作弊的对手被罚没,或者一方过早超时,另一方拿走全部资金。
- 未知的花费或链重组(reorg)使这一手以错误告终。
- 会话结束,原因是对局转到了链上、余额过低,或者一方拒绝再来一手。
界面设计#
Bram 希望由自己的团队来写代码,因为他预计会有很多轮修改,并希望一起完成。于是设计就交给了 Saif,一次一款游戏。
California Poker 排在第一,以单个玩家的座位视角绘制:8 张明牌,选出 4 张交出,等待对手,然后是交换和结果。玩家能看到双方各自的 8 张牌,却永远看不到对手正在选哪 4 张,因为猜测这一点正是游戏本身。Bram 的首席工程师先审阅每一版,Bram 随后审阅,两人都在 Figma 文件上留下评论,每一轮都塑造了下一轮。界面会告诉每名玩家是赢是输,不显示玩家编号,因为 Bram 不希望玩家之间存在任何顺序或身份之分。
Bram 原本预计,牌手会希望自己的 8 张牌不按固定顺序排列,以便手动整理。Saif 则主张按点数排序,这样玩家在选出 4 张之前就能一眼看清整手牌,并把他的理由写在流程图旁边。Chia 公布的 California Poker 规则按点数对手牌排序。
California Poker 定稿后,接着是 Krunk:为对手选一个词,每次猜测及其提示,以及结果。第一次或第二次猜中即可拿走全部金额,之后每多猜一次,赔付就更少,因此界面会在第一次猜测之前显示赌注。Bram 同样批准了 Krunk。Space Poker 则在 Saif 的艺术指导下,从 California Poker 的设计演化而来。
将 California Poker 开发进 Chia 的应用#
后来,Chia 自己的前端工程师被其他工作占住,于是公司来找我们要一名开发者。我们的团队加入了 Bram 在 Chia 代码仓库中的游戏团队,处理 Chia 的工单,在玩家应用中开发了 California Poker:从大厅(玩家在这里以选定的赌注开设房间,另一名玩家加入)一直到这一手牌中的每一步。

一手牌结束时,应用会高亮显示每名玩家最好的 5 张牌,并把牌型一直说明到踢脚牌(kicker),没有人会不明白自己为什么输。

成果#
交接时,California Poker 已经能在 Chia 自己的玩家应用中从大厅一路打到最后一手,Bram 也已批准了 Saif 设计的两款游戏。随后,Bram 亲自把前端继续推进到 Chia Gaming 的 beta 版,该版本上线了全部三款游戏,供合作伙伴运营。