V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zzy8200
V2EX  ›  分享创造

用 Cursor 写了一个德州扑克游戏平台(线上游戏筹码管理+发牌,线下游戏筹码管理)

  •  
  •   zzy8200 ·
    zeruniverse · 5 天前 · 2030 次点击

    代码: https://github.com/zeruniverse/texas_game

    demo 部署: http://8.154.30.149:5173/

    其实重点不是这个游戏平台本身,而是想分享一下用 Cursor 做软件工程的经历。

    为什么做这个平台

    我平常工作中用 AI 编码工具大部分是在已有项目上修修补补,用补全比较多。而在已有项目中,因为有些代码也写得不标准,导致用 AI agent 反而会把事情搞糟。所以这次我的主要目的是想体验纯 AI 编程,即不手动改任何代码,全部通过给 AI agent 指令来完成一个项目以及不手动改任何代码,全部通过给 AI agent 指令来重构一个项目

    写德州扑克游戏平台纯粹是前几周线下游戏没有筹码搞得大家很难受,然后这个项目感觉对于 AI 来说也难度适中。没有什么特别的原因,做狼人杀或者什么 ERP 系统也是一样的。

    项目经历

    整个项目跨度 2.5 天(周四周五以及周六半天),周四要上班所以整天只花了 3 小时,周五白天上班花了午休 1 小时,晚上从 9:30PM 通宵到周六的 4:30AM ,花了 7 小时,周六起床后花了 3 小时。所以整个项目(包括打字/debug/测试)总共花了 13 小时(可能物理时间要多加两三个小时,需要写大量代码的时候我就把 cursor 挂着去干别的了)。分为两部分:

    1. 实现并验证功能,花费 7 小时
    2. 把每个游戏房间的逻辑拆成单独的 worker 线程,花费 6 小时

    整个项目我只扮演产品经理和测试工程师,告诉 AI 我想要什么及 BUG 的现象是什么,技术选型及 debug 全部尽量由 AI 完成(期间有大约 3 次我让 AI 改了 10 次 AI 都改不对,所以我就帮了 AI 一下告诉他哪里的逻辑不对,代码修改仍然是 AI 做的)

    AI 的技术选型是前端 VUE + 后端 Node.js 。我对这两者其实都算有所接触但不是很熟,(我工作中主要写 python 和 cpp, 但没有关系,反正代码也不是我写

    我用了 o4-mini, claude-4.0-sonnet-thinking, deepseek-r1 和 gemini-2.5-pro ,全是思考模型,但是 deepseek-r1 和 gemini-2.5-pro 会把事情搞糟。所以后面只用 o4-mini, claude-4.0-sonnet-thinking

    Cursor 的账号总共消耗了 157 次请求(目前 o4-mini 每次请求算 1 次,claude-4.0-sonnet-thinking 算 0.8 次),我应该总共请求了大概 130 次 agent(有些比较长的任务 cursor 会自动中止,此时按 resume 继续运行会重新算请求,请求数量大概是 180 次左右)

    目前这个项目的状态我自己开了几个不同的浏览器测试已经测不出什么致命问题了。

    “可以节省”的时间

    1. deepseek-r1 和 gemini-2.5-pro 浪费时间。早不用这两个估计能省 0.5 小时
    2. 3 个 bug AI 怎么改都改不对,所以让 AI 加调试信息然后自己去看代码。再加上已经知道怎么改后,不自己改,教 AI 改。这 3 个 bug 自己改估计能省 1 小时 (我是 AI 改了差不多 10 次还改不对才自己去看,AI 每次改都要时间)
    3. 半夜 o4-mini 特别特别慢,感觉是美国那边开始干活导致的。如果一直是白天的速度估计能再省 1 小时
    4. 如果我再熟悉一点 vue 以及 node.js ,我感觉可以再省 1 小时
    5. 按我自己的想法把复杂模块的技术方案告诉 AI, 让 AI 按我的技术方案做,可能可以再省 2 小时。

    所以在极限情况下项目时间是一个 8 小时的编码,如果一开始就告诉 AI 做成多线程就不需要重构了,这样的话,大概项目时长在 6 小时左右。

    我大概看了几眼代码和 AI 给出来的 PRD ,如果不用 AI 纯手工我一个人把这个项目做完(不摸鱼)大概需要 80 小时以上的工作量(这个一方面是我写前后端不专业,全栈大佬可以看代码和 demo 估一个时间)

    经验

    1. 项目刚开始一定要让一个靠谱的 AI 写一个完整的 PRD, 然后把 prd 作为 context 把项目框架搭出来。直接按需求开始写会很乱,因为需求几个字也描述不清楚。我是先让 o4-mini 根据 web 完全调研德州扑克游戏,然后根据我的需求写完整 PRD 。后面的框架代码把核心逻辑用 TODO 表示出来,然后用后续的指令去消除 TODO

    2. 复杂的模块一定要让 AI 单独去写,不要混在一大堆任务里,不然一定写不对

    3. claude-4.0-sonnet 不太聪明但是一般不会写 bug ,o4-mini 聪明但喜欢写小 bug 。所以难的小模块和框架让 o4-mini 去写,修 bug 都用 claude-4.0-sonnet

    感想

    1. 5205 年了应该放弃传统编程思维,不要再手撸代码
    2. 于程序员来说,经验的重要性会快速下降,逻辑能力的重要性会提升( AI 确实没有办法解复杂的 bug )
    3. 懂技术的产品经理是这个时代的王
    4. 基于 3 ,一个人可以开一家技术公司的时代已经来了
    5. 这个世界可能再也不需要那么多程序员岗位了,得想想后路。
    18 条回复    2025-06-02 18:06:00 +08:00
    hhxsky
        1
    hhxsky  
       5 天前 via Android
    懂政策的产品经理才是王,当年腾讯德州扑克为啥没有了😳
    geebos
        2
    geebos  
       5 天前
    有点简陋哈哈,开始的时候直接告诉 AI 需要游戏界面,同样的时间应该也能完成
    tetora
        3
    tetora  
       5 天前
    @hhxsky 国内不允许上德州,德州的竞技性太低了赌性太强,不然雀魂同款德州早上了
    zzy8200
        4
    zzy8200  
    OP
       5 天前 via iPhone
    回复一下,做的简陋就是想说这是个 demo ,不是真的线上游戏。不然国内有政策风险
    lneoi
        5
    lneoi  
       5 天前
    如果对代码结构、编码风格、样式细节没有要求,AI 可以很快的实现,一旦要求多一些,时间成本大大增加
    superkkk
        6
    superkkk  
       5 天前
    看不懂咋玩,看不见手牌和公共牌
    zzy8200
        7
    zzy8200  
    OP
       5 天前 via iPhone
    @superkkk 你进的如果是线下房间,他只用来记筹码和控制流程(比如跟平),牌要自己线下发。 线上房间软件会负责发牌
    weixind
        8
    weixind  
       5 天前
    你的这些感想说明还在愚昧之巅,再多想想。
    Perry
        9
    Perry  
       5 天前 via iPhone
    懂产品懂代码没用,缺个正经设计的产品我一秒钟都不想用
    foufoufm
        10
    foufoufm  
       5 天前
    很有意思的分享,感谢!
    gotoschool
        11
    gotoschool  
       5 天前
    楼主也就是拿这个练练手 不说项目本身 只说现在 ai 确实已经可以一个人成立一家技术型公司了
    然我就正在这么干
    yanq
        12
    yanq  
       4 天前 via Android
    ai 适合新项目,面对屎山,它改的只会更屎
    lxhill
        13
    lxhill  
       4 天前
    我也一直想要找个开源且足够公平的德州扑克系统,家里有台 homelab 可以部署(安装了 Windows server2025 ),不过我是纯小白...

    刚询问了下 Gemini 关于项目的发牌系统随机性,其回答如下:
    该项目确实是一个功能相对完善的在线德州扑克系统。
    其发牌系统的随机性主要依赖于 JavaScript 内置的 Math.random() 函数和标准的 Fisher-Yates 洗牌算法。对于普通娱乐用途,这种组合通常被认为是足够随机和公平的。
    若要达到专业博彩级别的安全性和可审计性,则可以考虑以下增强措施(当前项目似乎未包含):
    1.使用 CSPRNG 替代 Math.random()。
    2.引入可验证的随机性机制,例如结合服务器种子和客户端种子生成随机数,或使用第三方可信随机性信标服务。
    3.提供详细的牌局历史和可复现的随机种子(如果可能)。
    总而言之,该项目的发牌系统采用了行业内常见的标准做法。其随机性水平对于大多数在线纸牌游戏是合适的,但未达到专业赌场级别的加密安全标准。

    请问大佬是否考虑优化下发牌系统随机性呢,例如使用 CSPRNG 或引入第三方可信随机性信标服务?
    我想摸索着看如何部署到本地,非常感谢!
    zzy8200
        14
    zzy8200  
    OP
       4 天前 via iPhone
    @lxhill 不打算优化随机性,你如果只是部署着玩,你就告诉大家是真随机就行。你如果想赌,那我也不应该帮 :)
    lxhill
        15
    lxhill  
       4 天前
    @zzy8200 虽然只是部署跟朋友玩玩,但也想尽可能完善,毕竟随机性可以说是这个项目最核心的要素,发牌系统的随机数是线上德州被吐槽最多的地方。
    没事,我自己折腾折腾~
    lxhill
        16
    lxhill  
       4 天前
    刚尝试结合 Claude 做了这些优化,测试了下还 OK~

    ✅ 加密级随机数生成器 - 替换不安全的 Math.random()
    ✅ 7 轮混合洗牌算法 - Fisher-Yates + Riffle 双重洗牌
    ✅ 每局强制重新洗牌 - 确保每局都是全新的随机序列
    ✅ 完整性验证系统 - 自动检测牌组是否有重复或缺失
    ✅ 详细日志监控 - 可以实时查看洗牌和发牌过程
    zzy8200
        17
    zzy8200  
    OP
       4 天前 via iPhone
    @lxhill 其实把 const j = Math.floor(Math.random() * (i + 1));

    替换成

    import { randomInt } from 'crypto';
    const j = randomInt(0, i + 1);

    就行。但是吧,朋友之间玩真没必要
    lxhill
        18
    lxhill  
       3 天前
    @zzy8200 但是确实喜好德州的会对于随机性有不可自拔的执念,哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5592 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:41 · PVG 14:41 · LAX 23:41 · JFK 02:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.