不久前,发现 Gemini 3 Pro 的生成能力特别强,尤其是一些小游戏内容。
于是,我花了一个周末,用它和 Claude Code帮我做了一款3D六子棋小游戏。
它支持三种游戏模式:
- 人机对战:选择不同难度的AI进对战
- 本地对战:在一台电脑上进行双方对战
- 在线对战:创建房间,邀请好友远程对战

由于国内对在线游戏版号具有严格限制,因此,该游戏选择在海外平台发布上线。
itch链接:https://zstar1003.itch.io/connect-6-master-3d
完整版链接:https://connect6.pages.dev
开源地址:https://github.com/zstar1003/Connect6
本文来复盘一下,这款游戏是如何一步步被做出来的。
动机
为什么要做这样一款游戏?
主要原因是我的舍友是个围棋爱好者,之前拉我对战。奈何本人水平太菜,屡战屡败。
既然围棋打不过,那就换种棋路。
一开始选择五子棋,但是五子棋先手优势太大,游戏很快就会结束,不耐玩。
为了让游戏进行得持久一些,我决定让AI把五子棋的规则拓展到六子。
项目初始化
有了这个想法后,在Aistudio中,用Build模式直接生成了一个雏形。
第一次生成的效果已经具备一定的游戏性了,但是缺陷也不少:
- 棋子的形状不对,变成了一个球型
- 棋盘的边角存在纹理闪烁
- 游戏仅支持本地对决,AI功能有bug

迭代打磨了几轮,外观的问题基本解决了。

完善AI功能
把项目下载到本地,进一步通过Claude Code进行优化。
首先解决Gemini 3 Pro没做好的AI功能。
根据Claude的建议,AI采用了启发式算法进行构建。
AI需要根据当前的局面,计算相关位置评分,然后进行选择最佳落子位置。
整体的决策逻辑如下图所示:

位置的评分根据棋型来进行,具体规则如下:

做好AI功能后,我立刻开始了和AI"酣畅淋漓"的对决。

结果发现,当五子棋把胜利条件变成六子,胜利难度一下子高了亿点点。
当AI开始全力防守,把棋盘下满了也难分胜负。
修改游戏规则
游戏规则是策略游戏最难设计的一环,如果设计不当,会导致游戏可玩性大大降低。
因此,我搜索了相关资料,发现六子棋的规则已经被人发明出来,甚至还有国际性的标准赛事。
六子棋,又名连六棋(connect6),发明人为国立交通大学资讯工程系教授吴毅成[1]。
它的设计之初,是为了改良五子棋不加限制条件下"先手必胜"的不合理情况。
它的规则很简单:黑方第一手仅下一颗黑子,之后双方轮流每次各下两子,先连到六子的一方胜利。
于是,我让AI基于此规则再次调整代码。
改完规则后,我再次和AI下了几局,发现AI实在太强了,很难赢它。
于是我进一步让AI帮我做了一下难度分级,原始难度为困难难度,增加简单和中等两档难度,降低玩家挫败感:
- 简单:70%随机下棋,30%智能选择
- 中等:完整评估但添加20%随机变量
- 困难:完整智能评估,无削弱

增加音效
为了让游戏更有沉浸感,我进一步让AI添加了以下三种音效:
- 胜利音效:游戏胜利时播放的音效
- 失败音效:游戏失败时播放的音效
- 落子音效:落子时的音效,从三段中任选一段播放

音效素材我是从 pixabay[2] 上下载得到,该网站提供了诸多免费可商用的音效素材。
增加联机模式
想要让不同玩家在浏览器中进行实时通讯,最简单的方案就是采用WebRTC。
WebRTC(Web Real-Time Communication)是一个开源项目及浏览器/应用程序接口(API)框架,旨在通过浏览器或移动端实现实时通信(音频、视频、数据),无需用户安装额外插件或本地客户端。
AI推荐我采用PeerJS,它是一个基于 WebRTC 的 JavaScript 库,可以让功能开发起来更加容易。
AI帮我设计了以下连接架构:

