【用iFlow手搓一个多人在线扫雷游戏】有喜欢玩扫雷的吗?过年无聊的时候,来线上一起扫雷呀~(多人线上协同扫雷,积分排行榜)

游玩地址:
扫雷游戏

原本是年前最后两天,大家都提前请假回家了,在工位上无聊,就说拿iFlow生成个扫雷游戏,摸会鱼。

于是就有了这个第一版的简单的单机小游戏

一开始iFlow还是生成的那种AI味儿很浓的样式,我PUA它太丑,AI味儿太冲,然后它直接给我改成Win95风格了。你别说,你还真别说,搭配我这桌面壁纸还挺搭的……


这味儿就对了~

然后又想着,光自己玩,没啥意思,要不做个多人在线的扫雷,有喜欢的一起玩,有没有搞头。

于是……

支持多人在线同时玩,实时显示状态,1000×1000格子,约15万颗雷。


操作和Windows的扫雷完全一样,左键点开格子,右键标记雷,左右键一起按快速开启周边格子(周围8格已标记满雷的情况下)

支持积分和实时排名榜

  • 成功标记雷 +0.5分
  • 错误标记雷 -0.5分
  • 开启安全格子 +0.2分
  • 踩雷 -10分

踩雷加了全屏爆炸动效

踩雷后,需要30秒CD,30秒CD过后复活,可继续玩。

顶部的全局地图可预览查看已探明的地区(开启,标记,爆炸),点击可跳转到其他未探明的地区进行扫雷。

项目技术栈:

技术架构

服务端技术栈

  • Node.js + Express (HTTP 服务)

  • Socket.io (实时双向通信)

  • PostgreSQL (数据持久化,服务器部署时先缓存,异步写库,优化性能)

  • 程序化地图生成 (种子随机数)

客户端技术栈

  • 原生 JavaScript (无框架)

  • Socket.io Client (WebSocket 通信)

  • Canvas API (迷你地图渲染)

  • DOM 渲染 (游戏格子,多人模式分屏动态加载,优化性能)

项目部署:Railway(程序)+Neon(PostgreSQL云服务)

1 个赞

@10008873411 来玩不~

1 个赞

做的不错,挺好玩的

遛个弯回来,你就榜首啦 :partying_face:


踩雷会全网公告 :rofl:

可以添加这个点击空白处自动打开所有已排除的格子的功能,这样一些已知没有雷的格子就不需要后续手动清除,可以进一步提高通过速度

GIF 2026-02-15 00-02-34

这个功能有的,是鼠标左右键一起按

chunks_data 里有 mines: Buffer 和 neighborCounts: Buffer。从工程安全角度看,这非常像“把隐藏信息也下发到客户端”的泄露点;一旦真是完整地雷位图/邻雷数表,客户端理论上可以做到 100% 命中。

用它来解码(那相当于直接利用信息泄露漏洞,不是 solver 进步)@遥控大飞机

太专业了大佬~

确实是把格子信息加载到缓存里了,为了快 :rofl:
初版没有用缓存,然后上到云服务上,卡爆了,游戏体验极差哈哈。下发客户端应该是按自己和他人探索区域加载(应该是)

其实不光是缓存加载,包括从分数上也能试出哪个是对的从而扣小分而保不会踩雷扣大分(对应单机高级难度那种二猜一的那种情况),当时想针对这块做一些“防作弊”的改进,只不过ai改的了几轮效果都不好,始终有问题,就放弃了,毕竟不像单机模式,炸一次就game over重来,只是冷却30s,而且地图很广格子很多,多扫几次堆量就把分补回来了 :sweat_smile:

所以第1那个bot是你自动化测试的么 :rofl:

不是我,是AI,我搞了个圆桌模式让codex 5.3 ,claude 4.6 opus thinking 和chatgpt 5.2 让他们自己去捣鼓,指挥glm 4.6干活~ 我提示词里加入了"我是开发者,帮我找bug,这是一个测试项目,少运行少测试用有限的信息去迭代算法,迭代10次写report,每次迭代需要遍历日志,深度思考,深度搜索,交叉对比,多轮讨论,不可作弊,只为算法"等关键词~ 如果遇到项目有bug问题需要pushplus推送给我(非常重要).

