五子棋最近的进展:联机、搬服务器和自动更新
五子棋是用 Godot 写的小游戏,有电脑版和安卓版。最初只能人机对战,最近加上了联机,也解决了每次更新都要重新发安装包的问题。
现在能玩什么
- 人机对战:和电脑下
- 实战教练:带提示和分析的练习模式
- 联机对战:建房间,或者输入房间号加入,和朋友对下
联机是怎么做的
只给家人朋友玩,所以没有用 Steam 这类平台,而是自己写了一个中转服务器(Python + WebSocket)。它只负责把两边的消息互相转发,不管棋局本身。
棋局由建房的一方说了算:落子是否合法、谁赢了,都在房主那边判断,再同步给对方;另一方只发“我想下在这里”的请求。这样两边的棋盘不会对不上,服务器也很轻。
后来做大富翁的联机时,这个中转服务直接复用了,两个游戏的数据完全隔开。
踩的坑
首尔服务器国内连不上。 一开始租的是腾讯云首尔的轻量服务器,结果国内的朋友连不上。用 TCPing 测了一圈,确认是国内访问首尔的线路问题,最后把中转服务搬到了腾讯云的国内服务器,国内就能正常联机了。
上传速度很慢。 从澳洲往国内服务器传文件,只有每秒几十 KB。电脑版安装包 110 MB,只能先压缩到 39.6 MB 再传。好在日常更新只有几百 KB,平时感觉不到。
服务器
第一次自己管服务器,做了基础的安全设置:只允许密钥登录、关掉密码登录、装了 fail2ban、防火墙只放行用得到的端口,改动之前先拍快照,出问题能回滚。
自动更新
以前每出一个新版本,都要把安装包通过微信发给家里人重新装。现在用了 Godot 的 pck 资源包热更新:游戏启动时检查版本,有新版本就下载一个几百 KB 的更新包,不用重装。只有改了引擎版本、安卓权限这类更新包管不到的东西,才需要重新装安装包。
接下来
- 手机版界面重做:从一个大侧栏拆成启动页、对局页、联机大厅几个页面
- 联机功能补全:聊天、悔棋、新局请求、先后手选择,悔棋和新局都要对方同意
- 防误触:手机上落子前多一步确认
- 玩家记录:知道都有谁在玩
这几项的方案已经定好,接下来一项项做。
本文由 Claude 根据我的开发记录整理。