从单机小游戏到多人房间:你画我猜的开发记录

过去的游戏库主要是打开页面后独自游玩的小游戏。这次想增加一种可以把链接发给朋友、几个人同时参与的玩法,于是选择了你画我猜:一个人画,其余人抢答,最后看看谁最懂彼此的画风。

先让朋友顺利进入同一个房间

第一版不做账号系统。输入昵称创建房间,再分享邀请链接或六位房间码,就能让朋友加入。每房间最多八人,至少三人开始。默认每题九十秒、两轮,房主可以调整时长和轮数。

房间并不只是几条聊天消息。它需要知道谁在线、谁是房主、谁正在画、这一题什么时候结束,以及每个人是否已经猜中过。于是把这些规则放到了服务器,网页负责展示和输入。浏览器不能自己宣布猜中,也不能自己加分。

画板传坐标,不传整张截图

画板使用浏览器 Canvas。玩家落笔和移动时,发送笔触颜色、粗细及归一化坐标。其他玩家收到同样的笔触后重新绘制。这样不同屏幕尺寸看到的图形位置相同,也不必不断上传整张图片。

绘图输入采用 Pointer Events,鼠标与触屏共用逻辑。画手绘图时关闭画板区域的触摸滚动,其他页面区域仍然可以滚动。画笔、橡皮、撤销和清空都由服务器确认,非画手发送绘图消息不会生效。首次加入或重连时,服务器发送当前画板快照,后来进入的玩家也能看到之前画过的内容。

为了限制绘图带来的资源开销,每题限制笔触和坐标点总量,WebSocket 消息也有大小和频率限制。这些是基础保护,不代表已经完成高并发压力测试。

答案不能藏在所有人的网页里

最容易忽略的地方是答案隔离。如果把答案发给所有浏览器,只在界面上遮住它,玩家依然能从网络消息里找到答案。因此候选词只发给当前画手,其他人只收到字数提示。

猜中后的消息也不原样广播答案,而是显示某位玩家猜中了。每位玩家每题只得分一次:猜得越早分数越高,范围为一百到三百分;每有一人猜中,画手得到五十分。时间结束或所有可猜玩家都猜中后,才向房间公布答案。

断线是正常情况,不是异常玩法

手机切后台、网络短暂中断都很常见。第一版为断线保留三十秒身份,使用随机重连令牌恢复原玩家和分数;令牌只发给该玩家,不在房间成员信息里广播。房主断线时,权限自动交给仍在线的玩家。中途加入的人本局观战,下一局再参与。

这仍然是一个轻量的朋友房间游戏:当前房间放在服务内存中,没有账号、历史战绩或云存档。服务重启会结束正在进行的房间,不适合把它当成持久化比赛系统。

怎样验证它真的能联机

开发时除了规则单元测试,还启动了三个独立 WebSocket 客户端,验证创建和加入、私有词语、画笔同步、猜中计分、身份重连及不可信来源拒绝。完整轮次结束与再次开局由带可控时间的规则测试验证。网络测试和浏览器操作解决的是不同问题,不能只用“网页能打开”来代替联机验证。

欢迎邀请朋友试试:进入你画我猜。如果遇到问题,记下操作步骤和出现的提示,比只说“卡住了”更容易定位。

上一篇
下一篇