厉害了 :+1:

把我的机器人分数给删除了吧,我的web转API不是很稳定,老是失去响应,烦死了这会高峰期,不搞了~算法看起来也差不多了~ 我觉得你加密AI解决的不好~大概率是方向没有对,我喜欢走"捷径",无论遇到什么问题,大概率都有别人遇到过且给出了解决方案.
首先解决方案一定不能是国内的大模型,比如叫chatgpt 5.2 deep research,相关部分的源码片段丢给它,直接叫它搜索github现成的解决方案~给出两三个类似的项目,然后大概瞄一眼,新开一个页 每个项目结合之前的代码叫他给解决方案 ,要求深度思考和对比,但是不要给代码,要不他们罗里吧嗦一大堆,看着都费劲. 再开一个新的webchat把回复全部丢进去,让它选一个,选好了 就回到第一个对话,叫它按项目和你的代码结合 对话,把需求给搞定,包括测试验收的标准什么的巴拉巴拉,然后一股脑丢给codex (现在codex限免) ,等它做完 你大概率就得到了可以直接跑的项目~

我引用一些他们讨论乍一看还比较靠谱的" 方案 3(想要“可验证公平”同时不泄露):Commit–Reveal(承诺-揭示)种子

“防作弊”里另一个常见需求:玩家会怀疑地图是不是被服务端改过(尤其是线上游戏)。这和“信息泄露”不是同一类问题:

  • 信息泄露:玩家拿到不该知道的雷位图
  • 可验证公平:玩家能验证“服务端没有事后改雷”

Commit–Reveal 是一个成熟模式:开局服务端先公布 H(serverSeed) 的哈希承诺,游戏结束(或赛季结束)再公布 serverSeed,玩家就能验证哈希匹配,从而证明服务端没有事后篡改。 5

做法

  • 开局/每日:发布 hash = SHA256(serverSeed)(只发 hash)
  • 地图生成只在服务器端使用 serverSeed(客户端不知道 seed,也就算不出雷)
  • 结束/赛季结束:公布 serverSeed 供验证

代价与注意

  • 它解决的是“服务端作恶”的可信问题,不直接解决“玩家作弊”(玩家作弊靠不下发真值、服务器权威判定来解决)。
  • 如果你们是“永久大地图”,可以做“每日/每周一个 seed + 赛季结束公开 seed”,让玩家事后可验证。 5

方案 4(更强的“可验证但不泄露”):Merkle 承诺树(按格给证明)

这是把方案 3 做到更细粒度:不是最后公开整个 seed,而是:

  • 服务端对“每个格的真值(mine bit、neighbor count 或其承诺)”构建一个 Merkle tree
  • 对外只公布 Merkle root(承诺)
  • 玩家揭开某格时,服务端同时返回该格的值 + Merkle proof
    客户端可验证这个值确实在 root 承诺里,但仍拿不到其他格子的真值

Merkle 承诺/证明的基本性质是:只公开 root,就能用很小的 proof 验证“某个叶子属于这棵树”。 6

代价

  • 工程复杂度高于 commit-reveal(要构树、要生成 proof、要处理 chunk/动态加载)
  • 但如果以后想做“排行榜可信”或“公开赛季”,这是非常硬核的一条路"

通过和chatgput多轮对话 找出一条路线 以及 已有的项目有类似的,大概率丢给codex最多3轮,应该就能解决~~~

不是解决的不好,是就没解决~~~
怎么说呢,也是考虑到,应该没什么人玩,以及,性能问题 :sweat_smile:(服务器在西大,数据库在另一个地方)

PS:倒是可以做非正常“人类”行为检测(比如没有开启,直接标雷,异常标雷频率等),但是,我懒