后端分两个服务器:
- PeerJS 服务器:用来同步不同玩家之间的游戏状态
- 房间API服务器:用来提供匹配大厅的房间信息
完善这个之后,运行项目,局域网环境下的设备就可以正常进行联机了。

为了让玩家在公网中也能通讯,需要单独配置一台公网服务器做地址转发,以实现P2P打洞[3],后面我会详细介绍配置流程。
上传itch
itch[4]是国外的一个独立游戏分发平台,它支持玩家直接将游戏以网页形式进行发布。
在itch上发布游戏非常简单,首先填写一些基本信息,包括游戏名称/分类/定价/介绍图等

此外,还有一些额外选项,比如游戏启动方式设置全屏启动,移动端方式选择横屏,这样电脑端和手机端都可以有较好体验效果。

由于 itch 本身仅支持游戏的静态前端,而不包含服务端,所以联机功能没法奏效。
因此我在此特供版的游戏中,取消了联机功能的显示。

Cloudfare部署前端
为了完整部署联机功能,我采用了Cloudfare部署前端+云服务器部署后端的方案。
对于免费用户,cloudfare[5] 提供了每天10万次的页面访问额度,能够足够满足我这种小规模的应用场景。
在cloudfare部署前端很简单,只需要在Pages里面上传构建完的dist文件就可以了。

部署完之后,它会生成可访问的Url链接。此外,它支持多次上传不同的版本,可根据实际情况进行版本回退。
云服务器部署后端
在云服务器上部署后端采用以下步骤,具体的命令有点长,可参考项目仓库中的DEPLOYMENT.md文档。
首先,在云服务器上开放9000和9001两个安全组端口,防火墙对这两端口进行相应放行。
之后,安装Node.js和PM2。
安装好后,使用 PM2 启动 PeerJS 服务器和房间 API 服务器。
然后安装Nginx和Certbot,用Let's Encrypt获取SSL证书。
最后,配置 Nginx 反向代理就可以了。
配置完毕后,就能和好友愉快地联机对决了。
经验总结
虽然我用AI帮我写了整个项目的全部代码,但是在实践过程中,还是有很多坑靠AI是无法一次性解决的。
下面进行具体复盘:
- 1.联机游戏Bug
这个游戏刚做完联机功能时,和室友测试了一下,发现存在了一个游戏bug,玩家1在落完一颗子后,玩家2竟然能立即落子,吞掉玩家1另一个落子机会。这个bug让策略游戏一下子变成拼手速游戏。发现后,才让AI进行修复。 - 2.不要用 Workers KV
一开始AI建议我采用Cloudfare的Workers KV去存储实时房间数据,这样就无需额外再部署后端服务器。但是实际发现,Cloudfare的这个免费额度太低,调试了一会就触发用量警告。

- 3.房间轮询问题
这个问题是和上一个问题同步发生的,AI一开始写的逻辑是:用户已启动就开始轮询房间信息,这样造成了很多资源无用消耗,后面我让它加了一个房间的刷新按钮,玩家点刷新之后再发请求。这种问题如果不是开发者去发现,AI很难自己意识到这种不合理的设计。

- 4.cloudfare环境变量覆盖问题
在cloudfare部署时,可以手动添加环境变量,但经实验发现,它会优先读取代码中.env.production的环境变量。如果在外部手动设置了相同名称的环境变量,会因覆盖问题无法生效。 - 5.SSL配置经验
Let's Encrypt可以免费为域名提供三个月的SSL证书,可以一行命令自动写入nginx配置,很方便。
失败的决战
最后,我和室友联机下了一把六子棋,我又凭实力输了。

我已经在考虑开发新游戏了。
参考
1\] https://zh.wikipedia.org/wiki/%E9%80%A3%E5%85%AD%E6%A3%8B \[2\] https://pixabay.com/sound-effects \[3\] https://webrtc.mthli.com/basic/p2p-hole-punching \[4\] https://itch.io/game/new \[5\] https://dash.cloudflare.com