1998年夏天,我在镇上的小卖部门口,盯着那个塑料摇奖桶里滚来滚去的乒乓球。2026年的今天,我居然在用代码复刻那种「不知道下一秒会蹦出哪个数字」的心跳。这篇文章,就是我攒了半年的全部资料。
我是顾南,一个白天写前端、晚上折腾旧玩具的独立开发者。这个站是我自己维护的,没有团队,也没有甲方。
我做的第一版摇奖器是2019年用 Excel 宏写的,当时只为了跟同事老周年会抽奖时别「手抖黑幕」。后来他调走了,那个文件我留到了现在。
为什么做这个站?因为我在网上搜「模拟1-49摇奖器仿真app」时,翻到的全是几行代码就敢叫「仿真」的东西。我想把我踩过的坑、改过的种子、跑过的十万次分布图,原原本本摊开给你看。
说白了,我就是个爱较真的怀旧派。你如果也曾在摇奖桶前屏住呼吸,那我们大概能聊到一块去。
2025年11月3日晚上11点40分,我把种子数改成 314159,连跑了1000次,摇出「7」的次数是23次。正常期望约20.4次——这就是「仿真」和「假装仿真」的区别。
说实话,市面上那些「一秒摇六个号还带特效」的仿真app,大多只是轮播图。真正的模拟1-49摇奖器仿真app,应该敢让你看分布图,敢跑十万次。
「摇奖机的公平不在那个球,在开始摇之前,没有人动过桶。」
—— 田建国,《概率的日常》第112页,我2026年1月重读时记下的
你可能会问,一个1到49的摇奖器,有什么好「完整资料」的?我的答案是:它模拟的不是数字,是「无法被操控的随机」。49个号码,每次摇出一个,不重复,直到凑满所需个数。逻辑朴素,但实现顺序、种子初始化、边界处理,每一步都能把人带沟里。
我把完整资料拆成三块:1到49个码公式讲数学层;1到49个码自动统计器讲工程层;还有ao3homearchive那篇记录了我最初找参考时翻到的老资料。你顺着读,基本不会漏。
别急着加花哨动画。我2025年做过一版,光「球滚动」的缓动就调了两天,结果摇奖逻辑里把 `Math.floor` 写成了 `Math.round`,区间直接偏了半个号。这错误我现在想起来还脸红。先让分布图说话,再谈美感。
如果你也在做类似的仿真,欢迎顺着小丽君统计器下载安卓那篇的思路跟我对数据,我最近正在整理第二批。