一个基于 Vue 3 的概率与决策互动体验平台,包含多个趣味性与教育性并重的互动项目。
导航中心
- 现代化主页:卡片式导航设计,一目了然
- 统一风格:紫色渐变主题贯穿所有页面
- 响应式布局:完美适配桌面端和移动端
- 平滑切换:页面间流畅的切换动画
1️⃣ 死亡概率模拟器 💀
- 概率选择器:支持十亿分之一到百万分之一等多种死亡概率
- 实时模拟:模拟过程中实时显示存活时间
- 几何分布算法:使用数学方法精确计算
- 收益计算:按"每毫秒1亿元"计算理论收益
2️⃣ 风险抉择抽奖 🎰(新增)
- 双方案对比:
- 方案A:100%获得200万(稳定收益)
- 方案B:99%获得2亿(高风险博弈)
- 多次抽奖:支持单次、10次、100次抽奖
- 详细统计:成功率、总收益、期望值对比
- 震撼视觉:金色粒子动画、数字滚动效果
- 结果展示:可展开查看每次抽奖详情
3️⃣ 随机点名器 📝
- 公平随机:真随机算法确保公平性
- 自定义名单:支持导入、编辑学生名单
- 数据持久化:名单保存在本地存储
- 教学优化:适合课堂教学场景
- 十亿分之一 (1/1,000,000,000) - 超极低死亡率
- 一亿分之一 (1/100,000,000) - 极低死亡率
- 千万分之一 (1/10,000,000) - 低死亡率
- 百万分之一 (1/1,000,000) - 中等死亡率
- 现代化毛玻璃效果
- 渐变背景和按钮
- 实时状态指示器
- 优雅的动画过渡
- 前端框架:Vue 3.2.13(Composition API)
- 构建工具:Vue CLI 5.0.0
- 开发工具:Cursor IDE + AI辅助开发
- 样式方案:原生CSS3 + 渐变效果 + 动画
- 状态管理:组件内部状态 + Event Emitter
- 路由方案:自定义页面切换(无需 vue-router)
- 部署方案:Node.js + Nginx 反向代理
tutong/
├── src/
│ ├── components/
│ │ ├── HomePage.vue # 主导航页面
│ │ ├── DeathSimulator.vue # 死亡概率模拟器
│ │ ├── LotteryGame.vue # 风险抉择抽奖(新增)
│ │ └── RandomNamePicker.vue # 随机点名器
│ ├── App.vue # 根组件(页面路由)
│ ├── main.js # 入口文件
│ └── assets/ # 静态资源
├── vue.config.js # 生产环境配置
├── vue.config.local.js # 本地开发配置
└── package.json # 依赖管理
- 访问 http://localhost:8080 进入主页
- 选择你感兴趣的互动项目
- 点击"进入体验"按钮
- 选择概率:点击概率按钮选择每秒死亡概率
- 开始模拟:点击"开始模拟"按钮开始生存模拟
- 观察过程:实时查看存活时间增长
- 查看结果:模拟结束后查看最终存活年数、天数和理论收益
- 选择方案:点击方案A(稳定)或方案B(博弈)
- 选择次数:选择单次、10次或100次抽奖
- 开始抽奖:点击"开始抽奖"按钮
- 查看结果:
- 单次:直接查看中奖结果和金额
- 多次:查看统计数据、对比分析和详细列表
- 再来一次:点击"再来一次"重新选择
- 导入名单:点击"导入名单"批量导入学生姓名
- 开始点名:点击"开始点名"开始随机滚动
- 停止点名:再次点击停止并确定选中的人
- 编辑名单:鼠标悬停在姓名上可编辑或删除
使用几何分布逆变换采样方法:
- 公式:
X = ceil(log(U) / log(1-p)),其中 U ~ Uniform(0,1) - 期望值:
E[X] = 1/p - 相比传统蒙特卡洛方法,性能提升显著
使用真随机数生成:
- 方案A:确定性返回200万
- 方案B:生成 [0,1) 区间随机数,< 0.99 则中奖2亿
- 期望值计算:方案A为200万,方案B为1.98亿
- 将代码传到linux服务器上面
- 使用node部署,vue的https限制真多,搞了好多才搞定,第一次真心难搞定
- 配置nginx反向代理
- 最终发布部署
- GitHub: @wenbochang888
- 微信公众号: 《程序员博博》
欢迎关注我的微信公众号,获取更多技术分享和项目更新!
欢迎提交 Issue 和 Pull Request 来帮助改进项目!
本项目采用 MIT 许可证。
npm run serve
# 访问:http://localhost:8080nohup npm run prod-dev > /root/logs/vue/dm.log 2>&1 &
# 验证nginx: /usr/local/nginx/sbin/nginx -t
# 重载nginx: /usr/local/nginx/sbin/nginx -s reload

